{"id":304,"date":"2017-12-21T03:59:58","date_gmt":"2017-12-21T03:59:58","guid":{"rendered":"http:\/\/www.liutianfeng.com\/?p=304"},"modified":"2017-12-21T03:59:58","modified_gmt":"2017-12-21T03:59:58","slug":"bash%e5%86%85%e5%ae%b9%e5%9b%9e%e9%a1%be","status":"publish","type":"post","link":"https:\/\/www.liutianfeng.com\/?p=304","title":{"rendered":"bash\u5185\u5bb9\u56de\u987e"},"content":{"rendered":"<p>bash\u53ca\u5176\u7279\u6027\uff1a<\/p>\n<p>shell: \u5916\u58f3\u7a0b\u5e8f<\/p>\n<p>\u5e7f\u4e49\u7684shell\u5206\u7c7b:<br \/>\nGUI\uff1aGnome, KDE, Xfce, \u5e38\u7528\u7684\u4e09\u79cd<br \/>\nCLI: sh(bone\u5f00\u53d1\u7684), csh(Berkeley, Bill Joy\u5f00\u53d1\u7684.), ksh(\u5546\u4e1a\u7684,\u793e\u533a\u7248), bash(Bone again shell, \u5f00\u6e90, \u4f17\u591aLinux\u7684\u9ed8\u8ba4shell), tcsh(kshell\u7684\u589e\u5f3a\u7248, \u5f00\u6e90\u7684), zsh(\u529f\u80fd\u66f4\u52a0\u5f3a\u5927, \u4f46\u662f\u4e0d\u662f\u5f88\u6d41\u884c)<\/p>\n<p>root, student<br \/>\n\u7a0b\u5e8f\uff1a\u8fdb\u7a0b\u53ef\u4ee5\u7406\u89e3\u4e3a\u7a0b\u5e8f\u7684\u526f\u672c, \u53ef\u4ee5\u662f\u591a\u4e2a\u8fdb\u7a0b, \u4f46\u7a0b\u5e8f\u53ea\u6709\u4e00\u4e2a; \u8fdb\u7a0b\u662f\u7a0b\u5e8f\u7684\u526f\u672c\uff0c\u662f\u7a0b\u5e8f\u6267\u884c\u5b9e\u4f8b. \u8fdb\u7a0b\u662f\u6709\u751f\u547d\u5468\u671f\u7684.<\/p>\n<p>\u8fdb\u7a0b\uff1a\u5728\u6bcf\u4e2a\u8fdb\u7a0b\u770b\u6765\uff0c\u5f53\u524d\u4e3b\u673a\u4e0a\u53ea\u5b58\u5728\u5185\u6838\u548c\u5f53\u524d\u8fdb\u7a0b, \u770b\u4e0d\u5230\u5176\u4ed6\u8fdb\u7a0b\u7684\u5b58\u5728.<\/p>\n<p>\u7528\u6237\u5de5\u4f5c\u73af\u5883\uff1a\u6bcf\u4e2a\u7528\u6237\u6253\u5f00\u90fd\u6709\u81ea\u5df1\u7684\u73af\u5883, \u8bbe\u5b9a\u53ef\u4ee5\u5404\u4e0d\u76f8\u540c, \u9ed8\u8ba4\u4e00\u822c\u662f\u4e00\u6837\u7684.<\/p>\n<p>bash: \u547d\u4ee4\u63d0\u793a\u7b26prompt<br \/>\n#: \u7ba1\u7406\u5458<br \/>\n$: \u666e\u901a\u7528\u6237<\/p>\n<p>shell\u4e2d\u8fd8\u80fd\u6253\u5f00\u5b50shell. \u7528bash\u547d\u4ee4\u53ef\u4ee5\u76f4\u63a5\u6253\u5f00bash\u7684\u5b50shell.<br \/>\nshell\uff0c\u5b50shell<\/p>\n<p>Example:<br \/>\n# bash; bash<br \/>\n# pstree | tail -5<br \/>\n|-rsyslogd&#8212;3*[{rsyslogd}]<br \/>\n|-snmpd<br \/>\n|-sshd&#8212;sshd&#8212;bash&#8212;bash&#8212;bash-+-pstree<br \/>\n| `-tail<br \/>\n`-udevd&#8212;2*[udevd]<br \/>\n\u53ef\u4ee5\u770b\u5230sshd\u4e2d\u6709\u4e09\u5c42bash. \u7528exit\u6765\u9000\u51fa\u5b50shell.<br \/>\n\u6bcf\u4e00\u5c42shell\u6709\u81ea\u5df1\u72ec\u7acb\u7684\u73af\u5883, \u56e0\u6b64\u5728\u7236shell\u4e2d\u7684\u8bbe\u5b9a, \u5728\u5b50shell\u4e2d\u662f\u65e0\u6548\u7684.<br \/>\nshell\u4e2d\u53ef\u4ee5\u6253\u5f00\u4e0d\u540c\u7248\u672c\u7684shell:<\/p>\n<p>bash: \u5e38\u7528\u7684\u7279\u6027<br \/>\n1\u3001\u547d\u4ee4\u5386\u53f2\u3001\u547d\u4ee4\u8865\u5168<br \/>\n2\u3001\u7ba1\u9053\u3001\u91cd\u5b9a\u5411<br \/>\n3\u3001\u547d\u4ee4\u522b\u540d<br \/>\n4\u3001\u547d\u4ee4\u884c\u7f16\u8f91\uff1a\u5feb\u901f\u5b9a\u4f4d\u3001\u5220\u9664\u7b49<br \/>\n5\u3001\u547d\u4ee4\u884c\u5c55\u5f00\uff1a\u5982\uff1atouch {a,b}.txt = touch a.txt b.txt<br \/>\n6\u3001\u6587\u4ef6\u540d\u901a\u914d<br \/>\n7\u3001\u53d8\u91cf<br \/>\n8\u3001\u7f16\u7a0b: \u6700\u91cd\u8981\u7684\u4e00\u70b9, \u7f16\u5199\u7684\u7a0b\u5e8f\u5c31\u662f\u811a\u672c.<\/p>\n<p>\u547d\u4ee4\u884c\u7f16\u8f91\uff1a\u7528\u5feb\u6377\u952e\u5b9e\u73b0\u5feb\u901f\u7f16\u8f91\u547d\u4ee4\u884c<br \/>\n\u5149\u6807\u8df3\u8f6c\uff1a<br \/>\nCtrl+a\uff1a\u8df3\u5230\u547d\u4ee4\u884c\u9996<br \/>\nCtrl+e\uff1a\u8df3\u5230\u547d\u4ee4\u884c\u5c3e<br \/>\nCtrl+u: \u5220\u9664\u5149\u6807\u81f3\u547d\u4ee4\u884c\u9996\u7684\u5185\u5bb9<br \/>\nCtrl+k: \u5220\u9664\u5149\u6807\u81f3\u547d\u4ee4\u884c\u5c3e\u7684\u5185\u5bb9<br \/>\nCtrl+l: \u6e05\u5c4f\uff0c\u7b49\u4e8eclear\u547d\u4ee4<br \/>\nCtrl+ \u2190 \u2192\uff1a\u8df3\u52a8\u4e00\u4e2a\u5355\u8bcd<\/p>\n<p>\u547d\u4ee4\u5386\u53f2\uff1aLinux\u7684\u547d\u4ee4\uff0c\u53ef\u4ee5\u7528\u4e0a\u4e0b\u7bad\u5934\u6765\u67e5\u770b\u4ee5\u524d\u952e\u5165\u7684\u547d\u4ee4\u3002<br \/>\n\u67e5\u770b\u547d\u4ee4\u5386\u53f2\uff1ahistory<br \/>\n-c\uff1a\u6e05\u7a7a\u5185\u5b58\u4e2d\u7684\u547d\u4ee4\u5386\u53f2, clear; \u867d\u7136\u6e05\u7a7a\u4e86\u547d\u4ee4\u5386\u53f2, \u4f46\u662f~\/.bash_history\u4e2d\u4ecd\u7136\u5b58\u653e\u7740\u547d\u4ee4\u64cd\u4f5c\u7684\u5386\u53f2\u5185\u5bb9.<br \/>\n-d OFFSET: \u5220\u9664\u6307\u5b9a\u4f4d\u7f6e\u7684\u547d\u4ee4\uff0c\u5076\u5c14\u7528\u5230. \u5982\u679c\u5220\u9664\u591a\u4e2a\uff0c\u53ef\u4ee5\u5728OFFSET\u540e\u9762\u589e\u52a0\u4e00\u4e2a\u6570\u5b57\uff0c\u8868\u793a\u5220\u9664\u7684\u4e2a\u6570\u3002<br \/>\nhistory -d 500 3: \u5220\u9664\u7b2c500\u5f00\u59cb\u76843\u4e2a\u547d\u4ee4\u5386\u53f2<br \/>\n-w\uff1a\u624b\u52a8\u4fdd\u5b58\u547d\u4ee4\u5386\u53f2\u7f13\u5b58\u4e2d\u4fe1\u606f\u81f3\u5386\u53f2\u6587\u4ef6\u4e2d~\/.bash_history; \u901a\u5e38, \u53ea\u6709\u6b63\u5e38\u9000\u51fa\u7684\u65f6\u5019, \u547d\u4ee4\u5386\u53f2\u4f1a\u8ffd\u52a0\u5230\u547d\u4ee4\u5386\u53f2\u6587\u4ef6\u4e2d.<br \/>\n\u547d\u4ee4\u6587\u4ef6:~\/.bash_history\u4e2d.<\/p>\n<p>\u547d\u4ee4\u5386\u53f2\u7684\u4f7f\u7528\u6280\u5de7\uff1a<br \/>\n!n\uff1a\u6267\u884c\u547d\u4ee4\u5386\u53f2\u4e2d\u7684\u7b2cn\u6761\u547d\u4ee4\uff1b<br \/>\n!-n:\u6267\u884c\u547d\u4ee4\u5386\u53f2\u4e2d\u7684\u5012\u6570\u7b2cn\u6761\u547d\u4ee4\uff1b<br \/>\n!!: \u6267\u884c\u4e0a\u4e00\u6761\u547d\u4ee4\uff1b<br \/>\n!string\uff1a\u6267\u884c\u547d\u4ee4\u5386\u53f2\u4e2d\u6700\u8fd1\u4e00\u4e2a\u4ee5\u6307\u5b9a\u5b57\u7b26\u4e32\u5f00\u5934\u7684\u547d\u4ee4<br \/>\n!$:\u5f15\u7528\u524d\u4e00\u4e2a\u547d\u4ee4\u7684\u6700\u540e\u4e00\u4e2a\u53c2\u6570;<br \/>\nEsc &#8211;&gt; .: \u6309\u4e00\u4e0bEsc, \u518d\u6309\u4e00\u4e0b&#8221;.&#8221;, \u53ef\u4ee5\u5f15\u7528\u524d\u4e00\u4e2a\u547d\u4ee4\u7684\u6700\u540e\u4e00\u4e2a\u53c2\u6570, \u76f8\u5f53\u4e8e!$\u7684\u7528\u6cd5. \u53ef\u4ee5\u4e00\u76f4\u952e\u5165\uff0c\u7ffb\u770b\u547d\u4ee4\u5386\u53f2\u4e2d\u6700\u540e\u4e00\u4e2a\u53c2\u6570\u3002<br \/>\nAlt+.: \u6309\u4f4fAlt, \u518d\u6309\u4e00\u4e0b&#8221;.&#8221;, \u4e5f\u53ef\u4ee5\u5b9e\u73b0\u8fd9\u4e2a\u529f\u80fd; \u4f46\u662f, \u8fd9\u4e2a\u7528\u6cd5\u53ea\u80fd\u5728\u865a\u62df\u7ec8\u7aef\u4e0a\u4f7f\u7528, \u8fdc\u7a0b\u6a21\u62df\u7ec8\u7aef\u65e0\u6cd5\u5b9e\u73b0.<\/p>\n<p>\u73af\u5883\u53d8\u91cf<br \/>\nPATH\uff1a\u547d\u4ee4\u641c\u7d22\u8def\u5f84<br \/>\nHISTSIZE: \u547d\u4ee4\u5386\u53f2\u7f13\u51b2\u533a\u5927\u5c0f, \u9ed8\u8ba4\u662f100, echo $HISTSIZE\u67e5\u770b.<br \/>\nHISTFILESIZE: \u547d\u4ee4\u6587\u4ef6\u7684\u7f13\u51b2\u6761\u76ee\u5927\u5c0f<br \/>\n# echo $PATH<br \/>\n\/usr\/local\/sbin:\/usr\/local\/bin:\/sbin:\/bin:\/usr\/sbin:\/usr\/bin:\/usr\/local\/apache2\/bin:\/root\/bin<\/p>\n<p>\u547d\u4ee4\u8865\u5168\uff1a\u641c\u7d22PATH\u73af\u5883\u53d8\u91cf\u6240\u6307\u5b9a\u7684\u6bcf\u4e2a\u8def\u5f84\u4e0b\u4ee5\u6211\u4eec\u7ed9\u51fa\u7684\u5b57\u7b26\u4e32\u5f00\u5934\u7684\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u5982\u679c\u591a\u4e8e\u4e00\u4e2a\uff0c\u4e24\u6b21tab\uff0c\u53ef\u4ee5\u7ed9\u51fa\u5217\u8868\uff1b\u5426\u5219\u5c06\u76f4\u63a5\u8865\u5168<br \/>\n\u65b9\u6cd5: \u8f93\u5165\u547d\u4ee4\u7684\u5f00\u5934\u5b57\u7b26, \u6309Tab\u952e. \u5982\u679c\u5b57\u7b26\u7684\u5f00\u5934\u53ea\u6709\u4e00\u4e2a\u547d\u4ee4, \u76f4\u63a5\u8865\u5168, \u5e76\u9644\u4e0a\u7a7a\u683c\u952e; \u5982\u679c\u6709\u591a\u4e2a\u547d\u4ee4\u4ee5\u7ed9\u5b9a\u7684\u5b57\u7b26\u5f00\u5934, \u6309\u4e24\u4e0bTab\u952e, \u663e\u793a\u6240\u6709\u4ee5\u7ed9\u5b9a\u5b57\u7b26\u5f00\u5934\u7684\u547d\u4ee4.<br \/>\n\u8def\u5f84\u8865\u5168\uff1a\u65b9\u6cd5\u548c\u4e0a\u9762\u4e00\u6837, \u4f46\u662f\u673a\u5236\u4e0d\u540c. \u547d\u4ee4\u67e5\u627e\u5728PATH\u4e2d\u67e5\u627e; \u8def\u5f84\u8865\u5168\u5728\u6253\u5934\u8def\u5f84\u4e0b\u67e5\u627e. \u641c\u7d22\u6211\u4eec\u7ed9\u51fa\u7684\u8d77\u59cb\u8def\u5f84\u4e0b\u7684\u6bcf\u4e2a\u6587\u4ef6\u540d\uff0c\u5e76\u8bd5\u56fe\u8865\u5168\uff1b<\/p>\n<p>\u547d\u4ee4\u522b\u540d:<br \/>\nalias CMDALIAS=&#8217;COMMAND [options] [arguments]&#8217;<br \/>\n\u5728shell\u4e2d\u5b9a\u4e49\u7684\u522b\u540d\u4ec5\u5728\u5f53\u524dshell\u751f\u547d\u5468\u671f\u4e2d\u6709\u6548\uff1b\u522b\u540d\u7684\u6709\u6548\u8303\u56f4\u4ec5\u4e3a\u5f53\u524dshell\u8fdb\u7a0b\uff1b<br \/>\n\u5982\u679c\u8981\u6c38\u4e45\u6709\u6548, \u9700\u8981\u4fee\u6539\u914d\u7f6e\u6587\u4ef6, \u751a\u81f3\u53ef\u4ee5\u5b9e\u73b0\u5168\u5c40\u6709\u6548, \u6240\u6709\u7528\u6237\u90fd\u53ef\u4ee5\u7528\u5230.<\/p>\n<p>\u522b\u540d\u7684\u5220\u9664\/\u64a4\u9500:<br \/>\nualias CMDALIAS: \u4e0d\u8981\u8f93\u5165\u522b\u540d\u6307\u5b9a\u7684\u5185\u5bb9\u3002<\/p>\n<p>\u5e38\u7528alias:<br \/>\nalias cdnet=&#8217;cd \/etc\/sysconfig\/network-scripts&#8217;<br \/>\nalias lftps=&#8217;lftp 172.16.0.1\/pub&#8217;<\/p>\n<p>\u5f88\u591a\u60c5\u51b5, \u547d\u4ee4\u522b\u540d\u548c\u547d\u4ee4\u672c\u8eab\u4e00\u6837, \u5982:<br \/>\nalias ls=&#8217;ls &#8211;color=tty&#8217;<br \/>\n\u8fd9\u65f6\u5019, \u5982\u679c\u8981\u5f15\u7528\u547d\u4ee4\u672c\u8eab\u7684\u4f5c\u7528, \u9700\u8981\u52a0\u53cd\u659c\u7ebf.<br \/>\n\\CMDALIAS<\/p>\n<p>\u547d\u4ee4\u66ff\u6362: \u628a\u547d\u4ee4\u4e2d\u67d0\u4e2a\u5b50\u547d\u4ee4\u66ff\u6362\u4e3a\u5176\u6267\u884c\u7ed3\u679c\u7684\u8fc7\u7a0b<br \/>\n\u4e24\u79cd\u65b9\u6cd5\uff1a<br \/>\n$(COMMAND)\uff1a<br \/>\n# a=$(date); echo $a<br \/>\n2017\u5e74 07\u6708 13\u65e5 \u661f\u671f\u56db 16:03:06 CST<\/p>\n<p>\u53cd\u5f15\u53f7\uff1a`COMMAND`<br \/>\n# a=`echo hello`; echo $a<br \/>\nhello<\/p>\n<p>Example:<br \/>\n# echo &#8220;The current directory is $(pwd).&#8221;<br \/>\n# touch file-$(date +%F-%H-%M-%S)<br \/>\nfile-2013-02-28-14-53-31.txt<\/p>\n<p>$()\u7684\u4f5c\u7528\u5c31\u662f\u5b9e\u73b0\u547d\u4ee4\u66ff\u6362, \u53ef\u4ee5\u7528\u53cd\u5f15\u53f7&#8220;\u6765\u5f15\u7528, \u5373:<br \/>\n# touch file-`date +%F-%H-%M-%S`<\/p>\n<p>bash\u652f\u6301\u7684\u5f15\u53f7\uff1a<br \/>\n&#8220;: \u547d\u4ee4\u66ff\u6362, \u7b49\u4e8e$()<br \/>\n&#8220;&#8221;: \u5f31\u5f15\u7528\uff0c\u53ef\u4ee5\u5b9e\u73b0\u53d8\u91cf\u66ff\u6362<br \/>\n&#8221;: \u5f3a\u5f15\u7528\uff0c\u4e0d\u5b8c\u6210\u53d8\u91cf\u66ff\u6362<\/p>\n<p>\u6587\u4ef6\u540d\u901a\u914d, globbing<br \/>\n*: \u5339\u914d\u4efb\u610f\u957f\u5ea6\u7684\u4efb\u610f\u5b57\u7b26<br \/>\n?\uff1a\u5339\u914d\u4efb\u610f\u5355\u4e2a\u5b57\u7b26<br \/>\n[]\uff1a\u5339\u914d\u6307\u5b9a\u8303\u56f4\u5185\u7684\u4efb\u610f\u5355\u4e2a\u5b57\u7b26<br \/>\n[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]<br \/>\n[:space:]\uff1a\u7a7a\u767d\u5b57\u7b26\uff0c\u4e0d\u6b62\u7a7a\u683c<br \/>\n[:punct:]\uff1a\u6807\u70b9\u7b26\u53f7<br \/>\n[:lower:]\uff1a\u5c0f\u5199\u5b57\u6bcd<br \/>\n[:upper:]: \u5927\u5199\u5b57\u6bcd<br \/>\n[:alpha:]: \u5927\u5c0f\u5199\u5b57\u6bcd<br \/>\n[:digit:]: \u6570\u5b57<br \/>\n[:alnum:]: \u6570\u5b57\u548c\u5927\u5c0f\u5199\u5b57\u6bcd<br \/>\n\u6ce8\u610f, \u5982\u4e0a\u7684\u90e8\u5206\u8868\u793a\u7684\u662f\u4e00\u4e2a\u8303\u56f4, \u800c\u5982\u679c\u548c[]\u8054\u5408\u4f7f\u7528, \u4ee5\u5339\u914d\u5355\u4e2a\u5b57\u7b26\u7684\u8bdd, \u9700\u8981\u5728\u5916\u9762\u518d\u5305\u4e00\u5c42[]:<br \/>\n[[:space:]] &#8230; &#8230;<\/p>\n<p># man 7 glob \/\/man\u547d\u4ee4\u83b7\u53d6\u6807\u70b9\u7b26\u53f7\u7684\u5e2e\u52a9, \u53ef\u4ee5\u83b7\u5f97\u8fd9\u4e9b\u5217\u8868.<br \/>\n[[^]]: \u5185\u90e8\u7684^\u7b26\u53f7, \u8868\u793a\u53d6\u53cd\u7684\u610f\u601d. \u5339\u914d\u6307\u5b9a\u8303\u56f4\u4e4b\u5916\u7684\u4efb\u610f\u5355\u4e2a\u5b57\u7b26<br \/>\n&#8216;^[[:digit:]]&#8217;: \u6b63\u5219\u8868\u8fbe\u5f0f\u4e2d\u4e5f\u6709^, \u901a\u5e38\u5728[]\u5916\u9762\u5f15\u53f7\u91cc\u9762, \u8868\u793a\u4ee5[]\u7684\u5b57\u7b26\u5f00\u5934.<\/p>\n<p>Example:<br \/>\n# touch a bd 12dkj dj54 sd9 dk21 aa 232 ddj<br \/>\n# ls<br \/>\n12dkj 232 a aa bd ddj dj54 dk21 sd9<\/p>\n<p># ls [a-zA-Z]*[0-9] \/\/<br \/>\ndj54 dk21 sd9<\/p>\n<p># ls [^0-9]* \/\/\u5339\u914d\u975e\u6570\u5b57\u5f00\u5934\u7684\u9879.<br \/>\na aa bd ddj dj54 dk21 sd9<\/p>\n<p># touch &#8216;a b&#8217; \/\/\u7a7a\u683c\u4e5f\u662f\u53ef\u4ee5\u4f5c\u4e3a\u6587\u4ef6\u540d\u7684.<br \/>\n# ls a\\ b<br \/>\na b<\/p>\n<p># ls *[[:space:]]* \/\/\u7528\u7a7a\u767d\u5b57\u7b26\u7684\u6807\u51c6\u5199\u6cd5\u6765\u5339\u914d<br \/>\na b<br \/>\n# ls *\\ * \/\/ \u548c\u7528\u53cd\u5f15\u53f7\u7684\u6548\u679c\u76f8\u540c<br \/>\na b<\/p>\n<p>\u7ec3\u4e60\uff1a<br \/>\n1\u3001\u521b\u5efaa123, cd6, c78m, c1 my, m.z, k 67, 8yu, 789\u7b49\u6587\u4ef6\uff1b\u6ce8\u610f\uff0c\u4ee5\u4e0a\u6587\u4ef6\u662f\u4ee5\u9017\u53f7\u9694\u5f00\u7684\uff0c\u5176\u5b83\u7b26\u53f7\u90fd\u662f\u6587\u4ef6\u540d\u7684\u7ec4\u6210\u90e8\u5206\uff1b<br \/>\n# touch a123 cd6 c78m c1 my m.z k\\ 67 8yu 789 \/\/\u6ce8\u610f, \u7a7a\u683c\u53ef\u4ee5\u4f5c\u4e3a\u6587\u4ef6\u540d\u7684\u7ec4\u6210\u90e8\u5206, \u4f46\u662f\u5728\u547d\u4ee4\u884c\u4e2d\u8981\u7528\\\u6765\u8131\u4e49\u624d\u80fd\u6267\u884c\u6210\u529f, \u5426\u5219\u7a7a\u683c\u88ab\u8ba4\u4e3a\u662f\u5206\u5272\u7b26.<\/p>\n<p>2\u3001\u663e\u793a\u6240\u6709\u4ee5a\u6216m\u5f00\u5934\u7684\u6587\u4ef6\uff1b<br \/>\nls [am]*<\/p>\n<p>3\u3001\u663e\u793a\u6240\u6709\u6587\u4ef6\u540d\u4e2d\u5305\u542b\u4e86\u6570\u5b57\u7684\u6587\u4ef6\uff1b<br \/>\nls *[0-9]*<br \/>\nls *[[:digit:]]*<\/p>\n<p>4\u3001\u663e\u793a\u6240\u6709\u4ee5\u6570\u5b57\u7ed3\u5c3e\u4e14\u6587\u4ef6\u540d\u4e2d\u4e0d\u5305\u542b\u7a7a\u767d\u7684\u6587\u4ef6\uff1b<br \/>\nls *[^[:space:]]*[0-9] ????????? \u8fd9\u4e2a\u7ed3\u679c\u5230\u5e95\u80fd\u4e0d\u80fd\u5b8c\u5168\u8868\u793a\u5982\u4e0a\u7684\u7ed3\u679c? \u6b63\u5219\u8868\u8fbe\u5f0f\u80fd\u591f\u5b8c\u5168\u8868\u8fbe\u4e0a\u9762\u7684\u8981\u6c42.<\/p>\n<p>5\u3001\u663e\u793a\u6587\u4ef6\u540d\u4e2d\u5305\u542b\u4e86\u975e\u5b57\u6bcd\u6216\u6570\u5b57\u7684\u7279\u6b8a\u7b26\u53f7\u7684\u6587\u4ef6\uff1b<br \/>\nls *[^[:alnum:]]*<\/p>\n<p>6\u3001\u5339\u914d\u4ee5\u5927\u5c0f\u5199\u5b57\u6bcd\u5f00\u5934, \u4e2d\u95f4\u5939\u7740\u4e00\u4e2a\u7a7a\u683c, \u4ee5\u975e\u5927\u5c0f\u5199\u5b57\u6bcd\u7ed3\u5c3e\u7684\u4efb\u610f\u5b57\u6bb5.<br \/>\n[[:alpha:]]*[[:space:]]*[^[:alpha:]]:<\/p>\n<p>shell\u7f16\u7a0b\uff1a\u662f\u4e00\u79cd\u811a\u672c\u7f16\u7a0b, \u8fb9\u89e3\u91ca\u8fb9\u6267\u884c.<\/p>\n<p>\u7f16\u7a0b\u8bed\u8a00\uff1a\u673a\u5668\u8bed\u8a00 &#8211;&gt; \u6c47\u7f16\u8bed\u8a00 &#8211;&gt; \u9ad8\u7ea7\u8bed\u8a00<\/p>\n<p>\u7f16\u7a0b\u8bed\u8a00\u7684\u5206\u7c7b:<br \/>\n1. \u9759\u6001\u8bed\u8a00\uff1a\u7f16\u8bd1\u578b\u8bed\u8a00<br \/>\n\u901a\u5e38\u662f\u5f3a\u7c7b\u578b(\u53d8\u91cf)<br \/>\n\u4e8b\u5148\u8f6c\u6362\u6210\u53ef\u6267\u884c\u683c\u5f0f, \u5b8c\u5168\u8f6c\u6362<br \/>\nC\u3001C++\u3001JAVA\u3001C#<\/p>\n<p>2. \u52a8\u6001\u8bed\u8a00\uff1a\u89e3\u91ca\u578b\u8bed\u8a00\uff0c on the fly, \u8fb9\u89e3\u91ca, \u8fb9\u6267\u884c.<br \/>\n\u901a\u5e38\u662f\u5f31\u7c7b\u578b: \u901a\u5e38\u662f\u5f31\u7c7b\u578b\u7684\u8bed\u8a00.<br \/>\n\u8fb9\u89e3\u91ca\u8fb9\u6267\u884c, \u4e0d\u9700\u8981\u4e8b\u5148\u8f6c\u6362. \u89e3\u91ca\u5668\u901a\u5e38\u90fd\u662fC\u5f00\u53d1\u7684\u3002<br \/>\nPHP\u3001SHELL\u3001python\uff08\u73b0\u5728\u6bd4\u8f83\u6d41\u884c\uff09\u3001perl\uff08\u65e9\u5148\u6d41\u884c\uff09<\/p>\n<p>\u7f16\u8bd1\u5668\uff1a\u9759\u6001\u8bed\u8a00\u7528\u5230\u7684<br \/>\n\u89e3\u91ca\u5668\uff1a\u52a8\u6001\u8bed\u8a00\u7528\u5230\u7684\uff0c\u89e3\u91ca\u5668\u662f\u7531\u9759\u6001\u8bed\u8a00\u7f16\u5199.<\/p>\n<p>\u7f16\u7a0b\u8bed\u8a00\u8fd8\u53ef\u4ee5\u9075\u5faa\u5982\u4e0b\u7684\u5206\u7c7b\u65b9\u6cd5\uff1a<br \/>\n\u9762\u5411\u8fc7\u7a0b\uff1aShell, C, \u628a\u6574\u4e2a\u7f16\u7a0b\u7684\u7740\u773c\u70b9\u653e\u5728\u95ee\u9898\u89e3\u51b3\u8fc7\u7a0b\u672c\u8eab. \u9002\u5408\u5f00\u53d1\u5c0f\u578b\u7684\u5e94\u7528\u7a0b\u5e8f. \u4f46Linux\u5185\u6838\u662f\u7528\u9762\u5411\u8fc7\u7a0b\u7684C\u7814\u53d1\u7684.<br \/>\n\u9762\u5411\u5bf9\u8c61: \u628a\u6574\u4e2a\u8981\u5b9e\u73b0\u7684\u9879\u76ee, \u62bd\u8c61\u6210\u4e00\u4e2a\u4e00\u4e2a\u7684\u5bf9\u8c61, \u5e76\u4e14\u5b9a\u4e49\u5bf9\u8c61\u4e4b\u95f4\u7684\u52a8\u4f5c, \u9002\u5408\u5f00\u53d1\u5927\u578b\u7684\u5e94\u7528\u7a0b\u5e8f. JAVA, Python, perl, C++, \u4e00\u822c\u9002\u5408\u5f00\u53d1\u5927\u578b\u7684\u5e94\u7528\u7a0b\u5e8f. Python\u548cJAVA\u662f\u5b8c\u5168\u9762\u5411\u5bf9\u8c61\u7684, \u540e\u9762\u4e24\u4e2a\u4e5f\u6709\u90e8\u5206\u9762\u5411\u8fc7\u7a0b. C++\u6709\u8bb8\u591a\u7684\u4f18\u52bf, \u4e5f\u4f1a\u4ea7\u751f\u8bb8\u591a\u96be\u4ee5\u6392\u89e3\u7684bug.<\/p>\n<p>\u53d8\u91cf\uff1a\u547d\u540d\u7684\u5185\u5b58\u7a7a\u95f4.<br \/>\n\u5185\u5b58\uff1a\u7f16\u5740\u7684\u5b58\u50a8\u5355\u5143, 16\u8fdb\u5236.<\/p>\n<p>\u8fdb\u7a0b\uff1a\u6267\u884c\u7684\u7a0b\u5e8f\uff0c\u7a0b\u5e8f\u7684\u5b9e\u4f8b.<br \/>\n\u8fd0\u7b97\u7684\u65f6\u5019, \u5185\u5b58\u7684\u5206\u914d\u5e76\u4e0d\u662f\u5c06\u6bcf\u4e2a\u53d8\u91cf\u90fd\u7ed9\u4e88\u4e00\u6bb5\u5185\u5b58, \u4e00\u6bb5\u5185\u5b58\u53ef\u4ee5\u590d\u7528, \u5373\u8fc7\u671f\u7684\u503c\u81ea\u52a8\u4f5c\u5e9f, \u6362\u65b0\u7684\u503c.<\/p>\n<p>\u53d8\u91cf\u7c7b\u578b\uff1a\u7528\u6765\u4e8b\u5148\u786e\u5b9a\u6570\u636e\u7684\u5b58\u50a8\u683c\u5f0f\u548c\u957f\u5ea6<br \/>\n\u5b57\u7b26: \u4e00\u4e2a\u5b57\u7b26\u4e3a8bit<br \/>\n\u6570\u503c: \u8f83\u5b57\u7b26\u6765\u8bf4\u8981\u8282\u7701\u7a7a\u95f4<br \/>\n\u6574\u578b: \u6574\u6570<br \/>\n\u6d6e\u70b9\u578b: 11.23\uff0c1.123*10^1, 0.1123*10^2<br \/>\n\u65e5\u671f\u7c7b\u578b\uff1a2013\/10\/10, 64bit<br \/>\n\u5982\u679c\u662f\u6570\u503c, \u5c061970\u5e741\u67081\u65e5\u5230\u73b0\u5728; \u5b57\u7b26\u4e32\u5c31\u8981\u6d6a\u8d39\u5f88\u591a\u5b58\u50a8\u7a7a\u95f4. \u5b58\u50a8\u7684\u683c\u5f0f\u662f\u4e0d\u4e00\u6837\u7684.<br \/>\n\u5e03\u5c14\u578b\uff1a\u771f\u3001\u5047<\/p>\n<p>\u6574\u578b\uff0c8bit: \u5982\u679c\u8981\u5b58\u50a8256\u5462?<br \/>\n8bit\u53ea\u80fd\u5b58\u50a8\u7684\u6570\u503c\u6362\u7b97\u6210\u5341\u8fdb\u5236\u4e3a: 0-255\uff0c \u5b58\u50a8256\u65f6\u5019, \u7531\u4e8e\u8d85\u51fa\u8303\u56f4\u800c\u6ea2\u51fa, \u4ec5\u4fdd\u7559\u540e\u516b\u4f4d, \u7ed3\u679c\u662f0.<br \/>\n\u6ea2\u51fa\u5982\u679c\u662f\u7cbe\u5fc3\u8bbe\u8ba1\u7684, \u53ef\u4ee5\u5c06\u5176\u4f59\u8fdb\u7a0b\u8986\u76d6\u6389, \u8fd9\u662f\u7f13\u51b2\u533a\u6ea2\u51fa\u7684\u673a\u5236; \u5982\u679c\u8986\u76d6\u7684\u662f\u7ba1\u7406\u76f8\u5173\u7684\u8fdb\u7a0b, \u5219\u53ef\u4ee5\u83b7\u53d6\u7cfb\u7edf\u6743\u9650, \u8fbe\u5230\u5165\u4fb5\u8ba1\u7b97\u673a\u7684\u76ee\u7684.<\/p>\n<p>\u903b\u8f91\u8fd0\u7b97\uff1a\u4e0e\u3001\u6216\u3001\u975e\u3001\u5f02\u6216<br \/>\n\u4e0e\uff1a\u4e24\u4e2a\u90e8\u5206\u90fd\u4e3a\u771f\uff0c\u6574\u4f53\u7ed3\u679c\u624d\u4e3a\u771f<br \/>\n\u6216\uff1a\u4e24\u4e2a\u90e8\u5206\u6709\u4e00\u4e2a\u4e3a\u771f\uff0c\u6574\u4f53\u7ed3\u679c\u5c31\u4e3a\u771f<br \/>\n\u975e\uff1a! \u771f = \u5047; ! \u5047 = \u771f<br \/>\n\u5f02\u6216\u8fd0\u7b97: \u76f8\u540c\u4e3a\u771f, \u4e0d\u540c\u4e3a\u5047\uff08\u64cd\u4f5c\u6570\u76f8\u540c\u5f971\uff0c\u4e0d\u76f8\u540c\u5f970\uff1a\u59821\u548c0\u5f970\uff0c0\u548c0\u5f971\uff09<\/p>\n<p>\u77ed\u8def\u903b\u8f91\u8fd0\u7b97: \u77e5\u9053\u4e00\u90e8\u5206\u6761\u4ef6\u6ee1\u8db3, \u5373\u53ef\u786e\u5b9a\u6700\u7ec8\u7ed3\u679c.<br \/>\n1. \u5bf9\u4e0e\u8fd0\u7b97, \u4e00\u4e2a\u4e3a\u5047, \u7ed3\u679c\u4e00\u5b9a\u4e3a\u5047;<br \/>\n2. \u5bf9\u6216\u8fd0\u7b97, \u4e00\u4e2a\u4e3a\u771f, \u7ed3\u679c\u4e00\u5b9a\u4e3a\u771f.<\/p>\n<p>shell: \u5f31\u7c7b\u578b\u7f16\u7a0b\u8bed\u8a00<br \/>\n\u5f3a\uff1a\u53d8\u91cf\u5728\u4f7f\u7528\u524d\uff0c\u5fc5\u987b\u4e8b\u5148\u58f0\u660e\uff0c\u751a\u81f3\u6709\u65f6\u5019\u8fd8\u9700\u8981\u521d\u59cb\u5316\uff08\u7ed9\u4e00\u4e2a\u539f\u59cb\u503c\uff0c\u5426\u5219\u662f\u4e00\u4e2a\u968f\u673a\u6570\uff1b\u4e00\u822c\u6570\u5b57\u521d\u59cb\u5316\u4e3a0\uff0c\u5b57\u7b26\u4e32\u521d\u59cb\u5316\u4e3a\u7a7aNULL\uff09\uff1b<br \/>\n\u5f31\uff1a\u53d8\u91cf\u7528\u65f6\u58f0\u660e\uff0c\u751a\u81f3\u4e0d\u533a\u5206\u7c7b\u578b\uff1b<\/p>\n<p>\u53d8\u91cf\u8d4b\u503c\uff1aVAR_NAME=VALUE<br \/>\n\u8d4b\u503c\u65b9\u5f0f\u8fd8\u6709\u5176\u4ed6\u673a\u5236.<\/p>\n<p>\u53d8\u91cf\u8f6c\u6362:<br \/>\n\u663e\u5f0f\u8f6c\u6362: \u4e8b\u5148\u58f0\u660e\u8f6c\u6362\u7684\u7c7b\u578b<br \/>\n\u9690\u5f0f\u8f6c\u6362: \u5185\u90e8\u673a\u5236\u81ea\u52a8\u5b8c\u6210\u8f6c\u6362\uff0c\u59821+a\uff0c\u6709\u7684\u7a0b\u5e8f\u81ea\u52a8\u5c06a\u8f6c\u6362\u6210ACSII\u7801\u7684id\u6765\u8fdb\u884c\u76f8\u52a0\u3002<br \/>\n\u7f16\u8bd1\u5f0f\u8bed\u8a00\u5728\u7f16\u8bd1\u7684\u65f6\u5019\u5c31\u5df2\u7ecf\u8f6c\u6362\u5b8c\u6210; \u811a\u672c\u8bed\u8a00\u5728\u6267\u884c\u7684\u65f6\u5019, \u9700\u8981\u8f6c\u6362\u65f6\u5019\u5b8c\u6210\u8f6c\u6362.<\/p>\n<p>\u53d8\u91cf\u7684\u5f15\u7528:<br \/>\n${}\u6765\u5f15\u7528: \u591a\u6570\u60c5\u51b5{}\u53ef\u4ee5\u7701\u7565, \u4f46\u662f\u4e0b\u9762\u7684\u8fd9\u79cd\u60c5\u51b5\u4e0d\u80fd\u7701\u7565.<br \/>\n# ANIMAL=pig<br \/>\n# echo &#8220;There are 4 $ANIMALs.&#8221; \/\/\u9ed8\u8ba4\u4f1a\u5c06$\u540e\u9762\u7684\u6240\u6709\u5185\u5bb9\u5f53\u505a\u53d8\u91cf\u7684\u540d\u79f0, \u800c$ANIMALs\u6ca1\u6709\u5b9a\u4e49, \u56e0\u6b64\u663e\u793a\u4e3a\u7a7a.<br \/>\nThere are 4 .<br \/>\n# echo &#8220;There are 4 ${ANIMAL}s.&#8221;<br \/>\nThere are 4 pigs.<\/p>\n<p>bash\u53d8\u91cf\u7c7b\u578b(\u4f5c\u7528\u8303\u56f4\u548c\u53d8\u91cf\u7684\u8868\u793a\u578b\u6765\u5206)\uff1a\u9ed8\u8ba4\u7684shell\u53d8\u91cf\u7684\u503c\u90fd\u662f\u5b57\u7b26\u4e32<br \/>\n\u73af\u5883\u53d8\u91cf: \u5982PATH\u53d8\u91cf\u7b49\uff0c\u90fd\u662f\u73af\u5883\u4e2d\u7684\u4e00\u4e9b\u914d\u7f6e\u53d8\u91cf<br \/>\n\u672c\u5730\u53d8\u91cf(\u5c40\u90e8\u53d8\u91cf): \u5c40\u90e8\u53d8\u91cf\u672a\u5fc5\u662f\u672c\u5730\u53d8\u91cf<br \/>\n\u4f4d\u7f6e\u53d8\u91cf: \u7c7b\u4f3c\u540e\u5411\u5f15\u7528<br \/>\n\u7279\u6b8a\u53d8\u91cf: \u4fdd\u5b58\u67d0\u4e9b\u7279\u6b8a\u6570\u636e\u7684\u53d8\u91cf, \u4e5f\u6210\u7cfb\u7edf\u53d8\u91cf.<br \/>\n\u7279\u6b8a\u53d8\u91cf\uff1a<br \/>\n$?: \u6267\u884c\u72b6\u6001\u8fd4\u56de\u7801<br \/>\n$#\uff1a\u53c2\u6570\u7684\u4e2a\u6570<br \/>\n$*: \u53c2\u6570\u5217\u8868, \u5217\u51fa\u53c2\u6570<br \/>\n$@\uff1a\u53c2\u6570\u5217\u8868, \u548c$*\u6709\u4e0d\u540c,<br \/>\n\u53d8\u91cf\u4e00\u5b9a\u662f\u8fdb\u7a0b\u7684\u53d8\u91cf\uff01<\/p>\n<p>\u4f4d\u7f6e\u53d8\u91cf\u7684\u5e94\u7528: $1, $2, &#8230;<br \/>\nshift: \u5f15\u7528\u4e00\u4e2a\u53c2\u6570\u4ee5\u540e\u5c31\u8e22\u51fa\u53bb. \u5982, \u5c31\u4e00\u4e2a$1, \u53c2\u6570\u5374\u662f\u5f88\u591a\u4e2a. shift\u4ee5\u540e, \u7b2c\u4e00\u4e2a\u81ea\u52a8\u5254\u9664, \u7b2c\u4e8c\u4e2a\u4ee3\u66ff\u7b2c\u4e00\u4e2a.<br \/>\nshift\u53ef\u4ee5\u7528\u540e\u9762\u52a0\u6570\u5b57n\u7684\u65b9\u5f0f, \u6765\u6307\u5b9a\u8f6e\u66ff\u7684\u4e2a\u6570.<\/p>\n<p>\u5404\u53d8\u91cf\u89e3\u6790\uff1a<br \/>\n1\u3001\u672c\u5730\u53d8\u91cf\uff1a<br \/>\nset VARNAME=VALUE: \u4f5c\u7528\u57df\u4e3a\u6574\u4e2abash\u8fdb\u7a0b\uff0c\u5bf9\u5b50shell\u65e0\u6548\uff0c\u4e0d\u7528set\u9ed8\u8ba4\u5c31\u662f\u672c\u5730\u53d8\u91cf\u3002<br \/>\n2\u3001\u5c40\u90e8\u53d8\u91cf\uff1a<br \/>\nlocal VARNAME=VALUE\uff1a\u4f5c\u7528\u57df\u4e3a\u5f53\u524d\u4ee3\u7801\u6bb5\uff0c\u4ec5\u5728\u51fd\u6570\u4e2d\u4f7f\u7528\uff0c\u51fd\u6570\u5916\u5931\u6548\uff1b<br \/>\n3\u3001\u73af\u5883\u53d8\u91cf\uff1a\u4f5c\u7528\u57df\u4e3a\u5f53\u524dshell\u8fdb\u7a0b\u53ca\u5176\u5b50\u8fdb\u7a0b\uff1b<br \/>\nexport VARNAME=VALUE<\/p>\n<p>\u811a\u672c\u5728\u6267\u884c\u65f6\u4f1a\u542f\u52a8\u4e00\u4e2a\u5b50shell\u8fdb\u7a0b\uff0c\u6240\u4ee5\u73af\u5883\u53d8\u91cf\u662f\u6709\u6548\u7684\uff1b\u800cshell\u811a\u672c\u4e2d\u5b9a\u4e49\u7684\u53d8\u91cf\uff0c\u5728\u7ed3\u675f\u811a\u672c\u4ee5\u540e\u5931\u6548\u7684\u539f\u56e0\u5c31\u662f\u56e0\u4e3a\u5b83\u662f\u4e00\u4e2a\u5b50shell\u8fdb\u7a0b\uff0c\u5bf9\u7236\u8fdb\u7a0b\u6ca1\u6709\u5f71\u54cd\u3002\u6240\u4ee5\u7cfb\u7edf\u81ea\u52a8\u6267\u884c\u7684\u811a\u672c(\u975e\u547d\u4ee4\u884c\u542f\u52a8\uff0c\u5982cron\u4efb\u52a1)\u5c31\u9700\u8981\u81ea\u5df1\u5b9a\u4e49\u9700\u8981\u5404\u73af\u5883\u53d8\u91cf\uff1b<br \/>\n\u547d\u4ee4\u884c\u4e2d\u542f\u52a8\u7684\u811a\u672c\u4f1a\u7ee7\u627f\u5f53\u524dshell\u73af\u5883\u53d8\u91cf(\u5c31\u662f\u4e00\u6bb5\u547d\u4ee4\uff0c\u5982\u679c\u662fbash test.sh\u8fd9\u79cd\uff0c\u4e4b\u524d\u5b9a\u4e49\u7684\u53d8\u91cf\u662f\u6ca1\u6709\u4f5c\u7528\u7684\uff0c\u9664\u975eexport\u4e00\u4e0b)\uff1b<\/p>\n<p>\u73af\u5883\u53d8\u91cf\u7684\u5b9a\u4e49\u65b9\u6cd5\uff1a<br \/>\n1\u3001\u65b9\u6cd5\u4e00<br \/>\nVARNAME=VALUE<br \/>\nexport VARNAME<br \/>\n\u201c\u5bfc\u51fa\u201d<\/p>\n<p># NAME=Jerry<br \/>\n# export NAME<br \/>\n# echo $NAME<br \/>\nJerry<br \/>\n# bash<br \/>\n# echo $NAME<br \/>\nJerry<br \/>\n2\u3001\u65b9\u6cd5\u4e8c<br \/>\nexport VARNAME=VALUE<\/p>\n<p>4\u3001\u4f4d\u7f6e\u53d8\u91cf\uff1a\u5f15\u7528\u811a\u672c\u7684\u53c2\u6570\u7684\u53d8\u91cf<br \/>\n$1, $2, &#8230;<\/p>\n<p>5\u3001\u7279\u6b8a\u53d8\u91cf\uff1a\u4fdd\u5b58\u7279\u6b8a\u6570\u636e\u7684\u53d8\u91cf<br \/>\n$?: \u4e0a\u4e00\u4e2a\u547d\u4ee4\u7684\u6267\u884c\u72b6\u6001\u8fd4\u56de\u503c\uff1b<\/p>\n<p>\u7a0b\u5e8f\u6267\u884c\uff0c\u53ef\u80fd\u6709\u4e24\u7c7b\u8fd4\u56de\u7ed3\u679c\uff1a<br \/>\n1. \u7a0b\u5e8f\u6267\u884c\u7ed3\u679c<br \/>\n2. \u7a0b\u5e8f\u72b6\u6001\u8fd4\u56de\u4ee3\u7801\uff080-255\uff09<br \/>\n0: \u6b63\u786e\u6267\u884c<br \/>\n1-255\uff1a\u9519\u8bef\u6267\u884c\uff0c1\uff0c2(\u53c2\u6570\u9519\u8bef\u7684\u8fd4\u56de\u503c)\uff0c127(\u547d\u4ee4\u9519\u8bef\u7684\u8fd4\u56de\u503c)\u7cfb\u7edf\u9884\u7559\uff1b\u5176\u4ed6\u7528\u6237\u53ef\u4ee5\u81ea\u5df1\u5b9a\u4e49.<\/p>\n<p># id student; echo $?<br \/>\n\u8fd4\u56de\u503c\u53ef\u4ee5\u5224\u5b9a\u4e0a\u4e00\u6761\u547d\u4ee4\u662f\u5426\u6267\u884c\u6b63\u786e, \u505a\u4e3a\u6761\u4ef6\u6765\u4e3a\u4e0b\u4e00\u6b65\u547d\u4ee4\u6765\u63d0\u4f9b\u6761\u4ef6.<\/p>\n<p>\u4f4d\u6876\uff1a\/dev\/null: \u8f6f\u4ef6\u8bbe\u5907\uff0cbit bucket\uff0c\u6570\u636e\u9ed1\u6d1e, \u53ef\u4ee5\u5403\u6389\u6240\u6709\u6570\u636e, \u4e0d\u663e\u793a\u4efb\u4f55\u5185\u5bb9. \u4f46\u662f, echo $?\u53ef\u4ee5\u663e\u793a\u72b6\u6001\u503c.<br \/>\n# id sss &amp;&gt; \/dev\/null; if [ `echo $?` -eq 0 ]; then echo &#8220;Yes&#8221;; else echo &#8220;No&#8221;; fi<br \/>\nNo<br \/>\n# id root &amp;&gt; \/dev\/null; if [ `echo $?` -eq 0 ]; then echo &#8220;Yes&#8221;; else echo &#8220;No&#8221;; fi<br \/>\nYes<\/p>\n<p>\u5982\u679c\u662f\u5b57\u7b26\u4e32\u53d8\u91cf\uff0c\u53ef\u4ee5\u5728\u540e\u9762\u8fdb\u884c\u4e30\u5bcc\uff0c\u5c31\u50cf$PATH\u4e00\u6837\uff0c\u5982\uff1a<br \/>\n$ ANIMALS=pig<br \/>\n$ ANIMALS=$ANIMALS:goat<br \/>\n$ echo $ANIMALS<br \/>\npig:goat<br \/>\n\u800c\u8fd9\u4e2a\u53d8\u91cf\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5faa\u73af\uff0c\u5c06\u6bcf\u4e00\u4e2a\u52a8\u7269\u5206\u5272\u51fa\u6765\uff1a<br \/>\n$ for i in `echo $ANIMALS | awk -F: &#8216;{print $1,$2}&#8217;`; do echo $i; done<br \/>\npig<br \/>\ngoat<\/p>\n<p>\u64a4\u6d88\u53d8\u91cf(\u65e0\u8bba\u4ec0\u4e48\u7c7b\u578b\u7684\u53d8\u91cf)\uff1a\u76f4\u63a5\u52a0\u53d8\u91cf\u7684\u540d\u79f0, \u4e0d\u8981\u52a0$.<br \/>\n# unset VARNAME<br \/>\n\u5bfc\u51fa\u53d8\u91cf\u7684\u65f6\u5019, \u4e5f\u662f\u8fd9\u6837\u7684\u539f\u7406, \u53eaexport VARNAME, \u800c\u6ca1\u6709\u7528$.<\/p>\n<p>\u67e5\u770b\u5f53shell\u4e2d\u53d8\u91cf\uff1a\u4e0d\u52a0\u4efb\u4f55\u53c2\u6570\uff0c\u663e\u793a\u5305\u62ec\u672c\u5730\u53d8\u91cf\u3001\u73af\u5883\u53d8\u91cf\uff1b<br \/>\n# set<br \/>\n\u67e5\u770b\u5f53\u524dshell\u4e2d\u7684\u73af\u5883\u53d8\u91cf\uff1a\u4ee5\u4e0b\u4e09\u4e2a\u547d\u4ee4\u90fd\u53ef\u4ee5<br \/>\nprintenv<br \/>\nenv<br \/>\nexport<\/p>\n<p>\u53d8\u91cf\u540d\u79f0\u7684\u5b9a\u4e49\u8981\u6c42\uff1a<br \/>\n1\u3001\u53ea\u80fd\u5305\u542b\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e0b\u5212\u7ebf\uff0c\u5e76\u4e14\u4e0d\u80fd\u6570\u5b57\u5f00\u5934\uff1b<br \/>\n2\u3001\u4e0d\u5e94\u8be5\u8ddf\u7cfb\u7edf\u4e2d\u5df2\u6709\u7684\u73af\u5883\u53d8\u91cf\u91cd\u540d\uff1b<br \/>\n3\u3001\u6700\u597d\u505a\u5230\u89c1\u540d\u77e5\u4e49\uff1b<\/p>\n<p>\u811a\u672c\uff1a\u547d\u4ee4\u7684\u5806\u780c\uff0c\u6309\u5b9e\u9645\u9700\u8981\uff0c\u7ed3\u5408\u547d\u4ee4\u6d41\u7a0b\u63a7\u5236\u673a\u5236\u5b9e\u73b0\u7684\u6e90\u7a0b\u5e8f<\/p>\n<p>\u5185\u6838\u4e0d\u80fd\u7406\u89e3\u5355\u7eaf\u7684\u547d\u4ee4\u5806\u79ef, \u53ea\u7406\u89e3ELF(Executed Linked File)\u683c\u5f0f, \u9700\u8981\u6dfb\u52a0\u6267\u884c\u6743\u9650, \u6dfb\u52a0\u4ee5\u4e2a\u811a\u672c\u89e3\u91ca\u5668, \u8fd9\u5c31\u662f\u4e0b\u9762\u7684\u9b54\u6570.<br \/>\nshebang: \u9b54\u6570, magic number, \u7531#!\u548c\u811a\u672c\u89e3\u91ca\u5668\u8def\u5f84\u7ec4\u6210.<br \/>\n#!\/bin\/bash, \u4ee5#!\u5f00\u5934, \u52a0\u4e0a\u89e3\u91ca\u5668\u7684\u8def\u5f84.<br \/>\n# \u6ce8\u91ca\u884c\uff0c\u4e0d\u6267\u884c<\/p>\n<p>\u7ec3\u4e60\uff1a\u5199\u4e00\u4e2a\u811a\u672c\uff0c\u5b8c\u6210\u4ee5\u4e0b\u4efb\u52a1<br \/>\n1\u3001\u6dfb\u52a05\u4e2a\u7528\u6237, user1,&#8230;, user5<br \/>\n2\u3001\u6bcf\u4e2a\u7528\u6237\u7684\u5bc6\u7801\u540c\u7528\u6237\u540d\uff0c\u800c\u4e14\u8981\u6c42\uff0c\u6dfb\u52a0\u5bc6\u7801\u5b8c\u6210\u540e\u4e0d\u663e\u793apasswd\u547d\u4ee4\u7684\u6267\u884c\u7ed3\u679c\u4fe1\u606f\uff1b<br \/>\n3\u3001\u6bcf\u4e2a\u7528\u6237\u6dfb\u52a0\u5b8c\u6210\u540e\uff0c\u90fd\u8981\u663e\u793a\u7528\u6237\u67d0\u67d0\u5df2\u7ecf\u6210\u529f\u6dfb\u52a0\uff1b<br \/>\nuseradd user1<br \/>\necho &#8220;user1&#8221; | passwd &#8211;stdin user1 &amp;&gt; \/dev\/null<br \/>\necho &#8220;Add user1 successfully.&#8221;<\/p>\n<p>bash\u4e2d\u6761\u4ef6\u6d4b\u8bd5\u7c7b\u578b\uff1a<br \/>\n\u6574\u6570\u6d4b\u8bd5<br \/>\n\u5b57\u7b26\u6d4b\u8bd5<br \/>\n\u6587\u4ef6\u6d4b\u8bd5: \u662f\u5426\u5b58\u5728<\/p>\n<p>\u6761\u4ef6\u6d4b\u8bd5\u7684\u8868\u8fbe\u5f0f\uff1a<br \/>\n[ expression ]: \u5fc5\u987b\u6709\u7a7a\u683c<br \/>\n[[ expression ]]: [[]]\u662fbash\u7684\u5173\u952e\u5b57\u6d4b\u8bd5\uff0c\u4e0e\u4e0a\u9762\u7684\u4e0d\u4e00\u6837.<br \/>\ntest expression: test\u540e\u9762\u52a0\u8868\u8fbe\u5f0f<\/p>\n<p>\u7ec3\u4e60\uff1a\u5982\u679c\u4e00\u4e2a\u53d8\u91cf\u7b49\u4e8e\u4e00\u6bb5\u5b57\u7b26\u4e32\uff0c\u5219\u6253\u5370\u4e00\u4e9b\u4fe1\u606f\u3002<br \/>\n#!\/bin\/bash<br \/>\n# Test usage of [[]].<br \/>\nA=hello<br \/>\nif [[ $a == &#8216;hello&#8217; ]]; then<br \/>\necho &#8220;Yes&#8221;<br \/>\nelse<br \/>\necho &#8220;No&#8221;<br \/>\nfi<br \/>\n# bash b.sh<br \/>\nYes<\/p>\n<p>\u6574\u6570\u6bd4\u8f83:<br \/>\n-eq: \u6d4b\u8bd5\u4e24\u4e2a\u6574\u6570\u662f\u5426\u76f8\u7b49\uff1b\u6bd4\u5982 $A -eq $B<br \/>\n-ne: \u6d4b\u8bd5\u4e24\u4e2a\u6574\u6570\u662f\u5426\u4e0d\u7b49\uff1b\u4e0d\u7b49\uff0c\u4e3a\u771f\uff1b\u76f8\u7b49\uff0c\u4e3a\u5047\uff1b<br \/>\n-gt: \u6d4b\u8bd5\u4e00\u4e2a\u6570\u662f\u5426\u5927\u4e8e\u53e6\u4e00\u4e2a\u6570\uff1b\u5927\u4e8e\uff0c\u4e3a\u771f\uff1b\u5426\u5219\uff0c\u4e3a\u5047\uff1b<br \/>\n-lt: \u6d4b\u8bd5\u4e00\u4e2a\u6570\u662f\u5426\u5c0f\u4e8e\u53e6\u4e00\u4e2a\u6570\uff1b\u5c0f\u4e8e\uff0c\u4e3a\u771f\uff1b\u5426\u5219\uff0c\u4e3a\u5047\uff1b<br \/>\n-ge: \u5927\u4e8e\u6216\u7b49\u4e8e<br \/>\n-le\uff1a\u5c0f\u4e8e\u6216\u7b49\u4e8e<\/p>\n<p>\u547d\u4ee4\u7684\u95f4\u903b\u8f91\u5173\u7cfb\uff1a\u7b26\u5408\u77ed\u8def\u903b\u8f91<br \/>\n\u903b\u8f91\u4e0e\uff1a &amp;&amp;, \u5176\u4e2d\u4e00\u4e2a\u4e3a\u5047, \u7ed3\u679c\u4e00\u5b9a\u4e3a\u5047, \u540e\u9762\u7684\u5c31\u4e0d\u6267\u884c\u4e86, \u7b26\u5408&#8221;\u77ed\u8def\u903b\u8f91&#8221;.<br \/>\n\u7b2c\u4e00\u4e2a\u6761\u4ef6\u4e3a\u5047\u65f6\uff0c\u7b2c\u4e8c\u6761\u4ef6\u4e0d\u4f1a\u518d\u5224\u65ad\uff0c\u6700\u7ec8\u7ed3\u679c\u5df2\u7ecf\u6709\uff1b<br \/>\n\u7b2c\u4e00\u4e2a\u6761\u4ef6\u4e3a\u771f\u65f6\uff0c\u7b2c\u4e8c\u6761\u4ef6\u624d\u4f1a\u5224\u65ad, \u4e14\u5fc5\u987b\u5f97\u5224\u65ad\uff1b<br \/>\n\u903b\u8f91\u6216\uff1a ||<\/p>\n<p>\u793a\u4f8b\uff1a<br \/>\n\u5982\u679c\u7528\u6237user6\u4e0d\u5b58\u5728\uff0c\u5c31\u6dfb\u52a0\u7528\u6237user6: \u4e24\u79cd\u65b9\u6cd5\u53ef\u7528<br \/>\n! id user6 &amp;&amp; useradd user6<br \/>\nid user6 || useradd user6<\/p>\n<p>\u5982\u679c\u662f\u590d\u5408\u4f7f\u7528\uff0c\u5982\u4e0b\uff1a\uff08\u4e0d\u8fc7\u591a\u590d\u6742\uff0c\u4ece\u5de6\u5230\u53f3\u4f9d\u6b21\u5224\u65ad\uff09<br \/>\n! id user6 &amp;&amp; useradd user6 || userdel user6<br \/>\n\u8fd9\u91cc\u8868\u793a\uff0c\u5982\u679c\u4e0d\u5b58\u5728\u7528\u6237\u5c31\u521b\u5efa\uff1b\u5982\u679c\u5b58\u5728\u4e86\u5c31\u5220\u9664\u3002<\/p>\n<p>\u5982\u679c\u7528\u6237\u5b58\u5728\uff0c\u5c31\u663e\u793a\u7528\u6237\u5df2\u5b58\u5728\uff1b\u5426\u5219\uff0c\u5c31\u6dfb\u52a0\u6b64\u7528\u6237\uff1b<br \/>\nid user1 &amp;&amp; echo &#8220;user1 exists.&#8221; || useradd user1<\/p>\n<p>\u5982\u679c\u7528\u6237\u4e0d\u5b58\u5728\uff0c\u5c31\u6dfb\u52a0\uff1b\u5426\u5219\uff0c\u663e\u793a\u5176\u5df2\u7ecf\u5b58\u5728\uff1b<br \/>\n! id user1 &amp;&amp; useradd user1 || echo &#8220;user1 exists.&#8221;<\/p>\n<p>\u5982\u679c\/etc\/inittab\u6587\u4ef6\u7684\u884c\u6570\u5927\u4e8e100\uff0c\u5c31\u663e\u793a\u597d\u5927\u7684\u6587\u4ef6\uff1b<br \/>\n[ `wc -l \/etc\/inittab | cut -d&#8217; &#8216; -f1` -gt 100 ] &amp;&amp; echo &#8220;Large file.&#8221;<\/p>\n<p>\u5982\u679c\u7528\u6237\u4e0d\u5b58\u5728\uff0c\u6dfb\u52a0\u5e76\u4e14\u7ed9\u5bc6\u7801\uff1b\u5426\u5219\uff0c\u663e\u793a\u5176\u5df2\u7ecf\u5b58\u5728\uff1b<br \/>\n#!\/bin\/bash<br \/>\n# Add user1, user2, user2 if not exist.<br \/>\n! id user1 &amp;&gt; \/dev\/null &amp;&amp; useradd user1 &amp;&amp; echo &#8220;Add user1 successfully.&#8221; &amp;&amp; echo &#8220;user1&#8221; | passwd &#8211;stdin user1 &amp;&gt; \/dev\/null &amp;&amp; echo &#8220;user1 authorized successfully.&#8221; || echo &#8220;user1 exists.&#8221;<br \/>\n! id user2 &amp;&gt; \/dev\/null &amp;&amp; useradd user2 &amp;&amp; echo &#8220;Add user2 successfully.&#8221; &amp;&amp; echo &#8220;user2&#8221; | passwd &#8211;stdin user2 &amp;&gt; \/dev\/null &amp;&amp; echo &#8220;user2 authorized successfully.&#8221; || echo &#8220;user2 exists.&#8221;<br \/>\n! id user3 &amp;&gt; \/dev\/null &amp;&amp; useradd user3 &amp;&amp; echo &#8220;Add user3 successfully.&#8221; &amp;&amp; echo &#8220;user3&#8221; | passwd &#8211;stdin user3 &amp;&gt; \/dev\/null &amp;&amp; echo &#8220;user3 authorized successfully.&#8221; || echo &#8220;user3 exists.&#8221;<br \/>\nUSER_NUM=`wc -l \/etc\/passwd |cut -d&#8217; &#8216; -f1`<br \/>\necho &#8220;There are $USER_NUM users.&#8221;<br \/>\n\u6ce8: wc -l \/etc\/passwd\u7684\u7ed3\u679c\u5982\u4e0b:<br \/>\n37 \/etc\/passwd<br \/>\n\u6240\u4ee5, \u8981\u7528cut\u547d\u4ee4, \u622a\u53d6\u5176\u4e2d\u7684\u6570\u5b57. \u5206\u5272\u7b26\u662f\u7a7a\u683c.<\/p>\n<p>\u7ec3\u4e60<br \/>\n\u5199\u4e00\u4e2a\u811a\u672c\uff0c\u5b8c\u6210\u4ee5\u4e0b\u8981\u6c42\uff1a<br \/>\n1\u3001\u6dfb\u52a03\u4e2a\u7528\u6237user1, user2, user3\uff1b\u4f46\u8981\u5148\u5224\u65ad\u7528\u6237\u662f\u5426\u5b58\u5728\uff0c\u4e0d\u5b58\u5728\u800c\u540e\u518d\u6dfb\u52a0\uff1b<br \/>\n2\u3001\u6dfb\u52a0\u5b8c\u6210\u540e\uff0c\u663e\u793a\u4e00\u5171\u6dfb\u52a0\u4e86\u51e0\u4e2a\u7528\u6237\uff1b\u5f53\u7136\uff0c\u4e0d\u80fd\u5305\u62ec\u56e0\u4e3a\u4e8b\u5148\u5b58\u5728\u800c\u6ca1\u6709\u6dfb\u52a0\u7684\uff1b<br \/>\n3\u3001\u6700\u540e\u663e\u793a\u5f53\u524d\u7cfb\u7edf\u4e0a\u5171\u6709\u591a\u5c11\u4e2a\u7528\u6237\uff1b<br \/>\n#!\/bin\/bash<br \/>\n! id user1 &amp;&gt; \/dev\/null &amp;&amp; useradd user1 &amp;&amp; echo &#8220;user1&#8221; |passwd &#8211;stdin &amp;&gt; \/dev\/null || echo &#8220;user1 exists.&#8221;<\/p>\n<p>\u5199\u4e00\u4e2a\u811a\u672c\uff0c\u5b8c\u6210\u4ee5\u4e0b\u8981\u6c42\uff1a<br \/>\n\u7ed9\u5b9a\u4e00\u4e2a\u7528\u6237\uff1a<br \/>\n1\u3001\u5982\u679c\u5176UID\u4e3a0\uff0c\u5c31\u663e\u793a\u6b64\u4e3a\u7ba1\u7406\u5458\uff1b<br \/>\n2\u3001\u5426\u5219\uff0c\u5c31\u663e\u793a\u5176\u4e3a\u666e\u901a\u7528\u6237\uff1b<br \/>\n\u65b9\u6cd5\u4e00\uff1a<br \/>\n#!\/bin\/bash<br \/>\n# Confirm whether user is Administrator.<br \/>\nif test `id -u` -eq 0; then<br \/>\necho &#8220;Admin&#8221;<br \/>\nelse<br \/>\necho &#8220;Common user.&#8221;<br \/>\nfi<\/p>\n<p>\u65b9\u6cd5\u4e8c:<br \/>\nNAME=user16<br \/>\nUSERID=`id -u $NAME`<br \/>\nif [ $USERID -eq 0 ]; then<br \/>\necho &#8220;Admin&#8221;<br \/>\nelse<br \/>\necho &#8220;common user.&#8221;<br \/>\nfi<\/p>\n<p>\u65b9\u6cd5\u4e09:<br \/>\nNAME=user16<br \/>\nif [ `id -u $NAME` -eq 0 ]; then<br \/>\necho &#8220;Admin&#8221;<br \/>\nelse<br \/>\necho &#8220;common user.&#8221;<br \/>\nfi<\/p>\n<p>\u533a\u522b\uff1aif id $NAME; then\uff0c\u8fd9\u4e2a\u662f\u8868\u793a\u7528\u6237\u5b58\u5728\u624d\u6267\u884c\u67d0\u4e9b\u547d\u4ee4\u7684\u3002<\/p>\n<p>\u7ec3\u4e60\uff1a\u5199\u4e00\u4e2a\u811a\u672c<br \/>\n\u5224\u65ad\u5f53\u524d\u7cfb\u7edf\u4e0a\u662f\u5426\u6709\u7528\u6237\u7684\u9ed8\u8ba4shell\u4e3abash\uff1b<br \/>\n\u5982\u679c\u6709\uff0c\u5c31\u663e\u793a\u6709\u591a\u5c11\u4e2a\u8fd9\u7c7b\u7528\u6237\uff1b\u5426\u5219\uff0c\u5c31\u663e\u793a\u6ca1\u6709\u8fd9\u7c7b\u7528\u6237\uff1b<br \/>\ngrep &#8220;bash$&#8221; \/etc\/passwd &amp;&gt; \/dev\/null<br \/>\nRETVAL=$?<br \/>\nif [ $RETVAL -eq 0 ]; then<\/p>\n<p>if grep &#8220;bash$&#8221; \/etc\/passwd &amp;&gt; \/dev\/null; then<\/p>\n<p>\u63d0\u793a\uff1a\u201c\u5f15\u7528\u201d\u4e00\u4e2a\u547d\u4ee4\u7684\u6267\u884c\u7ed3\u679c\uff0c\u8981\u4f7f\u7528\u547d\u4ee4\u5f15\u7528\uff1b\u6bd4\u5982: RESAULTS=`wc -l \/etc\/passwd | cut -d: -f1`\uff1b<br \/>\n\u4f7f\u7528\u4e00\u4e2a\u547d\u4ee4\u7684\u6267\u884c\u72b6\u6001\u7ed3\u679c\uff0c\u8981\u76f4\u63a5\u6267\u884c\u6b64\u547d\u4ee4\uff0c\u4e00\u5b9a\u4e0d\u80fd\u5f15\u7528\uff1b\u6bd4\u5982: if id user1\u4e00\u53e5\u4e2d\u7684id\u547d\u4ee4\u5c31\u4e00\u5b9a\u4e0d\u80fd\u52a0\u5f15\u53f7\uff1b<br \/>\n\u5982\u679c\u60f3\u628a\u4e00\u4e2a\u547d\u4ee4\u7684\u6267\u884c\u7ed3\u679c\u8d4b\u503c\u7ed9\u67d0\u53d8\u91cf\uff0c\u8981\u4f7f\u7528\u547d\u4ee4\u5f15\u7528\uff0c\u6bd4\u5982USERID=`id -u user1`;<br \/>\n\u5982\u679c\u60f3\u628a\u4e00\u4e2a\u547d\u4ee4\u7684\u6267\u884c\u72b6\u6001\u7ed3\u679c\u4fdd\u5b58\u4e0b\u6765\uff0c\u5e76\u4f5c\u4e3a\u547d\u4ee4\u6267\u884c\u6210\u529f\u4e0e\u5426\u7684\u5224\u65ad\u6761\u4ef6\uff0c\u5219\u9700\u8981\u5148\u6267\u884c\u6b64\u547d\u4ee4\uff0c\u800c\u540e\u5f15\u7528\u5176\u72b6\u6001\u7ed3\u679c\uff0c\u5982<br \/>\nid -u user1<br \/>\nRETVAL=$?<br \/>\n\u6b64\u53e5\u7edd\u5bf9\u4e0d\u53ef\u4ee5\u5199\u4e3aRETVAL=`id -u user1`\uff1b<\/p>\n<p>\u7ec3\u4e60\uff1a\u5199\u4e00\u4e2a\u811a\u672c<br \/>\n\u7ed9\u5b9a\u4e00\u4e2a\u6587\u4ef6\uff0c\u6bd4\u5982\/etc\/inittab<br \/>\n\u5224\u65ad\u8fd9\u4e2a\u6587\u4ef6\u4e2d\u662f\u5426\u6709\u7a7a\u767d\u884c\uff1b<br \/>\n\u5982\u679c\u6709\uff0c\u5219\u663e\u793a\u5176\u7a7a\u767d\u884c\u6570\uff1b\u5426\u5219\uff0c\u663e\u793a\u6ca1\u6709\u7a7a\u767d\u884c\u3002<\/p>\n<p>#!\/bin\/bash<br \/>\n# To show whether there is blank lines in a file.<br \/>\ngrep &#8220;^$&#8221; \/etc\/inittab &amp;&gt; \/dev\/null<br \/>\nRETVAL=`echo $?`<br \/>\nif [ $RETVAL -eq 0 ]; then<br \/>\nNUM=`grep &#8220;^$&#8221; \/etc\/inittab |wc -l |cut -d&#8217; &#8216; -f1`<br \/>\necho &#8220;Blank lines exist. There are $NUM blank lines.&#8221;<br \/>\nelse<br \/>\necho &#8220;There has no blank line.&#8221;<br \/>\nfi<br \/>\n&#8211;by Liemer_Lius<\/p>\n<p>#!\/bin\/bash<br \/>\nA=`grep &#8216;^$&#8217; \/etc\/inittab | wc -l`<br \/>\nif [ $A -gt 0 ]; then<br \/>\necho &#8220;$A&#8221;<br \/>\nelse<br \/>\necho &#8220;meiyoukongbaihang&#8221;<br \/>\nfi<br \/>\n\u2014\u2014 by \u5f20\u5e05<\/p>\n<p>#!\/bin\/bash<br \/>\nFILE=\/etc\/inittab<br \/>\nif [ ! -e $FILE ]; then<br \/>\necho &#8220;No $FILE.&#8221;<br \/>\nexit 8<br \/>\nfi<\/p>\n<p>if grep &#8220;^$&#8221; $FILE &amp;&gt; \/dev\/null; then<br \/>\necho &#8220;Total blank lines: `grep &#8220;^$&#8221; $FILE | wc -l`.&#8221;<br \/>\nelse<br \/>\necho &#8220;No blank line.&#8221;<br \/>\nfi<\/p>\n<p>\u7ec3\u4e60\uff1a\u5199\u4e00\u4e2a\u811a\u672c<br \/>\n\u7ed9\u5b9a\u4e00\u4e2a\u7528\u6237\uff0c\u5224\u65ad\u5176UID\u4e0eGID\u662f\u5426\u4e00\u6837<br \/>\n\u5982\u679c\u4e00\u6837\uff0c\u5c31\u663e\u793a\u6b64\u7528\u6237\u4e3a\u201cgood guy\u201d\uff1b\u5426\u5219\uff0c\u5c31\u663e\u793a\u6b64\u7528\u6237\u4e3a\u201cbad guy\u201d\u3002<\/p>\n<p>#!\/bin\/bash<br \/>\n# To determain whether the UID equals GID.<br \/>\nif [ `id -u` -eq `id -g` ]; then<br \/>\necho &#8220;The UID and GID are the same.&#8221;<br \/>\nelse<br \/>\necho &#8220;The UID and GID are different.&#8221;<br \/>\nfi<\/p>\n<p>#!\/bin\/bash<br \/>\nUSERNAME=user1<br \/>\nUSERID=`id -u $USERNAME`<br \/>\nGROUPID=`id -g $USERNAME`<br \/>\nif [ $USERID -eq $GROUPID ]; then<br \/>\necho &#8220;Good guy.&#8221;<br \/>\nelse<br \/>\necho &#8220;Bad guy.&#8221;<br \/>\nfi<\/p>\n<p>\u8fdb\u4e00\u6b65\u8981\u6c42\uff1a\u4e0d\u4f7f\u7528id\u547d\u4ee4\u83b7\u5f97\u5176id\u53f7\uff1b<\/p>\n<p>#!\/bin\/bash \/\/ \u9996\u5148\u7684\u5224\u65ad\uff0c\u786e\u5b9a\u6709\u8be5\u7528\u6237<br \/>\n#<br \/>\nUSERNAME=user1<br \/>\nif ! grep &#8220;^$USERNAME\\&gt;&#8221; \/etc\/passwd &amp;&gt; \/dev\/null; then<br \/>\necho &#8220;No such user: $USERNAME.&#8221;<br \/>\nexit 4<br \/>\nfi<\/p>\n<p>#!\/bin\/bash<br \/>\n# Don&#8217;t use id command to determain whether the uid and the gid are the same.<br \/>\nUSER_ID=`head -1 \/etc\/passwd |cut -d: -f3`<br \/>\nGROUP_ID=`head -1 \/etc\/passwd |cut -d: -f4`<br \/>\nif [ $USER_ID -eq $GROUP_ID ]; then<br \/>\necho &#8220;The UID and the GID are the same.&#8221;<br \/>\nelse<br \/>\necho &#8220;The UID and GID are different.&#8221;<br \/>\nfi<\/p>\n<p>USERID=`grep &#8220;^$USERNAME\\&gt;&#8221; \/etc\/passwd | cut -d: -f3`<br \/>\nGROUPID=`grep &#8220;^$USERNAME\\&gt;&#8221; \/etc\/passwd | cut -d: -f4`<br \/>\nif [ $USERID -eq $GROUPID ]; then<br \/>\necho &#8220;Good guy.&#8221;<br \/>\nelse<br \/>\necho &#8220;Bad guy.&#8221;<br \/>\nfi<\/p>\n<p>\u7ec3\u4e60\uff1a\u5199\u4e00\u4e2a\u811a\u672c<br \/>\n\u7ed9\u5b9a\u4e00\u4e2a\u7528\u6237\uff0c\u83b7\u53d6\u5176\u5bc6\u7801\u8b66\u544a\u671f\u9650\uff1b<br \/>\n\u800c\u540e\u5224\u65ad\u7528\u6237\u5bc6\u7801\u4f7f\u7528\u671f\u9650\u662f\u5426\u5df2\u7ecf\u5c0f\u4e8e\u8b66\u544a\u671f\u9650\uff1b<br \/>\n\u63d0\u793a\uff1a\u8ba1\u7b97\u65b9\u6cd5\uff0c\u6700\u957f\u4f7f\u7528\u671f\u9650\u51cf\u53bb\u5df2\u7ecf\u4f7f\u7528\u7684\u5929\u6570\u5373\u4e3a\u5269\u4f59\u4f7f\u7528\u671f\u9650\uff1b<\/p>\n<p>\u5982\u679c\u5c0f\u4e8e\uff0c\u5219\u663e\u793a\u201cWarning\u201d\uff1b\u5426\u5219\uff0c\u5c31\u663e\u793a\u201cOK\u201d\u3002<\/p>\n<p>\u5706\u6574\uff1a\u4e22\u5f03\u5c0f\u6570\u70b9\u540e\u7684\u6240\u6709\u5185\u5bb9<\/p>\n<p>#!\/bin\/bash<br \/>\nW=`grep &#8220;student&#8221; \/etc\/shadow | cut -d: -f6`<br \/>\nS=`date +%s`<br \/>\nT=`expr $S\/86400`<br \/>\nL=`grep &#8220;^student&#8221; \/etc\/shadow | cut -d: -f5`<br \/>\nN=`grep &#8220;^student&#8221; \/etc\/shadow | cut -d: -f3`<br \/>\nSY=$[$L-$[$T-$N]]<\/p>\n<p>if [ $SY -lt $W ]; then<br \/>\necho &#8216;Warning&#8217;<br \/>\nelse<br \/>\necho &#8216;OK&#8217;<br \/>\nfi<br \/>\n\u2014\u2014 by \u8463\u5229\u4e1c<\/p>\n<p>#!\/bin\/bash<br \/>\nNEWPASS=`grep &#8216;^\\&lt;root\\&gt;&#8217; \/etc\/shadow |cut -d: -f3`<br \/>\nLONGTIME=`grep &#8216;^\\&lt;root\\&gt;&#8217; \/etc\/shadow |cut -d: -f5`<br \/>\nWORNTIME=`grep &#8216;^\\&lt;root\\&gt;&#8217; \/etc\/shadow |cut -d: -f6`<br \/>\nNOWTIME=$[`date +%s`\/65536]<\/p>\n<p>TIMEUSED=$[$NOWTIME-$NEWPASS]<br \/>\nTIME_LEFT=$[$LONGTIME-$TIMEUSED]<\/p>\n<p>if test $TIME_LEFT -le $WORNTIME; then<br \/>\necho &#8220;It time to change your password.&#8221;<br \/>\nelse<br \/>\necho &#8220;Your password is effective.&#8221;<br \/>\nfi<\/p>\n<p>\u2014\u2014by myself<\/p>\n<p>\u7ec3\u4e60\uff1a\u5199\u4e00\u4e2a\u811a\u672c<br \/>\n\u5224\u5b9a\u547d\u4ee4\u5386\u53f2\u4e2d\u5386\u53f2\u547d\u4ee4\u7684\u603b\u6761\u76ee\u662f\u5426\u5927\u4e8e1000\uff1b\u5982\u679c\u5927\u4e8e\uff0c\u5219\u663e\u793a\u201cSome command will gone.\u201d\uff1b\u5426\u5219\u663e\u793a\u201cOK\u201d\u3002<br \/>\n# history |tail -1 \/\/ history\u547d\u4ee4\u5f97\u5230\u7684\u6570\u503c\uff0c\u53ef\u80fd\u4f1a\u8d85\u8fc71000\uff0c\u8fd9\u65f6\u5019\u624d\u63d0\u793a\u3002cut\u7684\u65f6\u5019\uff0c\u5e94\u8be5\u53d6\u7b2c\u4e8c\u6bb5\uff0c\u7b2c\u4e00\u6bb5\u662f\u7a7a\u7684\u3002<br \/>\n456 history |tail -1<\/p>\n<p>shell\u4e2d\u5982\u4f55\u8fdb\u884c\u7b97\u672f\u8fd0\u7b97\uff1a<br \/>\nA=3<br \/>\nB=6<br \/>\n1\u3001let \u7b97\u672f\u8fd0\u7b97\u8868\u8fbe\u5f0f<br \/>\nlet C=$A+$B<br \/>\n2\u3001$[\u7b97\u672f\u8fd0\u7b97\u8868\u8fbe\u5f0f]<br \/>\nC=$[$A+$B]<br \/>\n3\u3001$((\u7b97\u672f\u8fd0\u7b97\u8868\u8fbe\u5f0f))<br \/>\nC=$(($A+$B))<br \/>\n4\u3001expr \u7b97\u672f\u8fd0\u7b97\u8868\u8fbe\u5f0f\uff0c\u8868\u8fbe\u5f0f\u4e2d\u5404\u64cd\u4f5c\u6570\u53ca\u8fd0\u7b97\u7b26\u4e4b\u95f4\u8981\u6709\u7a7a\u683c\uff0c\u800c\u4e14\u8981\u4f7f\u7528\u547d\u4ee4\u5f15\u7528<br \/>\nC=`expr $A + $B`<\/p>\n<p># A=2<br \/>\n# B=5<br \/>\n# C=`expr $A + $B`<br \/>\n# echo $C<br \/>\n7<br \/>\n\u6ce8: expr &#8211; evaluate expressions<\/p>\n<p>\u6761\u4ef6\u5224\u65ad\uff0c\u63a7\u5236\u7ed3\u6784\uff1a<\/p>\n<p>\u5355\u5206\u652fif\u8bed\u53e5<br \/>\nif \u5224\u65ad\u6761\u4ef6; then<br \/>\nstatement1<br \/>\nstatement2<br \/>\n&#8230;<br \/>\nfi<\/p>\n<p>\u53cc\u5206\u652f\u7684if\u8bed\u53e5\uff1a<br \/>\nif \u5224\u65ad\u6761\u4ef6; then<br \/>\nstatement1<br \/>\nstatement2<br \/>\n&#8230;<br \/>\nelse<br \/>\nstatement3<br \/>\nstatement4<br \/>\n&#8230;<br \/>\nfi<\/p>\n<p>\u591a\u5206\u652f\u7684if\u8bed\u53e5\uff1aif\u548celif\u90fd\u9700\u8981then<br \/>\nif \u5224\u65ad\u6761\u4ef61; then<br \/>\nstatement1<br \/>\n&#8230;<br \/>\nelif \u5224\u65ad\u6761\u4ef62; then<br \/>\nstatement2<br \/>\n&#8230;<br \/>\nelif \u5224\u65ad\u6761\u4ef63; then<br \/>\nstatement3<br \/>\n&#8230;<br \/>\nelse<br \/>\nstatement4<br \/>\n&#8230;<br \/>\nfi<\/p>\n<p>\u6d4b\u8bd5\u811a\u672c:<br \/>\n#!\/bin\/bash<br \/>\n#<br \/>\nA=2<br \/>\nB=3<br \/>\nif test $A -eq $B; then<br \/>\necho &#8220;A equals B.&#8221;<br \/>\nelse<br \/>\necho &#8220;A not equal B.&#8221;<br \/>\nfi<br \/>\n\u6267\u884c\u811a\u672c:<br \/>\n# bash -x a.sh<br \/>\n+ A=2<br \/>\n+ B=3<br \/>\n+ test 2 -eq 3<br \/>\n+ echo &#8216;A not equal B.&#8217;<br \/>\nA not equal B.<\/p>\n<p>\u6587\u4ef6\u6d4b\u8bd5\uff1a<br \/>\n-e FILE\uff1a\u6d4b\u8bd5\u6587\u4ef6\u662f\u5426\u5b58\u5728<br \/>\n-f FILE: \u6d4b\u8bd5\u6587\u4ef6\u662f\u5426\u4e3a\u666e\u901a\u6587\u4ef6<br \/>\n# if test -f b.sh; then echo &#8220;Common file.&#8221;; else echo &#8220;Exordinary file.&#8221;; fi<br \/>\n-d FILE: \u6d4b\u8bd5\u6307\u5b9a\u8def\u5f84\u662f\u5426\u4e3a\u76ee\u5f55<br \/>\n# if test -d \/bin; then echo &#8220;Directory.&#8221;; else echo &#8220;Not.&#8221;; fi<br \/>\n-r FILE: \u6d4b\u8bd5\u5f53\u524d\u7528\u6237\u5bf9\u6307\u5b9a\u6587\u4ef6\u662f\u5426\u6709\u8bfb\u53d6\u6743\u9650\uff1b<br \/>\n-w FILE: \u6d4b\u8bd5\u5f53\u524d\u7528\u6237\u5bf9\u6307\u5b9a\u6587\u4ef6\u662f\u5426\u6709\u5199\u53d6\u6743\u9650\uff1b<br \/>\n-x FILE: \u6d4b\u8bd5\u5f53\u524d\u7528\u6237\u5bf9\u6307\u5b9a\u6587\u4ef6\u662f\u5426\u6709\u6267\u884c\u53d6\u6743\u9650\uff1b<\/p>\n<p>[ -e \/etc\/inittab ]<br \/>\n[ -x \/etc\/rc.d\/rc.sysinit ]<\/p>\n<p>\u53e6\u5916, test\u6307\u4ee4\u4e5f\u662f\u53ef\u4ee5\u4f7f\u7528\u7684:<br \/>\n#!\/bin\/bash<br \/>\n#<br \/>\nif test -e \/bin\/bash; then<br \/>\necho &#8220;Exist.&#8221;<br \/>\nelse<br \/>\necho &#8220;Not exist.&#8221;<br \/>\nfi<\/p>\n<p>\u7ec3\u4e60\uff1a\u5199\u4e00\u4e2a\u811a\u672c<br \/>\n\u7ed9\u5b9a\u4e00\u4e2a\u6587\u4ef6\uff1a<br \/>\n\u5982\u679c\u662f\u4e00\u4e2a\u666e\u901a\u6587\u4ef6\uff0c\u5c31\u663e\u793a\u4e4b\uff1b<br \/>\n\u5982\u679c\u662f\u4e00\u4e2a\u76ee\u5f55\uff0c\u4ea6\u663e\u793a\u4e4b\uff1b<br \/>\n\u5426\u5219\uff0c\u6b64\u4e3a\u65e0\u6cd5\u8bc6\u522b\u4e4b\u6587\u4ef6\uff1b<\/p>\n<p>#!\/bin\/bash<br \/>\n# Input something and analyze what type it is.<\/p>\n<p>read -p &#8220;Please input a file or directory: &#8221; STH<\/p>\n<p>if [ ! -e $STH ]; then<br \/>\necho &#8220;No such file or directory.&#8221;<br \/>\nelif [ -f $STH ]; then<br \/>\necho &#8220;It&#8217;s a file.&#8221;<br \/>\nelse<br \/>\necho &#8220;It&#8217;s a directory.&#8221;<br \/>\nfi<\/p>\n<p>\u5b9a\u4e49\u811a\u672c\u9000\u51fa\u72b6\u6001\u7801<br \/>\nexit: \u9000\u51fa\u811a\u672c<br \/>\nexit #<br \/>\n\u5982\u679c\u811a\u672c\u6ca1\u6709\u660e\u786e\u5b9a\u4e49\u9000\u51fa\u72b6\u6001\u7801\uff0c\u90a3\u4e48\uff0c\u6700\u540e\u6267\u884c\u7684\u4e00\u6761\u547d\u4ee4\u7684\u9000\u51fa\u7801\u5373\u4e3a\u811a\u672c\u7684\u9000\u51fa\u72b6\u6001\u7801\uff1b<br \/>\n\u901a\u5e38, \u5728exit\u524d\u9762, \u901a\u5e38\u4f1a\u6709\u4e00\u4e2aecho\u6765\u8f93\u51fa\u63d0\u793a\u4fe1\u606f; echo\u672c\u8eab\u7684\u6267\u884c, \u80af\u5b9a\u662f\u4e00\u4e2a\u6b63\u786e\u7684\u72b6\u6001. \u800c\u9ed8\u8ba4\u5982\u679cexit\u540e\u9762\u4e0d\u5b9a\u4e49\u72b6\u6001\u7801\u7684\u65f6\u5019, \u9ed8\u8ba4\u4ee5\u6700\u540e\u4e00\u6761\u547d\u4ee4\u7684\u6267\u884c\u72b6\u6001\u7801\u505a\u4e3a\u6574\u4e2a\u811a\u672c\u7684\u6267\u884c\u72b6\u6001\u7ed3\u679c, \u56e0\u6b64\u5e38\u5e38\u663e\u793a\u4e3a0, \u8fd9\u4e0d\u662f\u6211\u4eec\u9884\u671f\u7684. \u6240\u4ee5, \u5728\u5b9a\u4e49exit\u7684\u65f6\u5019, \u4e00\u5b9a\u8981\u8bb0\u5f97\u81ea\u5b9a\u4e49\u4e00\u4e2a\u6267\u884c\u72b6\u6001\u7801.<\/p>\n<p>\u6d4b\u8bd5\u811a\u672c\u662f\u5426\u6709\u8bed\u6cd5\u9519\u8bef\uff1a<br \/>\nbash -n \u811a\u672c: \u67e5\u770b\u8bed\u6cd5\u9519\u8bef\uff0c\u4f46\u5f88\u6a21\u7cca\u3002<br \/>\nbash -x \u811a\u672c\uff1a\u5355\u6b65\u6267\u884c\uff0c\u4fbf\u4e8e\u6392\u9664bug\u3002<\/p>\n<p>\u7ec3\u4e60\uff1a\u5199\u4e00\u811a\u672c<br \/>\n\u80fd\u63a5\u53d7\u4e00\u4e2a\u53c2\u6570(\u6587\u4ef6\u8def\u5f84)<br \/>\n\u5224\u5b9a\uff1a\u6b64\u53c2\u6570\u5982\u679c\u662f\u4e00\u4e2a\u5b58\u5728\u7684\u6587\u4ef6\uff0c\u5c31\u663e\u793a\u201cOK.\u201d\uff1b\u5426\u5219\u5c31\u663e\u793a&#8221;No such file.&#8221;<br \/>\n\u811a\u672c\u5982\u4e0b: \u4e30\u5bcc\u53c2\u6570\u4e2a\u6570\u7684\u5224\u65ad, \u4e30\u5bcc\u53c2\u6570\u7684\u5217\u51fa, \u4e30\u5bcc\u5404\u4e2a\u53c2\u6570\u7684\u5355\u72ec\u5224\u65ad\u5e76\u6253\u5370\u76f8\u5173\u7684\u63d0\u793a\u4fe1\u606f.<\/p>\n<p>#!\/bin\/bash<br \/>\n#<br \/>\nif test $# -lt 1; then<br \/>\necho &#8220;We need at least 1 options.&#8221;<br \/>\nexit 3<br \/>\nfi<br \/>\necho -e &#8220;The options are: $*&#8221;<\/p>\n<p>for i in $*; do<br \/>\nif test -e $i; then<br \/>\necho &#8220;$i exist.&#8221;<br \/>\nelse<br \/>\necho &#8220;No such file named $i&#8221;<br \/>\nfi<br \/>\ndone<\/p>\n<p>\u6267\u884c\u811a\u672c:<br \/>\n# .\/b.sh \/etc\/inittab \/etc\/passwd \/proc\/meminfoo<br \/>\nThe options are: \/etc\/inittab \/etc\/passwd \/proc\/meminfoo<br \/>\n\/etc\/inittab exist.<br \/>\n\/etc\/passwd exist.<br \/>\nNo such file named \/proc\/meminfoo<\/p>\n<p>\u7ec3\u4e60\uff1a\u5199\u4e00\u4e2a\u811a\u672c<br \/>\n\u7ed9\u811a\u672c\u4f20\u9012\u4e24\u4e2a\u53c2\u6570(\u6574\u6570)\uff1b<br \/>\n\u663e\u793a\u6b64\u4e24\u8005\u4e4b\u548c\uff0c\u4e4b\u4e58\u79ef\uff1b<\/p>\n<p>#!\/bin\/bash<br \/>\n#<br \/>\nif [ $# -lt 2 ]; then<br \/>\necho &#8220;Usage: cacl.sh ARG1 ARG2&#8221;<br \/>\nexit 8<br \/>\nfi<\/p>\n<p>echo &#8220;The sum is: $[$1+$2].&#8221;<br \/>\necho &#8220;The prod is: $[$1*$2].&#8221;<\/p>\n<p>\u8f6c\u8f7d\u8bf7\u6ce8\u660e\uff1a<a href=\"https:\/\/www.liutianfeng.com\">liutianfeng.com<\/a> &raquo; <a href=\"https:\/\/www.liutianfeng.com\/?p=304\">bash\u5185\u5bb9\u56de\u987e<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>bash\u53ca\u5176\u7279\u6027\uff1a shell: \u5916\u58f3\u7a0b\u5e8f \u5e7f\u4e49\u7684shell\u5206\u7c7b: GUI\uff1aGnome, KDE, Xfce, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[31],"tags":[],"_links":{"self":[{"href":"https:\/\/www.liutianfeng.com\/index.php?rest_route=\/wp\/v2\/posts\/304"}],"collection":[{"href":"https:\/\/www.liutianfeng.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.liutianfeng.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.liutianfeng.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.liutianfeng.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=304"}],"version-history":[{"count":1,"href":"https:\/\/www.liutianfeng.com\/index.php?rest_route=\/wp\/v2\/posts\/304\/revisions"}],"predecessor-version":[{"id":305,"href":"https:\/\/www.liutianfeng.com\/index.php?rest_route=\/wp\/v2\/posts\/304\/revisions\/305"}],"wp:attachment":[{"href":"https:\/\/www.liutianfeng.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.liutianfeng.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.liutianfeng.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}