{"id":87227,"date":"2026-07-30T03:32:27","date_gmt":"2026-07-29T19:32:27","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/87227.html"},"modified":"2026-07-30T03:32:27","modified_gmt":"2026-07-29T19:32:27","slug":"%e7%ac%ac%e4%b8%83%e7%ab%a0-shell%e8%84%9a%e6%9c%ac%e7%bc%96%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/87227.html","title":{"rendered":"\u7b2c\u4e03\u7ae0 Shell\u811a\u672c\u7f16\u7a0b"},"content":{"rendered":"<h2>\u7b2c07\u7ae0 Shell\u811a\u672c\u7f16\u7a0b<\/h2>\n<p>\u672c\u7ae0\u662fLinux\u5b66\u4e60\u7684\u91cd\u8981\u8f6c\u6298\u70b9\u3002\u524d\u9762\u51e0\u7ae0\u4f60\u5b66\u7684\u90fd\u662f&#034;\u624b\u52a8\u64cd\u4f5c&#034;\u2014\u2014\u4e00\u884c\u4e00\u884c\u6572\u547d\u4ee4&#xff0c;\u5c31\u50cf\u7528\u7b77\u5b50\u4e00\u53e3\u4e00\u53e3\u5403\u996d\u3002\u800c\u8fd9\u4e00\u7ae0&#xff0c;\u4f60\u8981\u5b66\u7684\u662f&#034;\u81ea\u52a8\u5316&#034;\u2014\u2014\u5199\u4e00\u4e2a\u811a\u672c&#xff0c;\u8ba9\u7535\u8111\u81ea\u5df1\u5e72\u6d3b&#xff0c;\u5c31\u50cf\u7ed9\u53a8\u5e08\u4e00\u4efd\u83dc\u8c31&#xff0c;\u4ed6\u7167\u7740\u505a\u5c31\u884c\u3002<\/p>\n<p>\u5b66\u5b8c\u672c\u7ae0&#xff0c;\u4f60\u5c31\u80fd\u8ba9Linux\u66ff\u4f60\u5b8c\u6210\u91cd\u590d\u6027\u7684\u5de5\u4f5c&#xff0c;\u4ece\u6b64\u544a\u522b\u673a\u68b0\u52b3\u52a8&#xff0c;\u771f\u6b63\u4f53\u9a8c\u5230&#034;\u61d2\u4eba\u6539\u53d8\u4e16\u754c&#034;\u7684\u4e50\u8da3\u3002<\/p>\n<hr \/>\n<h3>7.1 \u4ec0\u4e48\u662f Shell<\/h3>\n<h4>7.1.1 \u5148\u8bb2\u4e2a\u6545\u4e8b&#xff1a;\u4f60\u3001\u7ffb\u8bd1\u5b98\u548c\u5916\u56fd\u4eba<\/h4>\n<p>\u60f3\u8c61\u4e00\u4e0b\u8fd9\u6837\u4e00\u4e2a\u573a\u666f&#xff1a;<\/p>\n<p>\u4f60\u53ea\u61c2\u4e2d\u6587&#xff0c;\u73b0\u5728\u9762\u524d\u7ad9\u7740\u4e00\u4e2a\u53ea\u61c2\u82f1\u8bed\u7684\u5916\u56fd\u4eba\u3002\u4f60\u60f3\u8ba9\u4ed6\u5e2e\u4f60\u642c\u4e2a\u7bb1\u5b50&#xff0c;\u4f46\u4f60\u8bf4\u7684\u4e2d\u6587\u4ed6\u542c\u4e0d\u61c2&#xff0c;\u4ed6\u8bf4\u7684\u82f1\u8bed\u4f60\u4e5f\u542c\u4e0d\u61c2\u3002\u600e\u4e48\u529e&#xff1f;<\/p>\n<p>\u8fd9\u65f6\u5019\u4f60\u9700\u8981\u4e00\u4e2a&#034;\u7ffb\u8bd1\u5b98&#034;\u3002\u4f60\u5bf9\u7ffb\u8bd1\u5b98\u8bf4\u4e2d\u6587&#034;\u8bf7\u5e2e\u6211\u642c\u4e00\u4e0b\u7bb1\u5b50&#034;&#xff0c;\u7ffb\u8bd1\u5b98\u628a\u5b83\u7ffb\u6210\u82f1\u8bed&#034;Please help me move the box&#034;&#xff0c;\u5916\u56fd\u4eba\u542c\u61c2\u4e86&#xff0c;\u5c31\u628a\u7bb1\u5b50\u642c\u8d70\u4e86\u3002<\/p>\n<p>\u5728Linux\u7684\u4e16\u754c\u91cc&#xff0c;\u4f60\u5c31\u662f\u90a3\u4e2a&#034;\u53ea\u61c2\u4e2d\u6587\u7684\u4eba&#034;&#xff0c;Linux\u5185\u6838\u5c31\u662f\u90a3\u4e2a&#034;\u53ea\u61c2\u82f1\u8bed\u7684\u5916\u56fd\u4eba&#034;&#xff0c;\u800cShell\u5c31\u662f\u4f60\u4e2d\u95f4\u7684\u7ffb\u8bd1\u5b98\u3002<\/p>\n<ul>\n<li>\u4f60&#xff1a;\u901a\u8fc7\u952e\u76d8\u8f93\u5165\u547d\u4ee4&#xff0c;\u6bd4\u5982 ls\u3001cd\u3001mkdir<\/li>\n<li>Shell&#xff08;\u7ffb\u8bd1\u5b98&#xff09;&#xff1a;\u63a5\u6536\u4f60\u8f93\u5165\u7684\u547d\u4ee4&#xff0c;\u7ffb\u8bd1\u6210\u5185\u6838\u80fd\u542c\u61c2\u7684&#034;\u673a\u5668\u8bed\u8a00&#034;&#xff0c;\u4ea4\u7ed9\u5185\u6838\u53bb\u6267\u884c<\/li>\n<li>Linux\u5185\u6838&#xff08;\u5916\u56fd\u4eba&#xff09;&#xff1a;\u771f\u6b63\u5e72\u6d3b\u7684&#xff0c;\u5e2e\u4f60\u521b\u5efa\u6587\u4ef6\u5939\u3001\u8bfb\u53d6\u6587\u4ef6\u3001\u7ba1\u7406\u5185\u5b58<\/li>\n<\/ul>\n<h4>7.1.2 Shell \u7684\u51c6\u786e\u5b9a\u4e49<\/h4>\n<p>\u7528\u7a0d\u5fae\u6b63\u5f0f\u4e00\u70b9\u7684\u8bdd\u6765\u8bf4&#xff1a;<\/p>\n<p>Shell \u662f\u4e00\u4e2a\u547d\u4ee4\u884c\u89e3\u91ca\u5668&#xff08;Command Interpreter&#xff09;&#xff0c;\u5b83\u4f4d\u4e8e\u7528\u6237\u548c\u64cd\u4f5c\u7cfb\u7edf\u5185\u6838\u4e4b\u95f4&#xff0c;\u8d1f\u8d23\u63a5\u6536\u7528\u6237\u8f93\u5165\u7684\u547d\u4ee4&#xff0c;\u5c06\u5176\u89e3\u91ca\u5e76\u4f20\u9012\u7ed9\u5185\u6838\u6267\u884c&#xff0c;\u7136\u540e\u628a\u6267\u884c\u7ed3\u679c\u8fd4\u56de\u7ed9\u7528\u6237\u3002<\/p>\n<p>\u6253\u4e2a\u6bd4\u65b9&#xff1a;<\/p>\n<ul>\n<li>\u5185\u6838\u5c31\u50cf\u662f\u6c7d\u8f66\u7684\u53d1\u52a8\u673a&#xff0c;\u662f\u771f\u6b63\u7684\u52a8\u529b\u6765\u6e90&#xff0c;\u4f46\u5b83\u4e0d\u4f1a\u81ea\u5df1\u8fd0\u8f6c<\/li>\n<li>Shell\u5c31\u50cf\u662f\u65b9\u5411\u76d8\u548c\u6cb9\u95e8&#xff0c;\u4f60\u901a\u8fc7\u5b83\u6765\u63a7\u5236\u53d1\u52a8\u673a<\/li>\n<li>\u4f60\u5c31\u662f\u9a7e\u9a76\u5458&#xff0c;\u51b3\u5b9a\u8981\u53bb\u54ea\u91cc<\/li>\n<\/ul>\n<h4>7.1.3 Shell \u548c\u56fe\u5f62\u754c\u9762\u6709\u4ec0\u4e48\u533a\u522b<\/h4>\n<p>\u4f60\u53ef\u80fd\u4f1a\u95ee&#xff1a;\u90a3\u6211\u5e73\u65f6\u7528\u9f20\u6807\u70b9\u51fb\u6587\u4ef6\u5939\u3001\u53cc\u51fb\u6253\u5f00\u6587\u4ef6&#xff0c;\u90a3\u4e0d\u4e5f\u662f\u5728\u64cd\u4f5c\u7535\u8111\u5417&#xff1f;\u8fd9\u8ddfShell\u6709\u4ec0\u4e48\u5173\u7cfb&#xff1f;<\/p>\n<p>\u597d\u95ee\u9898&#xff01;\u8fd9\u91cc\u6709\u4e24\u79cd&#034;\u7ffb\u8bd1\u5b98&#034;&#xff1a;<\/p>\n<li>\n<p>\u56fe\u5f62\u754c\u9762&#xff08;GUI&#xff09;&#xff1a;\u5c31\u662f\u4f60\u5e73\u65f6\u770b\u5230\u7684\u7a97\u53e3\u3001\u56fe\u6807\u3001\u6309\u94ae\u3002\u4f60\u7528\u9f20\u6807\u70b9\u51fb&#xff0c;\u5b83\u5e2e\u4f60\u7ffb\u8bd1\u6210\u547d\u4ee4\u3002\u5c31\u50cf\u4e00\u4e2a\u4f1a\u624b\u8bed\u7684\u7ffb\u8bd1\u5b98&#xff0c;\u7528\u624b\u52bf\u4ea4\u6d41\u3002<\/p>\n<\/li>\n<li>\n<p>\u547d\u4ee4\u884c\u754c\u9762&#xff08;CLI \/ Shell&#xff09;&#xff1a;\u5c31\u662f\u4f60\u6572\u5b57\u7684\u90a3\u79cd\u9ed1\u5e95\u767d\u5b57\u7684\u7a97\u53e3\u3002\u4f60\u7528\u952e\u76d8\u8f93\u5165\u6587\u5b57\u547d\u4ee4\u3002\u5c31\u50cf\u4e00\u4e2a\u7528\u5634\u5df4\u8bf4\u8bdd\u7684\u7ffb\u8bd1\u5b98&#xff0c;\u7528\u8bed\u8a00\u4ea4\u6d41\u3002<\/p>\n<\/li>\n<p>\u4e24\u79cd\u65b9\u5f0f\u90fd\u80fd\u8fbe\u5230\u76ee\u7684&#xff0c;\u4f46Shell\u6709\u51e0\u4e2a\u5de8\u5927\u7684\u4f18\u52bf&#xff1a;<\/p>\n<ul>\n<li>\u6548\u7387\u9ad8&#xff1a;\u4e00\u884c\u547d\u4ee4\u80fd\u5b8c\u6210\u56fe\u5f62\u754c\u9762\u8981\u70b9\u5341\u51e0\u6b21\u7684\u64cd\u4f5c<\/li>\n<li>\u53ef\u81ea\u52a8\u5316&#xff1a;\u53ef\u4ee5\u628a\u5f88\u591a\u547d\u4ee4\u5199\u6210\u4e00\u4e2a\u6587\u4ef6&#xff0c;\u8ba9\u7535\u8111\u81ea\u52a8\u6267\u884c<\/li>\n<li>\u8fdc\u7a0b\u7ba1\u7406\u65b9\u4fbf&#xff1a;\u901a\u8fc7SSH\u8fde\u63a5\u670d\u52a1\u5668\u65f6&#xff0c;\u901a\u5e38\u53ea\u80fd\u7528\u547d\u4ee4\u884c<\/li>\n<li>\u529f\u80fd\u66f4\u5f3a\u5927&#xff1a;\u5f88\u591a\u9ad8\u7ea7\u64cd\u4f5c\u56fe\u5f62\u754c\u9762\u6839\u672c\u505a\u4e0d\u5230<\/li>\n<\/ul>\n<h4>7.1.4 \u5e38\u89c1\u7684 Shell \u6709\u54ea\u4e9b<\/h4>\n<p>\u5c31\u50cf\u7ffb\u8bd1\u5b98\u6709\u5f88\u591a\u79cd&#xff08;\u82f1\u8bed\u7ffb\u8bd1\u3001\u6cd5\u8bed\u7ffb\u8bd1\u3001\u65e5\u8bed\u7ffb\u8bd1&#xff09;&#xff0c;Shell\u4e5f\u6709\u4e0d\u540c\u7684&#034;\u54c1\u79cd&#034;&#xff1a;<\/p>\n<table>\n<tr>Shell\u540d\u79f0\u5168\u79f0\u7279\u70b9<\/tr>\n<tbody>\n<tr>\n<td>sh<\/td>\n<td>Bourne Shell<\/td>\n<td>\u6700\u53e4\u8001\u7684Shell&#xff0c;\u51e0\u4e4e\u6240\u6709Unix\u7cfb\u7edf\u90fd\u6709<\/td>\n<\/tr>\n<tr>\n<td>bash<\/td>\n<td>Bourne Again Shell<\/td>\n<td>sh\u7684\u5347\u7ea7\u7248&#xff0c;Linux\u9ed8\u8ba4Shell&#xff0c;\u6700\u5e38\u7528<\/td>\n<\/tr>\n<tr>\n<td>csh<\/td>\n<td>C Shell<\/td>\n<td>\u8bed\u6cd5\u7c7b\u4f3cC\u8bed\u8a00&#xff0c;BSD\u7cfb\u7edf\u5e38\u7528<\/td>\n<\/tr>\n<tr>\n<td>tcsh<\/td>\n<td>TENEX C Shell<\/td>\n<td>csh\u7684\u589e\u5f3a\u7248<\/td>\n<\/tr>\n<tr>\n<td>zsh<\/td>\n<td>Z Shell<\/td>\n<td>\u529f\u80fd\u6700\u5f3a&#xff0c;\u652f\u6301\u4e3b\u9898\u548c\u63d2\u4ef6&#xff0c;Mac\u9ed8\u8ba4<\/td>\n<\/tr>\n<tr>\n<td>fish<\/td>\n<td>Friendly Interactive Shell<\/td>\n<td>\u5bf9\u65b0\u624b\u6700\u53cb\u597d&#xff0c;\u5f00\u7bb1\u5373\u7528<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5176\u4e2d&#xff0c;bash \u662f\u6700\u91cd\u8981\u7684&#xff0c;\u56e0\u4e3a&#xff1a;<\/p>\n<li>\u51e0\u4e4e\u6240\u6709Linux\u53d1\u884c\u7248\u9ed8\u8ba4\u90fd\u7528bash<\/li>\n<li>\u5927\u90e8\u5206\u6559\u7a0b\u548c\u6587\u6863\u90fd\u57fa\u4e8ebash<\/li>\n<li>\u4f60\u9762\u8bd5\u65f6\u88ab\u95ee\u7684\u4e5f\u662fbash<\/li>\n<p>\u6240\u4ee5\u672c\u7ae0\u6211\u4eec\u91cd\u70b9\u5b66\u4e60bash\u3002<\/p>\n<h4>7.1.5 \u67e5\u770b\u4f60\u7684 Shell<\/h4>\n<p>\u6253\u5f00\u7ec8\u7aef&#xff0c;\u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4\u53ef\u4ee5\u67e5\u770b\u4f60\u5f53\u524d\u4f7f\u7528\u7684Shell&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token environment constant\">$SHELL<\/span><\/p>\n<p>\u8f93\u51fa\u53ef\u80fd\u7c7b\u4f3c\u8fd9\u6837&#xff1a;<\/p>\n<p>\/bin\/bash<\/p>\n<p>\u8fd9\u8bf4\u660e\u4f60\u5f53\u524d\u7528\u7684\u662fbash\u3002<\/p>\n<p>\u5982\u679c\u4f60\u60f3\u77e5\u9053\u7cfb\u7edf\u91cc\u88c5\u4e86\u54ea\u4e9bShell&#xff0c;\u53ef\u4ee5\u8f93\u5165&#xff1a;<\/p>\n<p><span class=\"token function\">cat<\/span> \/etc\/shells<\/p>\n<p>\u8f93\u51fa\u7c7b\u4f3c&#xff1a;<\/p>\n<p>\/bin\/sh<br \/>\n\/bin\/bash<br \/>\n\/usr\/bin\/sh<br \/>\n\/usr\/bin\/bash<br \/>\n\/bin\/zsh<\/p>\n<p>\u5982\u679c\u4f60\u60f3\u4e34\u65f6\u5207\u6362\u5230\u522b\u7684Shell\u8bd5\u8bd5&#xff0c;\u76f4\u63a5\u8f93\u5165\u5b83\u7684\u540d\u5b57\u5c31\u884c&#xff0c;\u6bd4\u5982\u8f93\u5165 zsh \u5c31\u5207\u6362\u5230zsh&#xff0c;\u8f93\u5165 exit \u9000\u56de\u539f\u6765\u7684Shell\u3002<\/p>\n<h4>7.1.6 Shell \u811a\u672c\u662f\u4ec0\u4e48<\/h4>\n<p>\u524d\u9762\u6211\u4eec\u8bf4\u7684\u90fd\u662f&#034;\u4ea4\u4e92\u5f0fShell&#034;\u2014\u2014\u4f60\u8f93\u4e00\u6761\u547d\u4ee4&#xff0c;\u5b83\u6267\u884c\u4e00\u6761\u3002\u8fd9\u5c31\u50cf\u4f60\u53e3\u8ff0\u83dc\u8c31&#xff0c;\u53a8\u5e08\u505a\u4e00\u9053\u83dc\u3002<\/p>\n<p>\u4f46\u5982\u679c\u4f60\u60f3\u4e00\u6b21\u505a\u4e00\u684c\u83dc\u5462&#xff1f;\u96be\u9053\u8981\u4e00\u9053\u4e00\u9053\u53e3\u8ff0&#xff1f;\u5f53\u7136\u4e0d\u7528&#xff0c;\u4f60\u628a\u83dc\u8c31\u5199\u5728\u7eb8\u4e0a&#xff0c;\u4ea4\u7ed9\u53a8\u5e08&#xff0c;\u4ed6\u7167\u7740\u7eb8\u4e00\u5f20\u5f20\u505a\u5c31\u884c\u3002<\/p>\n<p>Shell\u811a\u672c\u5c31\u662f\u8fd9\u4e2a&#034;\u5199\u5728\u7eb8\u4e0a\u7684\u83dc\u8c31&#034;\u3002<\/p>\n<p>\u628a\u4e00\u7cfb\u5217\u547d\u4ee4\u5199\u5230\u4e00\u4e2a\u6587\u672c\u6587\u4ef6\u91cc&#xff0c;\u7136\u540e\u8ba9Shell\u4e00\u6b21\u6027\u6267\u884c\u8fd9\u4e2a\u6587\u4ef6\u91cc\u7684\u6240\u6709\u547d\u4ee4&#xff0c;\u8fd9\u4e2a\u6587\u4ef6\u5c31\u53ebShell\u811a\u672c&#xff08;\u4e5f\u53ebShell\u811a\u672c\u7a0b\u5e8f&#xff09;\u3002<\/p>\n<p>\u6bd4\u5982\u4e0b\u9762\u5c31\u662f\u4e00\u4e2a\u6700\u7b80\u5355\u7684Shell\u811a\u672c&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u8fd9\u662f\u4e00\u4e2a\u6253\u62db\u547c\u7684\u811a\u672c<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u597d&#xff0c;\u4e16\u754c&#xff01;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4eca\u5929\u662f&#xff1a;&#034;<\/span><br \/>\n<span class=\"token function\">date<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5f53\u524d\u767b\u5f55\u7528\u6237\u662f&#xff1a;&#034;<\/span><br \/>\n<span class=\"token function\">whoami<\/span><\/p>\n<p>\u628a\u4e0a\u9762\u8fd9\u6bb5\u4ee3\u7801\u4fdd\u5b58\u5230\u4e00\u4e2a\u6587\u4ef6\u91cc&#xff08;\u6bd4\u5982 hello.sh&#xff09;&#xff0c;\u7136\u540e\u8fd0\u884c\u5b83&#xff0c;\u5b83\u5c31\u4f1a\u4f9d\u6b21\u6267\u884c\u91cc\u9762\u7684\u6bcf\u4e00\u6761\u547d\u4ee4\u3002<\/p>\n<p>\u8fd9\u5c31\u662fShell\u811a\u672c\u7684\u9b54\u529b\u2014\u2014\u4f60\u5199\u4e00\u6b21&#xff0c;\u53ef\u4ee5\u8fd0\u884c\u65e0\u6570\u6b21\u3002<\/p>\n<hr \/>\n<h3>7.2 Bash Shell \u57fa\u7840<\/h3>\n<h4>7.2.1 \u521b\u5efa\u4f60\u7684\u7b2c\u4e00\u4e2a\u811a\u672c<\/h4>\n<p>\u7eb8\u4e0a\u5f97\u6765\u7ec8\u89c9\u6d45&#xff0c;\u6211\u4eec\u9a6c\u4e0a\u52a8\u624b\u5199\u7b2c\u4e00\u4e2a\u811a\u672c\u3002<\/p>\n<p>\u7b2c\u4e00\u6b65&#xff1a;\u521b\u5efa\u811a\u672c\u6587\u4ef6<\/p>\n<p>\u6253\u5f00\u7ec8\u7aef&#xff0c;\u8f93\u5165&#xff1a;<\/p>\n<p><span class=\"token function\">vim<\/span> first.sh<\/p>\n<p>\u8fd9\u4f1a\u7528vim\u7f16\u8f91\u5668\u6253\u5f00&#xff08;\u6216\u521b\u5efa&#xff09;\u4e00\u4e2a\u540d\u4e3a first.sh \u7684\u6587\u4ef6\u3002\u6587\u4ef6\u540d\u4f60\u53ef\u4ee5\u968f\u4fbf\u8d77&#xff0c;\u4f46\u4e60\u60ef\u4e0aShell\u811a\u672c\u7528 .sh \u540e\u7f00&#xff0c;\u5c31\u50cfWord\u6587\u6863\u7528 .docx&#xff0c;\u56fe\u7247\u7528 .jpg \u4e00\u6837&#xff0c;\u65b9\u4fbf\u8bc6\u522b\u3002<\/p>\n<p>\u7b2c\u4e8c\u6b65&#xff1a;\u8f93\u5165\u5185\u5bb9<\/p>\n<p>\u6309 i \u8fdb\u5165\u63d2\u5165\u6a21\u5f0f&#xff0c;\u8f93\u5165\u4ee5\u4e0b\u5185\u5bb9&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u8fd9\u662f\u6211\u7684\u7b2c\u4e00\u4e2aShell\u811a\u672c<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;Hello World!&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6211\u7684\u7b2c\u4e00\u4e2a\u811a\u672c\u8fd0\u884c\u6210\u529f\u4e86&#xff01;&#034;<\/span><\/p>\n<p>\u8f93\u5165\u5b8c\u540e&#xff0c;\u6309 Esc&#xff0c;\u7136\u540e\u8f93\u5165 :wq \u4fdd\u5b58\u9000\u51fa\u3002<\/p>\n<p>\u7b2c\u4e09\u6b65&#xff1a;\u7ed9\u811a\u672c\u52a0\u6267\u884c\u6743\u9650<\/p>\n<p>\u5728Linux\u91cc&#xff0c;\u65b0\u5efa\u7684\u6587\u4ef6\u9ed8\u8ba4\u662f\u6ca1\u6709&#034;\u6267\u884c\u6743\u9650&#034;\u7684\u3002\u5c31\u50cf\u4f60\u5199\u4e86\u4e00\u4efd\u83dc\u8c31&#xff0c;\u4f46\u53a8\u5e08\u4e0d\u8ba9\u4f60\u8d34\u5728\u53a8\u623f\u5899\u4e0a&#xff0c;\u4f60\u5f97\u5148\u83b7\u5f97\u8bb8\u53ef\u3002<\/p>\n<p>\u8f93\u5165\u4ee5\u4e0b\u547d\u4ee4\u8d4b\u4e88\u6267\u884c\u6743\u9650&#xff1a;<\/p>\n<p><span class=\"token function\">chmod<\/span> &#043;x first.sh<\/p>\n<p>chmod \u662f&#034;change mode&#034;&#xff08;\u6539\u53d8\u6a21\u5f0f&#xff09;\u7684\u7f29\u5199&#xff0c;&#043;x \u8868\u793a&#034;\u52a0\u4e0a\u6267\u884c&#xff08;eXecute&#xff09;\u6743\u9650&#034;\u3002<\/p>\n<p>\u7b2c\u56db\u6b65&#xff1a;\u8fd0\u884c\u811a\u672c<\/p>\n<p>.\/first.sh<\/p>\n<p>\u5982\u679c\u4f60\u770b\u5230\u4e0b\u9762\u7684\u8f93\u51fa&#xff0c;\u606d\u559c\u4f60&#xff0c;\u4f60\u7684\u7b2c\u4e00\u4e2a\u811a\u672c\u8fd0\u884c\u6210\u529f\u4e86&#xff01;<\/p>\n<p>Hello World!<br \/>\n\u6211\u7684\u7b2c\u4e00\u4e2a\u811a\u672c\u8fd0\u884c\u6210\u529f\u4e86&#xff01;<\/p>\n<h4>7.2.2 \u7406\u89e3\u811a\u672c\u7684\u7ed3\u6784<\/h4>\n<p>\u6211\u4eec\u6765\u9010\u884c\u5206\u6790\u521a\u624d\u90a3\u4e2a\u811a\u672c&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><\/p>\n<p>\u8fd9\u4e00\u884c\u53ebShebang&#xff08;\u8bfb\u4f5c&#034;\u5e0c\u90a6&#034;&#xff09;&#xff0c;\u5b83\u662f # \u548c ! \u4e24\u4e2a\u7b26\u53f7\u7684\u7ec4\u5408\u3002\u5b83\u7684\u4f5c\u7528\u662f\u544a\u8bc9\u7cfb\u7edf&#xff1a;\u201c\u8bf7\u7528 \/bin\/bash \u8fd9\u4e2a\u7a0b\u5e8f\u6765\u89e3\u91ca\u6267\u884c\u672c\u6587\u4ef6\u201d\u3002<\/p>\n<p>\u5c31\u50cf\u4f60\u5199\u4e86\u4e00\u4efd\u6cd5\u8bed\u83dc\u8c31&#xff0c;\u5728\u6700\u4e0a\u9762\u6807\u6ce8&#034;\u672c\u83dc\u8c31\u7528\u6cd5\u8bed\u9605\u8bfb&#034;&#xff0c;\u8fd9\u6837\u53a8\u5e08\u4e00\u770b\u5c31\u77e5\u9053\u8be5\u600e\u4e48\u8bfb\u3002<\/p>\n<p>\u6ce8\u610f&#xff1a;Shebang\u5fc5\u987b\u662f\u6587\u4ef6\u7684\u7b2c\u4e00\u884c&#xff0c;\u800c\u4e14 # \u548c ! \u4e4b\u95f4\u4e0d\u80fd\u6709\u7a7a\u683c\u3002<\/p>\n<p><span class=\"token comment\"># \u8fd9\u662f\u6211\u7684\u7b2c\u4e00\u4e2aShell\u811a\u672c<\/span><\/p>\n<p>\u8fd9\u4e00\u884c\u662f\u6ce8\u91ca\u3002\u4ee5 # \u5f00\u5934\u7684\u884c\u4f1a\u88abShell\u5ffd\u7565&#xff0c;\u4e0d\u6267\u884c\u3002\u5b83\u7684\u4f5c\u7528\u662f\u7ed9\u4eba\u770b\u7684&#xff0c;\u7528\u6765\u89e3\u91ca\u4ee3\u7801\u7684\u4f5c\u7528\u3002\u5199\u6ce8\u91ca\u662f\u4e00\u4e2a\u597d\u4e60\u60ef&#xff0c;\u5c31\u50cf\u5728\u4e66\u672c\u4e0a\u505a\u6279\u6ce8&#xff0c;\u5e2e\u81ea\u5df1&#xff08;\u548c\u540c\u4e8b&#xff09;\u7406\u89e3\u4ee3\u7801\u3002<\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;Hello World!&#034;<\/span><\/p>\n<p>echo \u662f&#034;\u56de\u58f0&#034;\u7684\u610f\u601d&#xff0c;\u5b83\u7684\u4f5c\u7528\u662f\u628a\u540e\u9762\u7684\u5185\u5bb9&#034;\u558a&#034;\u51fa\u6765\u2014\u2014\u4e5f\u5c31\u662f\u8f93\u51fa\u5230\u5c4f\u5e55\u4e0a\u3002\u5c31\u50cf\u4f60\u5728\u5c71\u8c37\u91cc\u558a&#034;\u4f60\u597d&#034;&#xff0c;\u5c71\u8c37\u56de\u5e94\u4f60&#034;\u4f60\u597d&#034;\u4e00\u6837\u3002<\/p>\n<h4>7.2.3 \u811a\u672c\u7684\u51e0\u79cd\u8fd0\u884c\u65b9\u5f0f<\/h4>\n<p>\u9664\u4e86\u521a\u624d\u7684 .\/first.sh&#xff0c;\u8fd8\u6709\u5176\u4ed6\u51e0\u79cd\u8fd0\u884c\u811a\u672c\u7684\u65b9\u5f0f&#xff0c;\u5404\u6709\u7528\u9014&#xff1a;<\/p>\n<p>\u65b9\u5f0f\u4e00&#xff1a;\u76f8\u5bf9\u8def\u5f84\u8fd0\u884c&#xff08;\u6700\u5e38\u7528&#xff09;<\/p>\n<p>.\/first.sh<\/p>\n<p>\u9700\u8981\u5148 chmod &#043;x \u52a0\u6267\u884c\u6743\u9650\u3002.\/ \u8868\u793a&#034;\u5f53\u524d\u76ee\u5f55\u4e0b&#034;\u3002<\/p>\n<p>\u65b9\u5f0f\u4e8c&#xff1a;\u7edd\u5bf9\u8def\u5f84\u8fd0\u884c<\/p>\n<p>\/home\/user\/first.sh<\/p>\n<p>\u540c\u6837\u9700\u8981\u6267\u884c\u6743\u9650\u3002\u597d\u5904\u662f\u4e0d\u7ba1\u4f60\u5728\u54ea\u4e2a\u76ee\u5f55\u90fd\u80fd\u8fd0\u884c\u3002<\/p>\n<p>\u65b9\u5f0f\u4e09&#xff1a;\u7528bash\u547d\u4ee4\u8fd0\u884c&#xff08;\u4e0d\u9700\u8981\u6267\u884c\u6743\u9650&#xff09;<\/p>\n<p><span class=\"token function\">bash<\/span> first.sh<\/p>\n<p>\u8fd9\u79cd\u65b9\u5f0f\u76f4\u63a5\u544a\u8bc9\u7cfb\u7edf&#034;\u7528bash\u6765\u8fd0\u884c\u8fd9\u4e2a\u6587\u4ef6&#034;&#xff0c;\u6240\u4ee5\u4e0d\u9700\u8981\u52a0\u6267\u884c\u6743\u9650&#xff0c;\u4e5f\u4e0d\u9700\u8981Shebang\u884c\u3002\u9002\u5408\u8c03\u8bd5\u7684\u65f6\u5019\u7528\u3002<\/p>\n<p>\u65b9\u5f0f\u56db&#xff1a;\u7528source\u6216\u70b9\u53f7\u8fd0\u884c<\/p>\n<p><span class=\"token builtin class-name\">source<\/span> first.sh<br \/>\n<span class=\"token comment\"># \u6216\u8005<\/span><br \/>\n<span class=\"token builtin class-name\">.<\/span> first.sh<\/p>\n<p>\u8fd9\u79cd\u65b9\u5f0f\u7684\u7279\u6b8a\u4e4b\u5904\u5728\u4e8e&#xff1a;\u5b83\u5728\u5f53\u524dShell\u73af\u5883\u4e2d\u6267\u884c\u811a\u672c&#xff0c;\u800c\u4e0d\u662f\u5f00\u4e00\u4e2a\u65b0\u7684\u5b50Shell\u3002<\/p>\n<p>\u4ec0\u4e48\u610f\u601d\u5462&#xff1f;\u6253\u4e2a\u6bd4\u65b9&#xff1a;<\/p>\n<ul>\n<li>\u524d\u4e09\u79cd\u65b9\u5f0f\u5c31\u50cf\u4f60\u53bb\u670b\u53cb\u5bb6\u505a\u996d\u2014\u2014\u7528\u7684\u662f\u670b\u53cb\u5bb6\u7684\u53a8\u623f&#xff08;\u5b50Shell&#xff09;&#xff0c;\u4f60\u505a\u5b8c\u4e86\u51fa\u6765&#xff0c;\u670b\u53cb\u5bb6\u7684\u53a8\u623f\u6709\u4ec0\u4e48\u53d8\u5316\u4f60\u5e26\u8d70\u4e0d\u4e86\u3002<\/li>\n<li>source\u65b9\u5f0f\u5c31\u50cf\u5728\u4f60\u81ea\u5df1\u5bb6\u505a\u996d\u2014\u2014\u7528\u7684\u662f\u4f60\u81ea\u5df1\u7684\u53a8\u623f&#xff08;\u5f53\u524dShell&#xff09;&#xff0c;\u505a\u7684\u83dc\u548c\u4ea7\u751f\u7684\u5f71\u54cd\u90fd\u5728\u4f60\u81ea\u5df1\u5bb6\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u79cd\u533a\u522b\u5728\u540e\u9762\u8bb2\u53d8\u91cf\u7684\u65f6\u5019\u4f1a\u5f88\u91cd\u8981\u3002<\/p>\n<h4>7.2.4 \u811a\u672c\u7684\u57fa\u672c\u4e66\u5199\u89c4\u8303<\/h4>\n<p>\u5199Shell\u811a\u672c\u5c31\u50cf\u5199\u4f5c\u6587&#xff0c;\u6709\u4e00\u4e9b\u683c\u5f0f\u4e0a\u7684&#034;\u89c4\u77e9&#034;&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\">#&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\"># \u811a\u672c\u540d\u79f0&#xff1a;backup.sh<\/span><br \/>\n<span class=\"token comment\"># \u811a\u672c\u529f\u80fd&#xff1a;\u5907\u4efd\u91cd\u8981\u6587\u4ef6<\/span><br \/>\n<span class=\"token comment\"># \u4f5c\u8005&#xff1a;\u5f20\u4e09<\/span><br \/>\n<span class=\"token comment\"># \u521b\u5efa\u65e5\u671f&#xff1a;2024-01-15<\/span><br \/>\n<span class=\"token comment\"># \u4fee\u6539\u8bb0\u5f55&#xff1a;\u65e0<\/span><br \/>\n<span class=\"token comment\">#&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;&#8212;&#8211; \u7b2c\u4e00\u90e8\u5206&#xff1a;\u5b9a\u4e49\u53d8\u91cf &#8212;&#8212;&#8211;<\/span><br \/>\n<span class=\"token assign-left variable\">BACKUP_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/backup&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">SOURCE_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/home\/user\/data&#034;<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;&#8212;&#8211; \u7b2c\u4e8c\u90e8\u5206&#xff1a;\u5f00\u59cb\u5907\u4efd &#8212;&#8212;&#8211;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5f00\u59cb\u5907\u4efd&#8230;&#034;<\/span><br \/>\n<span class=\"token function\">mkdir<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token variable\">$BACKUP_DIR<\/span><br \/>\n<span class=\"token function\">cp<\/span> <span class=\"token parameter variable\">-r<\/span> <span class=\"token variable\">$SOURCE_DIR<\/span> <span class=\"token variable\">$BACKUP_DIR<\/span>\/<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5907\u4efd\u5b8c\u6210&#xff01;&#034;<\/span><\/p>\n<p>\u6ce8\u610f\u51e0\u4e2a\u8981\u70b9&#xff1a;<\/p>\n<li>\u7b2c\u4e00\u884c\u4e00\u5b9a\u662fShebang&#xff1a;#!\/bin\/bash<\/li>\n<li>\u591a\u5199\u6ce8\u91ca&#xff1a;\u89e3\u91ca\u4ee3\u7801\u7684\u4f5c\u7528&#xff0c;\u65b9\u4fbf\u65e5\u540e\u7ef4\u62a4<\/li>\n<li>\u9002\u5f53\u7559\u7a7a\u884c&#xff1a;\u8ba9\u4ee3\u7801\u770b\u8d77\u6765\u4e0d\u62e5\u6324&#xff0c;\u6709\u5c42\u6b21\u611f<\/li>\n<li>\u53d8\u91cf\u540d\u7528\u5927\u5199&#xff1a;\u8fd9\u662f\u7ea6\u5b9a\u4fd7\u6210\u7684\u4e60\u60ef&#xff0c;\u65b9\u4fbf\u533a\u5206\u53d8\u91cf\u548c\u547d\u4ee4<\/li>\n<li>\u4ee3\u7801\u5bf9\u9f50&#xff1a;\u63d0\u9ad8\u53ef\u8bfb\u6027<\/li>\n<h4>7.2.5 \u4e00\u4e2a\u7a0d\u5fae\u590d\u6742\u4e00\u70b9\u7684\u793a\u4f8b<\/h4>\n<p>\u6765\u611f\u53d7\u4e00\u4e0bShell\u811a\u672c\u80fd\u505a\u4ec0\u4e48\u3002\u4e0b\u9762\u8fd9\u4e2a\u811a\u672c\u53ef\u4ee5\u663e\u793a\u7cfb\u7edf\u7684\u57fa\u672c\u4fe1\u606f&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u663e\u793a\u7cfb\u7edf\u57fa\u672c\u4fe1\u606f<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u7cfb\u7edf\u4fe1\u606f\u62a5\u544a &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u4e3b\u673a\u540d\u3011&#034;<\/span><br \/>\n<span class=\"token function\">hostname<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u7cfb\u7edf\u7248\u672c\u3011&#034;<\/span><br \/>\n<span class=\"token function\">cat<\/span> \/etc\/os-release <span class=\"token operator\">|<\/span> <span class=\"token function\">head<\/span> <span class=\"token parameter variable\">-n<\/span> <span class=\"token number\">5<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u5185\u6838\u7248\u672c\u3011&#034;<\/span><br \/>\n<span class=\"token function\">uname<\/span> <span class=\"token parameter variable\">-r<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010CPU\u4fe1\u606f\u3011&#034;<\/span><br \/>\nlscpu <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token string\">&#034;Model name&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u5185\u5b58\u4f7f\u7528\u60c5\u51b5\u3011&#034;<\/span><br \/>\n<span class=\"token function\">free<\/span> <span class=\"token parameter variable\">-h<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u78c1\u76d8\u4f7f\u7528\u60c5\u51b5\u3011&#034;<\/span><br \/>\n<span class=\"token function\">df<\/span> <span class=\"token parameter variable\">-h<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u5f53\u524d\u65f6\u95f4\u3011&#034;<\/span><br \/>\n<span class=\"token function\">date<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u62a5\u544a\u7ed3\u675f &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<p>\u4f60\u770b&#xff0c;\u53ea\u8981\u8fd0\u884c\u8fd9\u4e00\u4e2a\u811a\u672c&#xff0c;\u5c31\u80fd\u4e00\u6b21\u6027\u770b\u5230\u4e3b\u673a\u540d\u3001\u7cfb\u7edf\u7248\u672c\u3001\u5185\u6838\u7248\u672c\u3001CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u3001\u65f6\u95f4\u7b49\u4fe1\u606f&#xff0c;\u518d\u4e5f\u4e0d\u7528\u4e00\u6761\u4e00\u6761\u547d\u4ee4\u53bb\u6572\u4e86\u3002\u8fd9\u5c31\u662f\u811a\u672c\u7684\u9b45\u529b&#xff01;<\/p>\n<hr \/>\n<h3>7.3 \u53d8\u91cf\u5b9a\u4e49\u4e0e\u4f7f\u7528<\/h3>\n<h4>7.3.1 \u4ec0\u4e48\u662f\u53d8\u91cf\u2014\u2014\u7528\u76d2\u5b50\u6765\u7406\u89e3<\/h4>\n<p>\u8fd8\u8bb0\u5f97\u5c0f\u5b66\u6570\u5b66\u5417&#xff1f;\u8001\u5e08\u4f1a\u8bf4&#xff1a;\u201c\u8bbe x &#061; 5\u201d&#xff0c;\u7136\u540e\u95ee \u201cx &#043; 3 \u7b49\u4e8e\u591a\u5c11&#xff1f;\u201d<\/p>\n<p>\u8fd9\u91cc\u7684 x \u5c31\u662f\u4e00\u4e2a\u53d8\u91cf\u2014\u2014\u5b83\u5c31\u50cf\u4e00\u4e2a\u8d34\u4e86\u6807\u7b7e\u7684\u76d2\u5b50&#xff0c;\u4f60\u53ef\u4ee5\u5f80\u91cc\u9762\u653e\u4e1c\u897f&#xff08;\u8d4b\u503c&#xff09;&#xff0c;\u4e5f\u53ef\u4ee5\u62ff\u51fa\u6765\u7528&#xff08;\u5f15\u7528&#xff09;\u3002<\/p>\n<p>\u5728Shell\u4e2d&#xff0c;\u53d8\u91cf\u4e5f\u662f\u8fd9\u4e2a\u6982\u5ff5&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><\/p>\n<p>\u8fd9\u884c\u4ee3\u7801\u505a\u4e86\u4ec0\u4e48&#xff1f;\u5b83\u521b\u5efa\u4e86\u4e00\u4e2a\u540d\u53eb name \u7684\u76d2\u5b50&#xff0c;\u5728\u91cc\u9762\u653e\u4e86&#034;\u5f20\u4e09&#034;\u8fd9\u4e2a\u5b57\u7b26\u4e32\u3002<\/p>\n<p>\u4ee5\u540e\u4f60\u60f3\u7528&#034;\u5f20\u4e09&#034;\u7684\u65f6\u5019&#xff0c;\u4e0d\u7528\u6bcf\u6b21\u90fd\u5199\u4e00\u904d&#xff0c;\u53ea\u8981\u8bf4&#034;\u628aname\u76d2\u5b50\u91cc\u7684\u4e1c\u897f\u7ed9\u6211&#034;\u5c31\u884c&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$name<\/span><\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>\u5f20\u4e09<\/p>\n<h4>7.3.2 \u53d8\u91cf\u5b9a\u4e49\u7684\u89c4\u5219\u2014\u2014\u6700\u5bb9\u6613\u8e29\u7684\u5751<\/h4>\n<p>Shell\u91cc\u5b9a\u4e49\u53d8\u91cf\u6709\u4e00\u4e2a\u975e\u5e38\u5947\u8469\u7684\u89c4\u5219&#xff0c;\u5f88\u591a\u65b0\u624b\u90fd\u4f1a\u8e29\u5751&#xff1a;<\/p>\n<p>\u7b49\u53f7\u4e24\u8fb9\u7edd\u5bf9\u4e0d\u80fd\u6709\u7a7a\u683c&#xff01;<\/p>\n<p><span class=\"token comment\"># \u6b63\u786e\u5199\u6cd5&#xff08;\u7b49\u53f7\u4e24\u8fb9\u6ca1\u7a7a\u683c&#xff09;<\/span><br \/>\n<span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u9519\u8bef\u5199\u6cd51&#xff08;\u7b49\u53f7\u5de6\u8fb9\u6709\u7a7a\u683c&#xff09;<\/span><br \/>\nname <span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u9519\u8bef\u5199\u6cd52&#xff08;\u7b49\u53f7\u53f3\u8fb9\u6709\u7a7a\u683c&#xff09;<\/span><br \/>\n<span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u9519\u8bef\u5199\u6cd53&#xff08;\u4e24\u8fb9\u90fd\u6709\u7a7a\u683c&#xff09;<\/span><br \/>\nname <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><\/p>\n<p>\u4e3a\u4ec0\u4e48Shell\u5bf9\u7a7a\u683c\u8fd9\u4e48\u654f\u611f&#xff1f;\u56e0\u4e3a\u5728Shell\u91cc&#xff0c;\u7a7a\u683c\u662f&#034;\u547d\u4ee4\u548c\u53c2\u6570\u7684\u5206\u9694\u7b26&#034;\u3002<\/p>\n<ul>\n<li>name&#061;&#034;\u5f20\u4e09&#034; \u88ab\u7406\u89e3\u4e3a&#xff1a;\u7ed9\u53d8\u91cfname\u8d4b\u503c&#034;\u5f20\u4e09&#034;<\/li>\n<li>name &#061; &#034;\u5f20\u4e09&#034; \u88ab\u7406\u89e3\u4e3a&#xff1a;\u8fd0\u884c\u4e00\u4e2a\u540d\u53eb name \u7684\u547d\u4ee4&#xff0c;\u53c2\u6570\u662f &#061; \u548c &#034;\u5f20\u4e09&#034;<\/li>\n<\/ul>\n<p>\u8fd9\u8ddf\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00&#xff08;\u5982Python\u3001Java&#xff09;\u5b8c\u5168\u4e0d\u4e00\u6837&#xff0c;\u6240\u4ee5\u4ece\u5176\u4ed6\u8bed\u8a00\u8f6c\u8fc7\u6765\u7684\u540c\u5b66\u7279\u522b\u5bb9\u6613\u51fa\u9519\u3002<\/p>\n<p>\u8bb0\u4f4f\u8fd9\u4e2a\u53e3\u8bc0&#xff1a;Shell\u8d4b\u503c&#xff0c;\u7b49\u53f7\u8d34\u8138&#xff0c;\u4e0d\u8d34\u5c31\u62a5\u9519\u3002<\/p>\n<h4>7.3.3 \u53d8\u91cf\u7684\u547d\u540d\u89c4\u5219<\/h4>\n<p>\u53d8\u91cf\u540d\u4e0d\u80fd\u968f\u4fbf\u8d77&#xff0c;\u6709\u89c4\u77e9&#xff1a;<\/p>\n<li>\u53ea\u80fd\u7528\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u4e0b\u5212\u7ebf&#xff0c;\u4e0d\u80fd\u6709\u5176\u4ed6\u7b26\u53f7<\/li>\n<li>\u4e0d\u80fd\u4ee5\u6570\u5b57\u5f00\u5934<\/li>\n<li>\u533a\u5206\u5927\u5c0f\u5199&#xff08;Name\u548cname\u662f\u4e24\u4e2a\u4e0d\u540c\u7684\u53d8\u91cf&#xff09;<\/li>\n<li>\u4e0d\u80fd\u4f7f\u7528Shell\u5173\u952e\u5b57&#xff08;\u5982if\u3001for\u3001while\u7b49&#xff09;<\/li>\n<p><span class=\"token comment\"># \u5408\u6cd5\u7684\u53d8\u91cf\u540d<\/span><br \/>\n<span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">age<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">25<\/span><br \/>\n<span class=\"token assign-left variable\">_user<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;admin&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">my_home<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/home\/user&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">URL<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;https:\/\/www.example.com&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u975e\u6cd5\u7684\u53d8\u91cf\u540d<\/span><br \/>\n<span class=\"token assign-left variable\">2name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u674e\u56db&#034;<\/span>       <span class=\"token comment\"># \u4e0d\u80fd\u4ee5\u6570\u5b57\u5f00\u5934<\/span><br \/>\nmy-name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u738b\u4e94&#034;<\/span>     <span class=\"token comment\"># \u4e0d\u80fd\u7528\u51cf\u53f7<\/span><br \/>\nmy <span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u8d75\u516d&#034;<\/span>     <span class=\"token comment\"># \u4e0d\u80fd\u6709\u7a7a\u683c<\/span><br \/>\n<span class=\"token assign-left variable\">if<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6d4b\u8bd5&#034;<\/span>          <span class=\"token comment\"># \u4e0d\u80fd\u7528\u5173\u952e\u5b57<\/span><\/p>\n<h4>7.3.4 \u53d8\u91cf\u7684\u8d4b\u503c\u65b9\u5f0f<\/h4>\n<p>\u65b9\u5f0f\u4e00&#xff1a;\u76f4\u63a5\u8d4b\u503c<\/p>\n<p><span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">age<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">25<\/span><br \/>\n<span class=\"token assign-left variable\">height<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">175<\/span><\/p>\n<p>\u6ce8\u610f&#xff1a;\u7b49\u53f7\u53f3\u8fb9\u7684\u503c\u5982\u679c\u6709\u7a7a\u683c&#xff0c;\u5fc5\u987b\u7528\u5f15\u53f7\u5305\u8d77\u6765&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u6b63\u786e<\/span><br \/>\n<span class=\"token assign-left variable\">greeting<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u597d \u4e16\u754c&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u9519\u8bef&#xff08;Shell\u4f1a\u4ee5\u4e3a greeting&#061;&#034;\u4f60\u597d&#034; \u7136\u540e\u4e16\u754c\u662f\u53e6\u4e00\u4e2a\u547d\u4ee4&#xff09;<\/span><br \/>\n<span class=\"token assign-left variable\">greeting<\/span><span class=\"token operator\">&#061;<\/span>\u4f60\u597d \u4e16\u754c<\/p>\n<p>\u65b9\u5f0f\u4e8c&#xff1a;\u5c06\u547d\u4ee4\u7ed3\u679c\u8d4b\u7ed9\u53d8\u91cf<\/p>\n<p>\u7528\u53cd\u5f15\u53f7 &#096;\u547d\u4ee4&#096; \u6216\u8005 $() \u5305\u88f9\u547d\u4ee4&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u4e24\u79cd\u5199\u6cd5\u6548\u679c\u4e00\u6837<\/span><br \/>\n<span class=\"token assign-left variable\">current_date<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">&#096;<\/span><span class=\"token function\">date<\/span> &#043;%Y-%m-%d<span class=\"token variable\">&#096;<\/span><\/span><br \/>\n<span class=\"token assign-left variable\">current_date<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> &#043;%Y-%m-%d<span class=\"token variable\">)<\/span><\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$current_date<\/span><\/p>\n<p>\u63a8\u8350\u7528 $() \u8fd9\u79cd\u5199\u6cd5&#xff0c;\u56e0\u4e3a\u5b83\u66f4\u6e05\u6670&#xff0c;\u800c\u4e14\u652f\u6301\u5d4c\u5957\u3002<\/p>\n<p><span class=\"token comment\"># \u83b7\u53d6\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u6570\u91cf<\/span><br \/>\n<span class=\"token assign-left variable\">file_count<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">ls<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">wc<\/span> <span class=\"token parameter variable\">-l<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5f53\u524d\u76ee\u5f55\u6709 <span class=\"token variable\">$file_count<\/span> \u4e2a\u6587\u4ef6&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u83b7\u53d6\u5f53\u524d\u7528\u6237\u540d<\/span><br \/>\n<span class=\"token assign-left variable\">user<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">whoami<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u597d&#xff0c;<span class=\"token variable\">$user<\/span>&#xff01;&#034;<\/span><\/p>\n<p>\u65b9\u5f0f\u4e09&#xff1a;\u4ea4\u4e92\u5f0f\u8d4b\u503c&#xff08;\u7528read\u547d\u4ee4&#xff0c;\u540e\u9762\u4f1a\u8be6\u7ec6\u8bb2&#xff09;<\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u4f60\u7684\u540d\u5b57&#xff1a;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">read<\/span> name<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u597d&#xff0c;<span class=\"token variable\">$name<\/span>&#xff01;&#034;<\/span><\/p>\n<h4>7.3.5 \u4f7f\u7528\u53d8\u91cf\u2014\u2014\u7f8e\u5143\u7b26\u53f7$<\/h4>\n<p>\u5b9a\u4e49\u53d8\u91cf\u65f6\u4e0d\u7528 $&#xff0c;\u4f46\u4f7f\u7528\u53d8\u91cf\u65f6\u5fc5\u987b\u52a0 $&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u65f6\u4e0d\u7528$<\/span><br \/>\n<span class=\"token comment\"># \u4f7f\u7528\u65f6\u5fc5\u987b\u7528$<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$name<\/span>          <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u5f20\u4e09<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6211\u7684\u540d\u5b57\u662f<span class=\"token variable\">$name<\/span>&#034;<\/span>  <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u6211\u7684\u540d\u5b57\u662f\u5f20\u4e09<\/span><\/p>\n<p>\u8fd9\u5c31\u50cf&#xff1a;\u4f60\u5f80\u76d2\u5b50\u91cc\u653e\u4e1c\u897f\u7684\u65f6\u5019\u4e0d\u7528\u8bf4&#034;\u8fd9\u662f\u4e2a\u76d2\u5b50&#034;&#xff08;\u5b9a\u4e49&#xff09;&#xff0c;\u4f46\u4f60\u60f3\u4ece\u76d2\u5b50\u91cc\u62ff\u4e1c\u897f\u7684\u65f6\u5019&#xff0c;\u5f97\u6307\u660e&#034;\u6211\u8981\u4ece\u90a3\u4e2a\u76d2\u5b50\u91cc\u62ff&#034;&#xff08;\u5f15\u7528&#xff09;\u3002<\/p>\n<p>\u82b1\u62ec\u53f7\u7684\u4f5c\u7528<\/p>\n<p>\u6709\u65f6\u5019\u53d8\u91cf\u540d\u4f1a\u548c\u540e\u9762\u7684\u6587\u5b57&#034;\u7c98&#034;\u5728\u4e00\u8d77&#xff0c;Shell\u5206\u4e0d\u6e05\u54ea\u91cc\u662f\u53d8\u91cf\u540d&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">fruit<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u82f9\u679c&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6211\u559c\u6b22\u5403<span class=\"token variable\">$fruit<\/span>\u6c41&#034;<\/span>   <span class=\"token comment\"># Shell\u53ef\u80fd\u4ee5\u4e3a\u53d8\u91cf\u540d\u662ffruit\u6c41<\/span><\/p>\n<p>\u8fd9\u65f6\u5019\u7528\u82b1\u62ec\u53f7 {} \u660e\u786e\u544a\u8bc9Shell\u53d8\u91cf\u540d\u7684\u8303\u56f4&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">fruit<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u82f9\u679c&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6211\u559c\u6b22\u5403<span class=\"token variable\">${fruit}<\/span>\u6c41&#034;<\/span>  <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u6211\u559c\u6b22\u5403\u82f9\u679c\u6c41<\/span><\/p>\n<p>\u517b\u6210\u597d\u4e60\u60ef&#xff1a;\u5728\u5b57\u7b26\u4e32\u4e2d\u4f7f\u7528\u53d8\u91cf\u65f6&#xff0c;\u90fd\u7528 ${\u53d8\u91cf\u540d} \u8fd9\u79cd\u5199\u6cd5\u3002<\/p>\n<h4>7.3.6 \u53ea\u8bfb\u53d8\u91cf<\/h4>\n<p>\u6709\u4e9b\u53d8\u91cf\u4f60\u4e0d\u60f3\u8ba9\u522b\u4eba\u4fee\u6539&#xff0c;\u53ef\u4ee5\u7528 readonly \u58f0\u660e\u4e3a\u53ea\u8bfb&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">PI<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">3.14159<\/span><br \/>\n<span class=\"token builtin class-name\">readonly<\/span> PI<\/p>\n<p><span class=\"token assign-left variable\">PI<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">3.14<\/span>   <span class=\"token comment\"># \u4f1a\u62a5\u9519&#xff1a;bash: PI: readonly variable<\/span><\/p>\n<p>\u5c31\u50cf\u56fe\u4e66\u9986\u7684\u4e66&#xff0c;\u4f60\u53ef\u4ee5\u770b&#xff0c;\u4f46\u4e0d\u80fd\u5728\u4e0a\u9762\u5199\u5b57\u3002<\/p>\n<h4>7.3.7 \u5220\u9664\u53d8\u91cf<\/h4>\n<p>\u7528 unset \u53ef\u4ee5\u5220\u9664\u53d8\u91cf&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$name<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u5f20\u4e09<\/span><\/p>\n<p><span class=\"token builtin class-name\">unset<\/span> name<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$name<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u7a7a&#xff08;\u4ec0\u4e48\u90fd\u6ca1\u6709&#xff09;<\/span><\/p>\n<p>\u6ce8\u610f&#xff1a;\u53ea\u8bfb\u53d8\u91cf\u4e0d\u80fd\u88abunset\u5220\u9664\u3002<\/p>\n<h4>7.3.8 \u53d8\u91cf\u7684\u7c7b\u578b\u2014\u2014Shell\u6ca1\u6709\u771f\u6b63\u7684\u7c7b\u578b<\/h4>\n<p>\u5728\u5176\u4ed6\u8bed\u8a00\u91cc&#xff08;\u5982Java\u3001C&#xff09;&#xff0c;\u53d8\u91cf\u6709\u660e\u786e\u7684\u7c7b\u578b&#xff1a;\u6574\u6570\u5c31\u662f\u6574\u6570&#xff0c;\u5b57\u7b26\u4e32\u5c31\u662f\u5b57\u7b26\u4e32&#xff0c;\u4e0d\u80fd\u6df7\u3002<\/p>\n<p>\u4f46\u5728Shell\u91cc&#xff0c;\u6240\u6709\u53d8\u91cf\u7684\u503c\u90fd\u662f\u5b57\u7b26\u4e32&#xff01;<\/p>\n<p><span class=\"token assign-left variable\">age<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">25<\/span><\/p>\n<p>\u4f60\u4ee5\u4e3a age \u662f\u4e2a\u6570\u5b5725&#xff1f;\u4e0d&#xff0c;Shell\u89c9\u5f97\u5b83\u662f\u5b57\u7b26\u4e32&#034;25&#034;\u3002\u53ea\u4e0d\u8fc7\u5728\u4f60\u9700\u8981\u505a\u6570\u5b66\u8fd0\u7b97\u7684\u65f6\u5019&#xff0c;Shell\u4f1a\u4e34\u65f6\u628a\u5b83\u5f53\u6570\u5b57\u5904\u7406\u3002<\/p>\n<p><span class=\"token assign-left variable\">a<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">10<\/span><br \/>\n<span class=\"token assign-left variable\">b<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">20<\/span><\/p>\n<p><span class=\"token comment\"># \u8fd9\u4e0d\u662f\u6570\u5b66\u52a0\u6cd5&#xff0c;\u662f\u5b57\u7b26\u4e32\u62fc\u63a5<\/span><br \/>\n<span class=\"token assign-left variable\">c<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$a<\/span>&#043;<span class=\"token variable\">$b<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$c<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;10&#043;20&#xff08;\u4e0d\u662f30&#xff09;<\/span><\/p>\n<p>\u8981\u505a\u771f\u6b63\u7684\u6570\u5b66\u8fd0\u7b97&#xff0c;\u9700\u8981\u7528\u7279\u6b8a\u7684\u65b9\u6cd5&#xff0c;\u6211\u4eec\u540e\u97627.6\u8282\u4f1a\u8bb2\u3002<\/p>\n<h4>7.3.9 \u5b8c\u6574\u793a\u4f8b&#xff1a;\u4e2a\u4eba\u4fe1\u606f\u5361\u7247<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u4e2a\u4eba\u4fe1\u606f\u5361\u7247\u751f\u6210\u5668<\/span><\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u53d8\u91cf<\/span><br \/>\n<span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u674e\u660e&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">age<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">22<\/span><br \/>\n<span class=\"token assign-left variable\">gender<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7537&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">city<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5317\u4eac&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">job<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7a0b\u5e8f\u5458&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u8f93\u51fa\u4fe1\u606f\u5361\u7247<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;     \u4e2a\u4eba\u4fe1\u606f\u5361\u7247&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u59d3\u540d&#xff1a;<span class=\"token variable\">${name}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5e74\u9f84&#xff1a;<span class=\"token variable\">${age}<\/span>\u5c81&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6027\u522b&#xff1a;<span class=\"token variable\">${gender}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u57ce\u5e02&#xff1a;<span class=\"token variable\">${city}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u804c\u4e1a&#xff1a;<span class=\"token variable\">${job}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u751f\u6210\u65f6\u95f4&#xff1a;<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%Y-%m-%d %H:%M:%S&#039;<\/span><span class=\"token variable\">)<\/span><\/span>&#034;<\/span><\/p>\n<p>\u8fd0\u884c\u7ed3\u679c&#xff1a;<\/p>\n<p>&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n     \u4e2a\u4eba\u4fe1\u606f\u5361\u7247<br \/>\n&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\u59d3\u540d&#xff1a;\u674e\u660e<br \/>\n\u5e74\u9f84&#xff1a;22\u5c81<br \/>\n\u6027\u522b&#xff1a;\u7537<br \/>\n\u57ce\u5e02&#xff1a;\u5317\u4eac<br \/>\n\u804c\u4e1a&#xff1a;\u7a0b\u5e8f\u5458<br \/>\n&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n\u751f\u6210\u65f6\u95f4&#xff1a;2024-01-15 14:30:25<\/p>\n<hr \/>\n<h3>7.4 \u73af\u5883\u53d8\u91cf\u4e0e\u4f4d\u7f6e\u53c2\u6570<\/h3>\n<h4>7.4.1 \u5c40\u90e8\u53d8\u91cf vs \u73af\u5883\u53d8\u91cf\u2014\u2014\u623f\u95f4\u91cc\u7684\u706fvs\u697c\u9053\u91cc\u7684\u706f<\/h4>\n<p>\u524d\u9762\u6211\u4eec\u5b9a\u4e49\u7684\u53d8\u91cf\u90fd\u662f\u5c40\u90e8\u53d8\u91cf&#xff08;\u4e5f\u53eb\u81ea\u5b9a\u4e49\u53d8\u91cf&#xff09;\u3002\u5b83\u4eec\u6709\u4e2a\u7279\u70b9&#xff1a;\u53ea\u5728\u5f53\u524dShell\u4e2d\u6709\u6548&#xff0c;\u5b50\u8fdb\u7a0b\u770b\u4e0d\u5230\u3002<\/p>\n<p>\u6253\u4e2a\u6bd4\u65b9&#xff1a;<\/p>\n<ul>\n<li>\u4f60\u5728\u81ea\u5df1\u623f\u95f4\u91cc\u5f00\u4e86\u4e00\u76cf\u706f&#xff08;\u5b9a\u4e49\u5c40\u90e8\u53d8\u91cf&#xff09;&#xff0c;\u53ea\u6709\u4f60\u5728\u623f\u95f4\u91cc\u80fd\u770b\u5230&#xff0c;\u9694\u58c1\u623f\u95f4\u7684\u4eba\u770b\u4e0d\u5230\u3002<\/li>\n<li>\u5982\u679c\u4f60\u5728\u697c\u9053\u91cc\u5f00\u4e86\u4e00\u76cf\u706f&#xff08;\u73af\u5883\u53d8\u91cf&#xff09;&#xff0c;\u6240\u6709\u623f\u95f4\u7684\u4eba\u90fd\u80fd\u770b\u5230\u3002<\/li>\n<\/ul>\n<p>\u770b\u8fd9\u4e2a\u4f8b\u5b50&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u5c40\u90e8\u53d8\u91cf<\/span><br \/>\n<span class=\"token assign-left variable\">my_var<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u597d&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u5f00\u4e00\u4e2a\u5b50Shell<\/span><br \/>\n<span class=\"token function\">bash<\/span><\/p>\n<p><span class=\"token comment\"># \u5728\u5b50Shell\u91cc\u5c1d\u8bd5\u8bbf\u95ee<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$my_var<\/span>    <span class=\"token comment\"># \u4ec0\u4e48\u90fd\u4e0d\u4f1a\u8f93\u51fa&#xff01;<\/span><\/p>\n<p>\u56e0\u4e3a my_var \u662f\u5c40\u90e8\u53d8\u91cf&#xff0c;\u5b50Shell\u770b\u4e0d\u5230\u3002<\/p>\n<p>\u5982\u679c\u60f3\u8ba9\u6240\u6709\u5b50\u8fdb\u7a0b\u90fd\u80fd\u770b\u5230&#xff0c;\u5c31\u8981\u7528 export \u628a\u5b83\u53d8\u6210\u73af\u5883\u53d8\u91cf&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u5e76\u5bfc\u51fa\u4e3a\u73af\u5883\u53d8\u91cf<\/span><br \/>\n<span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\">my_var<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u597d&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u5f00\u4e00\u4e2a\u5b50Shell<\/span><br \/>\n<span class=\"token function\">bash<\/span><\/p>\n<p><span class=\"token comment\"># \u5728\u5b50Shell\u91cc\u8bbf\u95ee<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$my_var<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u4f60\u597d<\/span><\/p>\n<h4>7.4.2 export \u547d\u4ee4\u8be6\u89e3<\/h4>\n<p>export \u7684\u4f5c\u7528\u5c31\u662f\u628a\u5c40\u90e8\u53d8\u91cf&#034;\u5347\u7ea7&#034;\u4e3a\u73af\u5883\u53d8\u91cf\u3002\u6709\u4e24\u79cd\u5199\u6cd5&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u5199\u6cd5\u4e00&#xff1a;\u5148\u5b9a\u4e49&#xff0c;\u518d\u5bfc\u51fa<\/span><br \/>\n<span class=\"token assign-left variable\">NAME<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">export<\/span> NAME<\/p>\n<p><span class=\"token comment\"># \u5199\u6cd5\u4e8c&#xff1a;\u5b9a\u4e49\u7684\u540c\u65f6\u5bfc\u51fa&#xff08;\u63a8\u8350&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\">NAME<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><\/p>\n<p>\u73af\u5883\u53d8\u91cf\u7684\u5178\u578b\u7528\u9014\u662f\u914d\u7f6e\u7a0b\u5e8f\u7684\u884c\u4e3a\u3002\u6bd4\u5982&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u8bbe\u7f6e\u8bed\u8a00\u73af\u5883<\/span><br \/>\n<span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\"><span class=\"token environment constant\">LANG<\/span><\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;zh_CN.UTF-8&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u8bbe\u7f6eJava\u8def\u5f84<\/span><br \/>\n<span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\">JAVA_HOME<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/usr\/lib\/jvm\/java-11&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u8bbe\u7f6ePATH&#xff08;\u8ba9\u7cfb\u7edf\u77e5\u9053\u53bb\u54ea\u91cc\u627e\u7a0b\u5e8f&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\"><span class=\"token environment constant\">PATH<\/span><\/span><span class=\"token operator\">&#061;<\/span><span class=\"token environment constant\">$PATH<\/span>:\/usr\/local\/myapp\/bin<\/p>\n<h4>7.4.3 \u67e5\u770b\u73af\u5883\u53d8\u91cf<\/h4>\n<p>\u67e5\u770b\u6240\u6709\u73af\u5883\u53d8\u91cf&#xff1a;<\/p>\n<p><span class=\"token function\">env<\/span><br \/>\n<span class=\"token comment\"># \u6216\u8005<\/span><br \/>\n<span class=\"token function\">printenv<\/span><\/p>\n<p>\u67e5\u770b\u5355\u4e2a\u73af\u5883\u53d8\u91cf&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token environment constant\">$PATH<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token environment constant\">$HOME<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token environment constant\">$USER<\/span><\/p>\n<p>\u67e5\u770b\u6240\u6709\u53d8\u91cf&#xff08;\u5305\u62ec\u5c40\u90e8\u53d8\u91cf\u548c\u73af\u5883\u53d8\u91cf&#xff09;&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">set<\/span><\/p>\n<h4>7.4.4 \u5e38\u89c1\u7cfb\u7edf\u73af\u5883\u53d8\u91cf<\/h4>\n<p>\u7cfb\u7edf\u9884\u5148\u5b9a\u4e49\u597d\u4e86\u5f88\u591a\u73af\u5883\u53d8\u91cf&#xff0c;\u5e38\u7528\u7684\u6709&#xff1a;<\/p>\n<table>\n<tr>\u53d8\u91cf\u540d\u542b\u4e49\u793a\u4f8b\u503c<\/tr>\n<tbody>\n<tr>\n<td>$HOME<\/td>\n<td>\u7528\u6237\u4e3b\u76ee\u5f55<\/td>\n<td>\/home\/user<\/td>\n<\/tr>\n<tr>\n<td>$USER<\/td>\n<td>\u5f53\u524d\u7528\u6237\u540d<\/td>\n<td>user<\/td>\n<\/tr>\n<tr>\n<td>$PWD<\/td>\n<td>\u5f53\u524d\u5de5\u4f5c\u76ee\u5f55<\/td>\n<td>\/home\/user\/docs<\/td>\n<\/tr>\n<tr>\n<td>$SHELL<\/td>\n<td>\u5f53\u524dShell\u8def\u5f84<\/td>\n<td>\/bin\/bash<\/td>\n<\/tr>\n<tr>\n<td>$PATH<\/td>\n<td>\u547d\u4ee4\u641c\u7d22\u8def\u5f84<\/td>\n<td>\/usr\/bin:\/bin:\u2026<\/td>\n<\/tr>\n<tr>\n<td>$HOSTNAME<\/td>\n<td>\u4e3b\u673a\u540d<\/td>\n<td>myserver<\/td>\n<\/tr>\n<tr>\n<td>$LANG<\/td>\n<td>\u8bed\u8a00\u8bbe\u7f6e<\/td>\n<td>zh_CN.UTF-8<\/td>\n<\/tr>\n<tr>\n<td>$UID<\/td>\n<td>\u7528\u6237ID<\/td>\n<td>1000<\/td>\n<\/tr>\n<tr>\n<td>$RANDOM<\/td>\n<td>\u968f\u673a\u6570(0-32767)<\/td>\n<td>29384<\/td>\n<\/tr>\n<tr>\n<td>$?<\/td>\n<td>\u4e0a\u4e00\u6761\u547d\u4ee4\u7684\u8fd4\u56de\u503c<\/td>\n<td>0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5176\u4e2d $PATH \u975e\u5e38\u91cd\u8981&#xff0c;\u5b83\u51b3\u5b9a\u4e86Shell\u53bb\u54ea\u4e9b\u76ee\u5f55\u627e\u53ef\u6267\u884c\u547d\u4ee4\u3002<\/p>\n<p>\u4e3e\u4e2a\u4f8b\u5b50&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token environment constant\">$PATH<\/span><br \/>\n<span class=\"token comment\"># \u8f93\u51fa&#xff1a;\/usr\/local\/bin:\/usr\/bin:\/bin:\/usr\/sbin:\/sbin<\/span><\/p>\n<p>\u5f53\u4f60\u8f93\u5165 ls \u7684\u65f6\u5019&#xff0c;Shell\u4f1a\u4f9d\u6b21\u53bb\u8fd9\u4e9b\u76ee\u5f55\u91cc\u627e\u6709\u6ca1\u6709\u53eb ls \u7684\u7a0b\u5e8f&#xff0c;\u627e\u5230\u5c31\u6267\u884c\u3002\u5982\u679c\u8fd9\u4e9b\u76ee\u5f55\u91cc\u90fd\u6ca1\u6709 ls&#xff0c;\u5c31\u4f1a\u62a5&#034;command not found&#034;\u3002<\/p>\n<h4>7.4.5 \u8ba9\u73af\u5883\u53d8\u91cf\u6c38\u4e45\u751f\u6548<\/h4>\n<p>\u7528 export \u8bbe\u7f6e\u7684\u73af\u5883\u53d8\u91cf&#xff0c;\u5173\u95ed\u7ec8\u7aef\u540e\u5c31\u6ca1\u4e86\u3002\u8981\u60f3\u6c38\u4e45\u751f\u6548&#xff0c;\u8981\u5199\u5230\u914d\u7f6e\u6587\u4ef6\u91cc&#xff1a;<\/p>\n<p>\u5bf9\u5f53\u524d\u7528\u6237\u751f\u6548&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u7f16\u8f91 ~\/.bashrc \u6587\u4ef6<\/span><br \/>\n<span class=\"token function\">vim<\/span> ~\/.bashrc<\/p>\n<p><span class=\"token comment\"># \u5728\u6587\u4ef6\u672b\u5c3e\u52a0\u4e0a<\/span><br \/>\n<span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\">MY_VAR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u597d&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u4fdd\u5b58\u540e\u8ba9\u914d\u7f6e\u7acb\u5373\u751f\u6548<\/span><br \/>\n<span class=\"token builtin class-name\">source<\/span> ~\/.bashrc<\/p>\n<p>\u5bf9\u6240\u6709\u7528\u6237\u751f\u6548&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u7f16\u8f91 \/etc\/environment \u6216 \/etc\/profile<\/span><br \/>\n<span class=\"token function\">sudo<\/span> <span class=\"token function\">vim<\/span> \/etc\/profile<\/p>\n<p><span class=\"token comment\"># \u5728\u6587\u4ef6\u672b\u5c3e\u52a0\u4e0a<\/span><br \/>\n<span class=\"token builtin class-name\">export<\/span> <span class=\"token assign-left variable\">MY_VAR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u597d&#034;<\/span><\/p>\n<h4>7.4.6 \u4f4d\u7f6e\u53c2\u6570\u2014\u2014\u7ed9\u811a\u672c\u4f20\u53c2\u6570<\/h4>\n<p>\u8fd8\u8bb0\u5f97\u600e\u4e48\u8fd0\u884c\u811a\u672c\u5417&#xff1f;.\/script.sh<\/p>\n<p>\u5982\u679c\u6211\u60f3\u5728\u8fd0\u884c\u811a\u672c\u7684\u65f6\u5019\u4f20\u4e00\u4e9b\u6570\u636e\u8fdb\u53bb\u5462&#xff1f;\u6bd4\u5982&#xff1a;<\/p>\n<p>.\/greet.sh \u5f20\u4e09 <span class=\"token number\">25<\/span><\/p>\n<p>\u8fd9\u91cc \u5f20\u4e09 \u548c 25 \u5c31\u662f\u4f20\u7ed9\u811a\u672c\u7684\u53c2\u6570\u3002\u5728\u811a\u672c\u5185\u90e8&#xff0c;\u7528\u4f4d\u7f6e\u53c2\u6570\u6765\u63a5\u6536\u5b83\u4eec&#xff1a;<\/p>\n<table>\n<tr>\u7b26\u53f7\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>$0<\/td>\n<td>\u811a\u672c\u672c\u8eab\u7684\u6587\u4ef6\u540d<\/td>\n<\/tr>\n<tr>\n<td>$1<\/td>\n<td>\u7b2c1\u4e2a\u53c2\u6570<\/td>\n<\/tr>\n<tr>\n<td>$2<\/td>\n<td>\u7b2c2\u4e2a\u53c2\u6570<\/td>\n<\/tr>\n<tr>\n<td>$3<\/td>\n<td>\u7b2c3\u4e2a\u53c2\u6570<\/td>\n<\/tr>\n<tr>\n<td>\u2026<\/td>\n<td>\u4ee5\u6b64\u7c7b\u63a8<\/td>\n<\/tr>\n<tr>\n<td>${10}<\/td>\n<td>\u7b2c10\u4e2a\u53c2\u6570&#xff08;\u4e24\u4f4d\u6570\u8981\u52a0\u82b1\u62ec\u53f7&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>$#<\/td>\n<td>\u53c2\u6570\u7684\u603b\u4e2a\u6570<\/td>\n<\/tr>\n<tr>\n<td>$*<\/td>\n<td>\u6240\u6709\u53c2\u6570&#xff08;\u4f5c\u4e3a\u4e00\u4e2a\u6574\u4f53\u5b57\u7b26\u4e32&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>$&#064;<\/td>\n<td>\u6240\u6709\u53c2\u6570&#xff08;\u6bcf\u4e2a\u53c2\u6570\u72ec\u7acb&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>$$<\/td>\n<td>\u5f53\u524d\u811a\u672c\u7684\u8fdb\u7a0b\u53f7(PID)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6765\u4e2a\u4f8b\u5b50&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u53c2\u6570\u6f14\u793a\u811a\u672c param.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u811a\u672c\u540d\u79f0&#xff1a;<span class=\"token variable\">$0<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c\u4e00\u4e2a\u53c2\u6570&#xff1a;<span class=\"token variable\">$1<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c\u4e8c\u4e2a\u53c2\u6570&#xff1a;<span class=\"token variable\">$2<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u53c2\u6570\u603b\u4e2a\u6570&#xff1a;<span class=\"token variable\">$#<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6240\u6709\u53c2\u6570&#xff08;\\\\<span class=\"token variable\">$*<\/span>&#xff09;&#xff1a;<span class=\"token variable\">$*<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6240\u6709\u53c2\u6570&#xff08;\\\\<span class=\"token variable\">$&#064;<\/span>&#xff09;&#xff1a;<span class=\"token variable\">$&#064;<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5f53\u524d\u8fdb\u7a0b\u53f7&#xff1a;<span class=\"token variable\">$$<\/span>&#034;<\/span><\/p>\n<p>\u8fd0\u884c&#xff1a;<\/p>\n<p><span class=\"token function\">chmod<\/span> &#043;x param.sh<br \/>\n.\/param.sh \u5f20\u4e09 \u674e\u56db \u738b\u4e94<\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>\u811a\u672c\u540d\u79f0&#xff1a;.\/param.sh<br \/>\n\u7b2c\u4e00\u4e2a\u53c2\u6570&#xff1a;\u5f20\u4e09<br \/>\n\u7b2c\u4e8c\u4e2a\u53c2\u6570&#xff1a;\u674e\u56db<br \/>\n\u53c2\u6570\u603b\u4e2a\u6570&#xff1a;3<br \/>\n\u6240\u6709\u53c2\u6570&#xff08;$*&#xff09;&#xff1a;\u5f20\u4e09 \u674e\u56db \u738b\u4e94<br \/>\n\u6240\u6709\u53c2\u6570&#xff08;$&#064;&#xff09;&#xff1a;\u5f20\u4e09 \u674e\u56db \u738b\u4e94<br \/>\n\u5f53\u524d\u8fdb\u7a0b\u53f7&#xff1a;12345<\/p>\n<h4>7.4.7 $* \u548c $&#064; \u7684\u533a\u522b<\/h4>\n<p>\u8fd9\u4e24\u4e2a\u770b\u8d77\u6765\u4e00\u6837&#xff0c;\u4f46\u5728\u88ab\u5f15\u53f7\u5305\u88f9\u65f6\u6709\u533a\u522b&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u533a\u522b\u6f14\u793a diff.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#8212; \u4f7f\u7528 \\\\<span class=\"token variable\">$*<\/span> &#8212;&#034;<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">arg<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$*<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$arg<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#8212; \u4f7f\u7528 \\\\<span class=\"token variable\">$&#064;<\/span> &#8212;&#034;<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">arg<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$&#064;<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$arg<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u8fd0\u884c&#xff1a;<\/p>\n<p>.\/diff.sh aaa bbb ccc<\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>&#8212; \u4f7f\u7528 $* &#8212;<br \/>\naaa bbb ccc      # \u6240\u6709\u53c2\u6570\u5408\u6210\u4e86\u4e00\u4e2a\u6574\u4f53<br \/>\n&#8212; \u4f7f\u7528 $&#064; &#8212;<br \/>\naaa              # \u6bcf\u4e2a\u53c2\u6570\u72ec\u7acb<br \/>\nbbb<br \/>\nccc<\/p>\n<p>\u8bb0\u4f4f\u8fd9\u4e2a\u533a\u522b&#xff1a;&#034;$*&#034; \u628a\u6240\u6709\u53c2\u6570\u5f53\u6210\u4e00\u4e2a\u6574\u4f53&#xff0c;&#034;$&#064;&#034; \u628a\u6bcf\u4e2a\u53c2\u6570\u5f53\u6210\u72ec\u7acb\u7684\u4e2a\u4f53\u3002\u901a\u5e38\u7528 &#034;$&#064;&#034; \u66f4\u591a\u3002<\/p>\n<h4>7.4.8 \u4f4d\u7f6e\u53c2\u6570\u7684\u79fb\u4f4d&#xff1a;shift<\/h4>\n<p>shift \u547d\u4ee4\u53ef\u4ee5\u628a\u6240\u6709\u4f4d\u7f6e\u53c2\u6570\u5de6\u79fb\u4e00\u4f4d&#xff1a;$2\u53d8\u6210$1&#xff0c;$3\u53d8\u6210$2&#xff0c;\u539f\u6765\u7684$1\u88ab\u4e22\u5f03\u3002<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># shift\u6f14\u793a<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u79fb\u4f4d\u524d&#xff1a;\\\\<span class=\"token variable\">$1<\/span>&#061;<span class=\"token variable\">$1<\/span>, \\\\<span class=\"token variable\">$2<\/span>&#061;<span class=\"token variable\">$2<\/span>, \\\\<span class=\"token variable\">$3<\/span>&#061;<span class=\"token variable\">$3<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">shift<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u79fb\u4f4d\u4e00\u6b21&#xff1a;\\\\<span class=\"token variable\">$1<\/span>&#061;<span class=\"token variable\">$1<\/span>, \\\\<span class=\"token variable\">$2<\/span>&#061;<span class=\"token variable\">$2<\/span>, \\\\<span class=\"token variable\">$3<\/span>&#061;<span class=\"token variable\">$3<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">shift<\/span> <span class=\"token number\">2<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u79fb\u4f4d\u4e24\u6b21&#xff1a;\\\\<span class=\"token variable\">$1<\/span>&#061;<span class=\"token variable\">$1<\/span>, \\\\<span class=\"token variable\">$2<\/span>&#061;<span class=\"token variable\">$2<\/span>&#034;<\/span><\/p>\n<p>\u8fd0\u884c .\/shift.sh A B C D E&#xff0c;\u8f93\u51fa&#xff1a;<\/p>\n<p>\u79fb\u4f4d\u524d&#xff1a;$1&#061;A, $2&#061;B, $3&#061;C<br \/>\n\u79fb\u4f4d\u4e00\u6b21&#xff1a;$1&#061;B, $2&#061;C, $3&#061;D<br \/>\n\u79fb\u4f4d\u4e24\u6b21&#xff1a;$1&#061;E, $2&#061;<\/p>\n<p>shift \u5e38\u7528\u5728while\u5faa\u73af\u4e2d\u9010\u4e2a\u5904\u7406\u53c2\u6570&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u9010\u4e2a\u5904\u7406\u53c2\u6570<\/span><\/p>\n<p><span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$#<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5f53\u524d\u53c2\u6570&#xff1a;<span class=\"token variable\">$1<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">shift<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<h4>7.4.9 \u5b9e\u6218&#xff1a;\u8ba1\u7b97\u5668\u811a\u672c<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u7b80\u5355\u8ba1\u7b97\u5668 calc.sh<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$#<\/span> <span class=\"token parameter variable\">-ne<\/span> <span class=\"token number\">3<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7528\u6cd5&#xff1a;<span class=\"token variable\">$0<\/span> \u6570\u5b57 \u8fd0\u7b97\u7b26 \u6570\u5b57&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u793a\u4f8b&#xff1a;<span class=\"token variable\">$0<\/span> 10 &#043; 20&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token assign-left variable\">num1<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$1<\/span><br \/>\n<span class=\"token assign-left variable\">operator<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$2<\/span><br \/>\n<span class=\"token assign-left variable\">num2<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$3<\/span><\/p>\n<p><span class=\"token keyword\">case<\/span> <span class=\"token variable\">$operator<\/span> <span class=\"token keyword\">in<\/span><br \/>\n    &#043;<span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$num1<\/span> &#043; <span class=\"token variable\">$num2<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    &#8211;<span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$num1<\/span> &#8211; <span class=\"token variable\">$num2<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">\\\\<\/span>*<span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$num1<\/span> * <span class=\"token variable\">$num2<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    \/<span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;scale&#061;2; <span class=\"token variable\">$num1<\/span> \/ <span class=\"token variable\">$num2<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    *<span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4e0d\u652f\u6301\u7684\u8fd0\u7b97\u7b26&#xff1a;<span class=\"token variable\">$operator<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">esac<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$num1<\/span> <span class=\"token variable\">$operator<\/span> <span class=\"token variable\">$num2<\/span> &#061; <span class=\"token variable\">$result<\/span>&#034;<\/span><\/p>\n<hr \/>\n<h3>7.5 \u5b57\u7b26\u4e32\u64cd\u4f5c\u4e0e\u6570\u7ec4<\/h3>\n<h4>7.5.1 \u5b57\u7b26\u4e32\u7684\u4e24\u79cd\u8868\u793a\u65b9\u5f0f<\/h4>\n<p>\u5728Shell\u4e2d&#xff0c;\u5b57\u7b26\u4e32\u53ef\u4ee5\u7528\u5355\u5f15\u53f7\u6216\u53cc\u5f15\u53f7\u5305\u88f9&#xff0c;\u4f46\u4e24\u8005\u6709\u91cd\u8981\u533a\u522b&#xff1a;<\/p>\n<p>\u5355\u5f15\u53f7&#xff1a;\u539f\u6837\u8f93\u51fa&#xff0c;\u4e0d\u89e3\u6790\u53d8\u91cf<\/p>\n<p><span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#039;\u4f60\u597d&#xff0c;$name&#039;<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u4f60\u597d&#xff0c;$name&#xff08;\u539f\u6837\u8f93\u51fa&#xff09;<\/span><\/p>\n<p>\u53cc\u5f15\u53f7&#xff1a;\u4f1a\u89e3\u6790\u53d8\u91cf\u548c\u547d\u4ee4<\/p>\n<p><span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u597d&#xff0c;<span class=\"token variable\">$name<\/span>&#034;<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u4f60\u597d&#xff0c;\u5f20\u4e09&#xff08;\u53d8\u91cf\u88ab\u89e3\u6790\u4e86&#xff09;<\/span><\/p>\n<p>\u6253\u4e2a\u6bd4\u65b9&#xff1a;<\/p>\n<ul>\n<li>\u5355\u5f15\u53f7\u5c31\u50cf\u4e00\u4e2a&#034;\u5bc6\u4e0d\u900f\u98ce\u7684\u76d2\u5b50&#034;&#xff0c;\u91cc\u9762\u662f\u4ec0\u4e48\u5c31\u662f\u4ec0\u4e48&#xff0c;\u4e0d\u89e3\u91ca<\/li>\n<li>\u53cc\u5f15\u53f7\u5c31\u50cf\u4e00\u4e2a&#034;\u534a\u900f\u660e\u7684\u76d2\u5b50&#034;&#xff0c;\u91cc\u9762\u7684\u53d8\u91cf\u548c\u547d\u4ee4\u80fd\u88ab&#034;\u770b\u7a7f&#034;\u5e76\u66ff\u6362<\/li>\n<\/ul>\n<p>\u4ec0\u4e48\u65f6\u5019\u7528\u5355\u5f15\u53f7&#xff0c;\u4ec0\u4e48\u65f6\u5019\u7528\u53cc\u5f15\u53f7&#xff1f;<\/p>\n<ul>\n<li>\u9700\u8981\u89e3\u6790\u53d8\u91cf\u65f6\u7528\u53cc\u5f15\u53f7&#xff1a;&#034;\u4f60\u597d&#xff0c;$name&#034;<\/li>\n<li>\u4e0d\u60f3\u88ab\u89e3\u6790\u65f6\u7528\u5355\u5f15\u53f7&#xff1a;&#039;$\u7b26\u53f7\u8868\u793a\u7f8e\u5143&#039;<\/li>\n<li>\u4e0d\u786e\u5b9a\u7684\u65f6\u5019&#xff0c;\u9ed8\u8ba4\u7528\u53cc\u5f15\u53f7&#xff08;\u66f4\u5b89\u5168&#xff0c;\u907f\u514d\u7a7a\u683c\u95ee\u9898&#xff09;<\/li>\n<\/ul>\n<h4>7.5.2 \u5b57\u7b26\u4e32\u7684\u62fc\u63a5<\/h4>\n<p>Shell\u62fc\u63a5\u5b57\u7b26\u4e32\u7279\u522b\u7b80\u5355\u2014\u2014\u76f4\u63a5\u6328\u7740\u5199\u5c31\u884c&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e00&#xff1a;\u76f4\u63a5\u76f8\u8fde<\/span><br \/>\n<span class=\"token assign-left variable\">greeting<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u597d&#xff0c;&#034;<\/span>&#034;\u4e16\u754c<span class=\"token string\">&#034;<br \/>\necho <span class=\"token variable\">$greeting<\/span>    # \u8f93\u51fa&#xff1a;\u4f60\u597d&#xff0c;\u4e16\u754c<\/p>\n<p># \u65b9\u5f0f\u4e8c&#xff1a;\u7528\u53d8\u91cf\u62fc\u63a5<br \/>\npart1&#061;&#034;<\/span>\u4f60\u597d&#xff0c;<span class=\"token string\">&#034;<br \/>\npart2&#061;&#034;<\/span>\u4e16\u754c<span class=\"token string\">&#034;<br \/>\ngreeting&#061;<span class=\"token variable\">$part1<\/span><span class=\"token variable\">$part2<\/span><br \/>\necho <span class=\"token variable\">$greeting<\/span>    # \u8f93\u51fa&#xff1a;\u4f60\u597d&#xff0c;\u4e16\u754c<\/p>\n<p># \u65b9\u5f0f\u4e09&#xff1a;\u5728\u53cc\u5f15\u53f7\u4e2d\u62fc\u63a5<br \/>\nname&#061;&#034;<\/span>\u5f20\u4e09<span class=\"token string\">&#034;<br \/>\ngreeting&#061;&#034;<\/span>\u4f60\u597d&#xff0c;<span class=\"token variable\">${name}<\/span>&#xff01;\u6b22\u8fce&#xff01;&#034;<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$greeting<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u4f60\u597d&#xff0c;\u5f20\u4e09&#xff01;\u6b22\u8fce&#xff01;<\/span><\/p>\n<h4>7.5.3 \u83b7\u53d6\u5b57\u7b26\u4e32\u957f\u5ea6<\/h4>\n<p>\u7528 ${#\u53d8\u91cf\u540d} \u83b7\u53d6\u5b57\u7b26\u4e32\u957f\u5ea6&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">str<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Hello World&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${<span class=\"token operator\">#<\/span>str}<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;11<\/span><\/p>\n<p><span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${<span class=\"token operator\">#<\/span>name}<\/span>   <span class=\"token comment\"># \u8f93\u51fa&#xff1a;2&#xff08;\u4e2d\u6587\u5b57\u7b26\u4e5f\u7b971\u4e2a&#xff09;<\/span><\/p>\n<h4>7.5.4 \u622a\u53d6\u5b50\u5b57\u7b26\u4e32<\/h4>\n<p>\u622a\u53d6\u5b57\u7b26\u4e32\u6709\u597d\u51e0\u79cd\u65b9\u5f0f&#xff0c;\u8bb0\u4f4f\u4e0b\u9762\u8fd9\u51e0\u79cd\u5c31\u591f\u4e86&#xff1a;<\/p>\n<p>\u65b9\u5f0f\u4e00&#xff1a;\u4ece\u7b2c\u51e0\u4e2a\u5b57\u7b26\u5f00\u59cb&#xff0c;\u622a\u53d6\u51e0\u4e2a\u5b57\u7b26<\/p>\n<p>\u8bed\u6cd5&#xff1a;${\u53d8\u91cf\u540d:\u8d77\u59cb\u4f4d\u7f6e:\u622a\u53d6\u957f\u5ea6}<\/p>\n<p>\u6ce8\u610f&#xff1a;\u4f4d\u7f6e\u4ece0\u5f00\u59cb\u7b97\u3002<\/p>\n<p><span class=\"token assign-left variable\">str<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Hello World&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u4ece\u7b2c0\u4e2a\u4f4d\u7f6e\u622a\u53d65\u4e2a\u5b57\u7b26<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${str<span class=\"token operator\">:<\/span>0<span class=\"token operator\">:<\/span>5}<\/span>     <span class=\"token comment\"># \u8f93\u51fa&#xff1a;Hello<\/span><\/p>\n<p><span class=\"token comment\"># \u4ece\u7b2c6\u4e2a\u4f4d\u7f6e\u622a\u53d65\u4e2a\u5b57\u7b26<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${str<span class=\"token operator\">:<\/span>6<span class=\"token operator\">:<\/span>5}<\/span>     <span class=\"token comment\"># \u8f93\u51fa&#xff1a;World<\/span><\/p>\n<p><span class=\"token comment\"># \u4ece\u7b2c6\u4e2a\u4f4d\u7f6e\u622a\u53d6\u5230\u672b\u5c3e&#xff08;\u4e0d\u5199\u957f\u5ea6&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${str<span class=\"token operator\">:<\/span>6}<\/span>       <span class=\"token comment\"># \u8f93\u51fa&#xff1a;World<\/span><\/p>\n<p>\u65b9\u5f0f\u4e8c&#xff1a;\u4ece\u53f3\u8fb9\u5f00\u59cb\u622a\u53d6&#xff08;\u7528#\u548c##&#xff09;<\/p>\n<ul>\n<li>${\u53d8\u91cf\u540d#\u5339\u914d\u6a21\u5f0f}&#xff1a;\u4ece\u5de6\u8fb9\u5220\u9664\u6700\u77ed\u5339\u914d<\/li>\n<li>${\u53d8\u91cf\u540d##\u5339\u914d\u6a21\u5f0f}&#xff1a;\u4ece\u5de6\u8fb9\u5220\u9664\u6700\u957f\u5339\u914d<\/li>\n<\/ul>\n<p><span class=\"token assign-left variable\">file<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;photo.tar.gz&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u5220\u6389\u7b2c\u4e00\u4e2a.\u53ca\u5de6\u8fb9\u6240\u6709\u5185\u5bb9<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${file<span class=\"token operator\">#<\/span>*.}<\/span>     <span class=\"token comment\"># \u8f93\u51fa&#xff1a;tar.gz<\/span><\/p>\n<p><span class=\"token comment\"># \u5220\u6389\u6700\u540e\u4e00\u4e2a.\u53ca\u5de6\u8fb9\u6240\u6709\u5185\u5bb9<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${file<span class=\"token operator\">##<\/span>*.}<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;gz<\/span><\/p>\n<p>\u65b9\u5f0f\u4e09&#xff1a;\u4ece\u53f3\u8fb9\u5f00\u59cb\u622a\u53d6&#xff08;\u7528%\u548c%%&#xff09;<\/p>\n<ul>\n<li>${\u53d8\u91cf\u540d%\u5339\u914d\u6a21\u5f0f}&#xff1a;\u4ece\u53f3\u8fb9\u5220\u9664\u6700\u77ed\u5339\u914d<\/li>\n<li>${\u53d8\u91cf\u540d%%\u5339\u914d\u6a21\u5f0f}&#xff1a;\u4ece\u53f3\u8fb9\u5220\u9664\u6700\u957f\u5339\u914d<\/li>\n<\/ul>\n<p><span class=\"token assign-left variable\">file<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;photo.tar.gz&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u5220\u6389\u6700\u540e\u4e00\u4e2a.\u53ca\u53f3\u8fb9\u6240\u6709\u5185\u5bb9<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${file<span class=\"token operator\">%<\/span>.*}<\/span>     <span class=\"token comment\"># \u8f93\u51fa&#xff1a;photo.tar<\/span><\/p>\n<p><span class=\"token comment\"># \u5220\u6389\u7b2c\u4e00\u4e2a.\u53ca\u53f3\u8fb9\u6240\u6709\u5185\u5bb9<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${file<span class=\"token operator\">%%<\/span>.*}<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;photo<\/span><\/p>\n<p>\u8fd9\u4e9b\u64cd\u4f5c\u5728\u5904\u7406\u6587\u4ef6\u540d\u548c\u6269\u5c55\u540d\u65f6\u7279\u522b\u6709\u7528\u3002<\/p>\n<h4>7.5.5 \u5b57\u7b26\u4e32\u66ff\u6362<\/h4>\n<p>\u7528 \/ \u53ef\u4ee5\u66ff\u6362\u5b57\u7b26\u4e32\u4e2d\u7684\u5185\u5bb9&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">str<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Hello World World&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u66ff\u6362\u7b2c\u4e00\u4e2a\u5339\u914d<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${str<span class=\"token operator\">\/<\/span>World<span class=\"token operator\">\/<\/span>Linux}<\/span>      <span class=\"token comment\"># \u8f93\u51fa&#xff1a;Hello Linux World<\/span><\/p>\n<p><span class=\"token comment\"># \u66ff\u6362\u6240\u6709\u5339\u914d&#xff08;\u7528\u4e24\u4e2a\/&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${str<span class=\"token operator\">\/<\/span><span class=\"token operator\">\/<\/span>World<span class=\"token operator\">\/<\/span>Linux}<\/span>     <span class=\"token comment\"># \u8f93\u51fa&#xff1a;Hello Linux Linux<\/span><\/p>\n<p><span class=\"token comment\"># \u4ece\u5f00\u5934\u5339\u914d\u66ff\u6362&#xff08;\u7528#&#xff09;<\/span><br \/>\n<span class=\"token assign-left variable\">str2<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Hello World&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${str2<span class=\"token operator\">\/<\/span><span class=\"token operator\">#<\/span>Hello<span class=\"token operator\">\/<\/span>Hi}<\/span>       <span class=\"token comment\"># \u8f93\u51fa&#xff1a;Hi World<\/span><\/p>\n<p><span class=\"token comment\"># \u4ece\u672b\u5c3e\u5339\u914d\u66ff\u6362&#xff08;\u7528%&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${str2<span class=\"token operator\">\/<\/span><span class=\"token operator\">%<\/span>World<span class=\"token operator\">\/<\/span>Earth}<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;Hello Earth<\/span><\/p>\n<h4>7.5.6 \u5b57\u7b26\u4e32\u7efc\u5408\u793a\u4f8b<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5b57\u7b26\u4e32\u64cd\u4f5c\u6f14\u793a string_ops.sh<\/span><\/p>\n<p><span class=\"token assign-left variable\">filename<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;report.2024.01.15.pdf&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u539f\u59cb\u5b57\u7b26\u4e32&#xff1a;<span class=\"token variable\">$filename<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5b57\u7b26\u4e32\u957f\u5ea6&#xff1a;<span class=\"token variable\">${<span class=\"token operator\">#<\/span>filename}<\/span>&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u63d0\u53d6\u5404\u90e8\u5206<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6587\u4ef6\u540d&#xff08;\u4e0d\u542b\u6269\u5c55\u540d&#xff09;&#xff1a;<span class=\"token variable\">${filename<span class=\"token operator\">%<\/span>.*}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4e3b\u6269\u5c55\u540d&#xff1a;<span class=\"token variable\">${filename<span class=\"token operator\">##<\/span>*.}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u65e5\u671f\u90e8\u5206&#xff1a;<span class=\"token variable\">${filename<span class=\"token operator\">#<\/span>*.}<\/span>&#034;<\/span>          <span class=\"token comment\"># 2024.01.15.pdf<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u53bb\u6389.pdf\u540e&#xff1a;<span class=\"token variable\">${filename<span class=\"token operator\">%<\/span>.pdf}<\/span>&#034;<\/span>      <span class=\"token comment\"># report.2024.01.15<\/span><\/p>\n<p><span class=\"token comment\"># \u66ff\u6362<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u66ff\u6362.\u4e3a_&#xff1a;<span class=\"token variable\">${filename<span class=\"token operator\">\/<\/span><span class=\"token operator\">\/<\/span>.<span class=\"token operator\">\/<\/span>_}<\/span>&#034;<\/span>        <span class=\"token comment\"># report_2024_01_15_pdf<\/span><\/p>\n<p><span class=\"token comment\"># \u622a\u53d6<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u622a\u53d6\u524d6\u4e2a\u5b57\u7b26&#xff1a;<span class=\"token variable\">${filename<span class=\"token operator\">:<\/span>0<span class=\"token operator\">:<\/span>6}<\/span>&#034;<\/span>    <span class=\"token comment\"># report<\/span><\/p>\n<h4>7.5.7 \u6570\u7ec4\u2014\u2014\u4e00\u6392\u5e26\u7f16\u53f7\u7684\u76d2\u5b50<\/h4>\n<p>\u53d8\u91cf\u662f\u4e00\u4e2a\u76d2\u5b50&#xff0c;\u6570\u7ec4\u5c31\u662f\u4e00\u6392\u5e26\u7f16\u53f7\u7684\u76d2\u5b50\u3002<\/p>\n<p>\u60f3\u8c61\u4e00\u4e0b\u8d85\u5e02\u7684\u50a8\u7269\u67dc&#xff0c;\u4e00\u6392\u67dc\u5b50&#xff0c;\u6bcf\u4e2a\u67dc\u5b50\u90fd\u6709\u7f16\u53f7&#xff08;0\u53f7\u30011\u53f7\u30012\u53f7\u2026&#xff09;&#xff0c;\u6bcf\u4e2a\u67dc\u5b50\u91cc\u53ef\u4ee5\u653e\u4e0d\u540c\u7684\u4e1c\u897f\u3002<\/p>\n<p>\u5728Shell\u4e2d\u5b9a\u4e49\u6570\u7ec4&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e00&#xff1a;\u7528\u62ec\u53f7\u5b9a\u4e49<\/span><br \/>\n<span class=\"token assign-left variable\">fruits<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u82f9\u679c&#034;<\/span> <span class=\"token string\">&#034;\u9999\u8549&#034;<\/span> <span class=\"token string\">&#034;\u6a58\u5b50&#034;<\/span> <span class=\"token string\">&#034;\u8461\u8404&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e8c&#xff1a;\u9010\u4e2a\u8d4b\u503c<\/span><br \/>\nfruits<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u82f9\u679c&#034;<\/span><br \/>\nfruits<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u9999\u8549&#034;<\/span><br \/>\nfruits<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6a58\u5b50&#034;<\/span><br \/>\nfruits<span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u8461\u8404&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e09&#xff1a;\u7528declare\u58f0\u660e<\/span><br \/>\n<span class=\"token builtin class-name\">declare<\/span> <span class=\"token parameter variable\">-a<\/span> colors<br \/>\ncolors<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7ea2&#034;<\/span><br \/>\ncolors<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7eff&#034;<\/span><br \/>\ncolors<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u84dd&#034;<\/span><\/p>\n<p>\u6ce8\u610f&#xff1a;\u6570\u7ec4\u7684\u7f16\u53f7&#xff08;\u7d22\u5f15&#xff09;\u4ece0\u5f00\u59cb&#xff0c;\u4e0d\u662f\u4ece1\u5f00\u59cb&#xff01;\u8fd9\u662f\u5927\u90e8\u5206\u7f16\u7a0b\u8bed\u8a00\u7684\u60ef\u4f8b\u3002<\/p>\n<h4>7.5.8 \u8bfb\u53d6\u6570\u7ec4\u5143\u7d20<\/h4>\n<p><span class=\"token assign-left variable\">fruits<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u82f9\u679c&#034;<\/span> <span class=\"token string\">&#034;\u9999\u8549&#034;<\/span> <span class=\"token string\">&#034;\u6a58\u5b50&#034;<\/span> <span class=\"token string\">&#034;\u8461\u8404&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u8bfb\u53d6\u5355\u4e2a\u5143\u7d20<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${fruits<span class=\"token punctuation\">[<\/span>0<span class=\"token punctuation\">]<\/span>}<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u82f9\u679c<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${fruits<span class=\"token punctuation\">[<\/span>1<span class=\"token punctuation\">]<\/span>}<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u9999\u8549<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${fruits<span class=\"token punctuation\">[<\/span>2<span class=\"token punctuation\">]<\/span>}<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u6a58\u5b50<\/span><\/p>\n<p><span class=\"token comment\"># \u8bfb\u53d6\u6240\u6709\u5143\u7d20<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${fruits<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u82f9\u679c \u9999\u8549 \u6a58\u5b50 \u8461\u8404<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${fruits<span class=\"token punctuation\">[<\/span>*<span class=\"token punctuation\">]<\/span>}<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u82f9\u679c \u9999\u8549 \u6a58\u5b50 \u8461\u8404<\/span><\/p>\n<p><span class=\"token comment\"># \u83b7\u53d6\u6570\u7ec4\u957f\u5ea6<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${<span class=\"token operator\">#<\/span>fruits<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>   <span class=\"token comment\"># \u8f93\u51fa&#xff1a;4<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${<span class=\"token operator\">#<\/span>fruits<span class=\"token punctuation\">[<\/span>*<span class=\"token punctuation\">]<\/span>}<\/span>   <span class=\"token comment\"># \u8f93\u51fa&#xff1a;4<\/span><\/p>\n<p><span class=\"token comment\"># \u83b7\u53d6\u5355\u4e2a\u5143\u7d20\u7684\u957f\u5ea6<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">${<span class=\"token operator\">#<\/span>fruits<span class=\"token punctuation\">[<\/span>0<span class=\"token punctuation\">]<\/span>}<\/span>   <span class=\"token comment\"># \u8f93\u51fa&#xff1a;2&#xff08;&#034;\u82f9\u679c&#034;\u67092\u4e2a\u5b57\u7b26&#xff09;<\/span><\/p>\n<h4>7.5.9 \u904d\u5386\u6570\u7ec4<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u904d\u5386\u6570\u7ec4 array_loop.sh<\/span><\/p>\n<p><span class=\"token assign-left variable\">students<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span> <span class=\"token string\">&#034;\u674e\u56db&#034;<\/span> <span class=\"token string\">&#034;\u738b\u4e94&#034;<\/span> <span class=\"token string\">&#034;\u8d75\u516d&#034;<\/span> <span class=\"token string\">&#034;\u94b1\u4e03&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e00&#xff1a;\u7528for\u904d\u5386\u503c<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061; \u65b9\u5f0f\u4e00 &#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">student<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${students<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5b66\u751f&#xff1a;<span class=\"token variable\">$student<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e8c&#xff1a;\u7528\u7d22\u5f15\u904d\u5386<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061; \u65b9\u5f0f\u4e8c &#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${<span class=\"token operator\">!<\/span>students<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c<span class=\"token variable\"><span class=\"token variable\">$((<\/span>i<span class=\"token operator\">&#043;<\/span><span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span>\u4e2a\u5b66\u751f&#xff1a;<span class=\"token variable\">${students<span class=\"token punctuation\">[<\/span>$i<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e09&#xff1a;\u7528while\u904d\u5386<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061; \u65b9\u5f0f\u4e09 &#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">i<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><br \/>\n<span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$i<\/span> <span class=\"token parameter variable\">-lt<\/span> <span class=\"token variable\">${<span class=\"token operator\">#<\/span>students<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span> <span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7d22\u5f15<span class=\"token variable\">$i<\/span>&#xff1a;<span class=\"token variable\">${students<span class=\"token punctuation\">[<\/span>$i<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">let<\/span> i&#043;&#043;<br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<h4>7.5.10 \u6570\u7ec4\u7684\u589e\u5220\u6539<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u6570\u7ec4\u589e\u5220\u6539 array_ops.sh<\/span><\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u6570\u7ec4<\/span><br \/>\n<span class=\"token assign-left variable\">nums<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span> <span class=\"token number\">20<\/span> <span class=\"token number\">30<\/span> <span class=\"token number\">40<\/span> <span class=\"token number\">50<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u539f\u59cb\u6570\u7ec4&#xff1a;<span class=\"token variable\">${nums<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u4fee\u6539\u5143\u7d20<\/span><br \/>\nnums<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">300<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4fee\u6539\u540e&#xff1a;<span class=\"token variable\">${nums<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span>        <span class=\"token comment\"># 10 20 300 40 50<\/span><\/p>\n<p><span class=\"token comment\"># \u5728\u672b\u5c3e\u6dfb\u52a0\u5143\u7d20<\/span><br \/>\n<span class=\"token assign-left variable\">nums<\/span><span class=\"token operator\">&#043;&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">60<\/span> <span class=\"token number\">70<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6dfb\u52a0\u540e&#xff1a;<span class=\"token variable\">${nums<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span>        <span class=\"token comment\"># 10 20 300 40 50 60 70<\/span><\/p>\n<p><span class=\"token comment\"># \u5220\u9664\u5143\u7d20<\/span><br \/>\n<span class=\"token builtin class-name\">unset<\/span> nums<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5220\u9664\u7d22\u5f151\u540e&#xff1a;<span class=\"token variable\">${nums<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span>   <span class=\"token comment\"># 10 300 40 50 60 70<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7d22\u5f151\u7684\u503c&#xff1a;<span class=\"token variable\">${nums<span class=\"token punctuation\">[<\/span>1<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span>     <span class=\"token comment\"># \u7a7a&#xff08;\u88ab\u5220\u9664\u4e86&#xff09;<\/span><\/p>\n<p><span class=\"token comment\"># \u6ce8\u610f&#xff1a;\u5220\u9664\u540e\u6570\u7ec4\u7d22\u5f15\u4e0d\u8fde\u7eed&#xff01;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6570\u7ec4\u957f\u5ea6&#xff1a;<span class=\"token variable\">${<span class=\"token operator\">#<\/span>nums<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><\/p>\n<h4>7.5.11 \u5173\u8054\u6570\u7ec4&#xff08;\u5b57\u5178&#xff09;<\/h4>\n<p>Bash 4.0\u4ee5\u4e0a\u7248\u672c\u652f\u6301\u5173\u8054\u6570\u7ec4&#xff0c;\u5c31\u662f\u53ef\u4ee5\u7528\u5b57\u7b26\u4e32\u505a\u7d22\u5f15\u7684\u6570\u7ec4&#xff08;\u7c7b\u4f3cPython\u7684\u5b57\u5178&#xff09;&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5173\u8054\u6570\u7ec4 assoc.sh<\/span><\/p>\n<p><span class=\"token comment\"># \u58f0\u660e\u5173\u8054\u6570\u7ec4<\/span><br \/>\n<span class=\"token builtin class-name\">declare<\/span> <span class=\"token parameter variable\">-A<\/span> person<\/p>\n<p><span class=\"token comment\"># \u8d4b\u503c&#xff08;\u7528\u5b57\u7b26\u4e32\u505a\u7d22\u5f15&#xff09;<\/span><br \/>\nperson<span class=\"token punctuation\">[<\/span>name<span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\nperson<span class=\"token punctuation\">[<\/span>age<span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">25<\/span><br \/>\nperson<span class=\"token punctuation\">[<\/span>city<span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5317\u4eac&#034;<\/span><br \/>\nperson<span class=\"token punctuation\">[<\/span>job<span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7a0b\u5e8f\u5458&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u8bfb\u53d6<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u59d3\u540d&#xff1a;<span class=\"token variable\">${person<span class=\"token punctuation\">[<\/span>name<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5e74\u9f84&#xff1a;<span class=\"token variable\">${person<span class=\"token punctuation\">[<\/span>age<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u57ce\u5e02&#xff1a;<span class=\"token variable\">${person<span class=\"token punctuation\">[<\/span>city<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u904d\u5386\u6240\u6709\u503c<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6240\u6709\u4fe1\u606f&#xff1a;&#034;<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">key<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${<span class=\"token operator\">!<\/span>person<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  <span class=\"token variable\">$key<\/span> &#061; <span class=\"token variable\">${person<span class=\"token punctuation\">[<\/span>$key<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>\u59d3\u540d&#xff1a;\u5f20\u4e09<br \/>\n\u5e74\u9f84&#xff1a;25<br \/>\n\u57ce\u5e02&#xff1a;\u5317\u4eac<br \/>\n\u6240\u6709\u4fe1\u606f&#xff1a;<br \/>\n  name &#061; \u5f20\u4e09<br \/>\n  age &#061; 25<br \/>\n  city &#061; \u5317\u4eac<br \/>\n  job &#061; \u7a0b\u5e8f\u5458<\/p>\n<hr \/>\n<h3>7.6 \u7b97\u672f\u8fd0\u7b97\u4e0eexpr<\/h3>\n<h4>7.6.1 Shell\u7b97\u672f\u8fd0\u7b97\u7684\u75db\u70b9<\/h4>\n<p>\u5728\u5176\u4ed6\u8bed\u8a00\u91cc&#xff0c;\u505a\u52a0\u51cf\u4e58\u9664\u7279\u522b\u7b80\u5355&#xff1a;<\/p>\n<p><span class=\"token comment\"># Python<\/span><br \/>\na <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">10<\/span><br \/>\nb <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">20<\/span><br \/>\nc <span class=\"token operator\">&#061;<\/span> a <span class=\"token operator\">&#043;<\/span> b   <span class=\"token comment\"># c\u5c31\u662f30<\/span><\/p>\n<p>\u4f46\u5728Shell\u91cc&#xff0c;\u56e0\u4e3a\u6240\u6709\u53d8\u91cf\u90fd\u662f\u5b57\u7b26\u4e32&#xff0c;\u76f4\u63a5\u7528 &#043; \u662f\u4e0d\u884c\u7684&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">a<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">10<\/span><br \/>\n<span class=\"token assign-left variable\">b<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">20<\/span><br \/>\n<span class=\"token assign-left variable\">c<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$a<\/span>&#043;<span class=\"token variable\">$b<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$c<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;10&#043;20&#xff08;\u4e0d\u662f30&#xff01;&#xff09;<\/span><\/p>\n<p>Shell\u89c9\u5f97 $a \u548c $b \u662f\u5b57\u7b26\u4e32&#034;10&#034;\u548c&#034;20&#034;&#xff0c;&#043; \u53ea\u662f\u5b83\u4eec\u4e2d\u95f4\u7684\u4e00\u4e2a\u5b57\u7b26&#xff0c;\u62fc\u5728\u4e00\u8d77\u5c31\u662f&#034;10&#043;20&#034;\u3002<\/p>\n<p>\u8981\u544a\u8bc9Shell&#034;\u6211\u8981\u505a\u6570\u5b66\u8fd0\u7b97&#xff0c;\u4e0d\u662f\u5b57\u7b26\u4e32\u62fc\u63a5&#034;&#xff0c;\u9700\u8981\u7528\u7279\u6b8a\u7684\u65b9\u5f0f\u3002<\/p>\n<h4>7.6.2 \u65b9\u6cd5\u4e00&#xff1a;expr\u547d\u4ee4<\/h4>\n<p>expr \u662f&#034;expression&#034;&#xff08;\u8868\u8fbe\u5f0f&#xff09;\u7684\u7f29\u5199&#xff0c;\u4e13\u95e8\u7528\u6765\u505a\u6570\u5b66\u8fd0\u7b97&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">a<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">10<\/span><br \/>\n<span class=\"token assign-left variable\">b<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">20<\/span><\/p>\n<p><span class=\"token comment\"># \u52a0\u6cd5<\/span><br \/>\n<span class=\"token assign-left variable\">sum<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">&#096;<\/span><span class=\"token function\">expr<\/span> $a &#043; $b<span class=\"token variable\">&#096;<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$sum<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;30<\/span><\/p>\n<p><span class=\"token comment\"># \u51cf\u6cd5<\/span><br \/>\n<span class=\"token assign-left variable\">diff<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">expr<\/span> $a &#8211; $b<span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$diff<\/span>   <span class=\"token comment\"># \u8f93\u51fa&#xff1a;-10<\/span><\/p>\n<p><span class=\"token comment\"># \u4e58\u6cd5&#xff08;\u6ce8\u610f&#xff1a;\u4e58\u53f7\u8981\u8f6c\u4e49&#xff01;&#xff09;<\/span><br \/>\n<span class=\"token assign-left variable\">product<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">expr<\/span> $a <span class=\"token punctuation\">\\\\<\/span>* $b<span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$product<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;200<\/span><\/p>\n<p><span class=\"token comment\"># \u9664\u6cd5<\/span><br \/>\n<span class=\"token assign-left variable\">quotient<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">expr<\/span> $b \/ $a<span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$quotient<\/span>   <span class=\"token comment\"># \u8f93\u51fa&#xff1a;2<\/span><\/p>\n<p><span class=\"token comment\"># \u53d6\u4f59<\/span><br \/>\n<span class=\"token assign-left variable\">remainder<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">expr<\/span> $b % <span class=\"token number\">3<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$remainder<\/span>  <span class=\"token comment\"># \u8f93\u51fa&#xff1a;2<\/span><\/p>\n<p>\u6ce8\u610f\u51e0\u4e2a\u5751&#xff1a;<\/p>\n<li>\u8fd0\u7b97\u7b26\u4e24\u8fb9\u5fc5\u987b\u6709\u7a7a\u683c&#xff1a;expr $a &#043; $b \u5bf9&#xff0c;expr $a&#043;$b \u9519<\/li>\n<li>\u4e58\u53f7 * \u5fc5\u987b\u8f6c\u4e49\u5199\u6210 \\\\*&#xff1a;\u56e0\u4e3a * \u5728Shell\u91cc\u662f\u901a\u914d\u7b26<\/li>\n<li>\u53ea\u652f\u6301\u6574\u6570\u8fd0\u7b97&#xff1a;expr 10 \/ 3 \u7ed3\u679c\u662f3&#xff0c;\u4e0d\u662f3.33<\/li>\n<h4>7.6.3 \u65b9\u6cd5\u4e8c&#xff1a;\u53cc\u5c0f\u62ec\u53f7 $(( ))&#xff08;\u63a8\u8350&#xff09;<\/h4>\n<p>\u8fd9\u662f\u6700\u5e38\u7528\u3001\u6700\u65b9\u4fbf\u7684\u65b9\u5f0f&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">a<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">10<\/span><br \/>\n<span class=\"token assign-left variable\">b<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">20<\/span><\/p>\n<p><span class=\"token comment\"># \u52a0\u6cd5<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>a <span class=\"token operator\">&#043;<\/span> b<span class=\"token variable\">))<\/span><\/span>     <span class=\"token comment\"># \u8f93\u51fa&#xff1a;30<\/span><\/p>\n<p><span class=\"token comment\"># \u51cf\u6cd5<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>a <span class=\"token operator\">&#8211;<\/span> b<span class=\"token variable\">))<\/span><\/span>     <span class=\"token comment\"># \u8f93\u51fa&#xff1a;-10<\/span><\/p>\n<p><span class=\"token comment\"># \u4e58\u6cd5&#xff08;\u4e0d\u9700\u8981\u8f6c\u4e49&#xff01;&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>a <span class=\"token operator\">*<\/span> b<span class=\"token variable\">))<\/span><\/span>     <span class=\"token comment\"># \u8f93\u51fa&#xff1a;200<\/span><\/p>\n<p><span class=\"token comment\"># \u9664\u6cd5<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>b <span class=\"token operator\">\/<\/span> a<span class=\"token variable\">))<\/span><\/span>     <span class=\"token comment\"># \u8f93\u51fa&#xff1a;2<\/span><\/p>\n<p><span class=\"token comment\"># \u53d6\u4f59<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>b <span class=\"token operator\">%<\/span> <span class=\"token number\">3<\/span><span class=\"token variable\">))<\/span><\/span>     <span class=\"token comment\"># \u8f93\u51fa&#xff1a;2<\/span><\/p>\n<p><span class=\"token comment\"># \u5e42\u8fd0\u7b97&#xff08;expr\u4e0d\u652f\u6301&#xff0c;\u4f46\u53cc\u62ec\u53f7\u652f\u6301&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span><span class=\"token number\">2<\/span> <span class=\"token operator\">**<\/span> <span class=\"token number\">10<\/span><span class=\"token variable\">))<\/span><\/span>   <span class=\"token comment\"># \u8f93\u51fa&#xff1a;1024<\/span><\/p>\n<p>\u53cc\u5c0f\u62ec\u53f7\u7684\u4f18\u70b9&#xff1a;<\/p>\n<li>\u4e0d\u9700\u8981\u5728\u53d8\u91cf\u524d\u52a0 $&#xff08;\u52a0\u4e86\u4e5f\u884c&#xff09;&#xff1a;$((a&#043;b)) \u548c $((\\\\$a&#043;\\\\$b)) \u90fd\u5bf9<\/li>\n<li>\u4e58\u53f7\u4e0d\u9700\u8981\u8f6c\u4e49<\/li>\n<li>\u652f\u6301\u5e42\u8fd0\u7b97 **<\/li>\n<li>\u5199\u8d77\u6765\u66f4\u7b80\u6d01<\/li>\n<p>\u8d4b\u503c\u7ed9\u53d8\u91cf&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>a <span class=\"token operator\">&#043;<\/span> b<span class=\"token variable\">))<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$result<\/span>    <span class=\"token comment\"># 30<\/span><\/p>\n<p><span class=\"token comment\"># \u4e5f\u53ef\u4ee5\u76f4\u63a5\u4fee\u6539\u53d8\u91cf\u81ea\u8eab<\/span><br \/>\n<span class=\"token assign-left variable\">x<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">5<\/span><br \/>\n<span class=\"token assign-left variable\">x<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>x <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span>    <span class=\"token comment\"># x\u53d8\u62106<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$x<\/span><\/p>\n<h4>7.6.4 \u65b9\u6cd5\u4e09&#xff1a;let\u547d\u4ee4<\/h4>\n<p><span class=\"token assign-left variable\">a<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">10<\/span><br \/>\n<span class=\"token assign-left variable\">b<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">20<\/span><\/p>\n<p><span class=\"token builtin class-name\">let<\/span> <span class=\"token assign-left variable\">sum<\/span><span class=\"token operator\">&#061;<\/span>a&#043;b<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$sum<\/span>       <span class=\"token comment\"># 30<\/span><\/p>\n<p><span class=\"token builtin class-name\">let<\/span> <span class=\"token string\">&#034;product &#061; a * b&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$product<\/span>   <span class=\"token comment\"># 200<\/span><\/p>\n<p><span class=\"token comment\"># \u81ea\u589e\u81ea\u51cf<\/span><br \/>\n<span class=\"token builtin class-name\">let<\/span> a&#043;&#043;<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$a<\/span>         <span class=\"token comment\"># 11<\/span><\/p>\n<p><span class=\"token builtin class-name\">let<\/span> b&#8211;<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$b<\/span>         <span class=\"token comment\"># 19<\/span><\/p>\n<p><span class=\"token comment\"># \u590d\u5408\u8d4b\u503c<\/span><br \/>\n<span class=\"token builtin class-name\">let<\/span> <span class=\"token assign-left variable\">a<\/span><span class=\"token operator\">&#043;&#061;<\/span><span class=\"token number\">5<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$a<\/span>         <span class=\"token comment\"># 16<\/span><\/p>\n<p>let \u548c\u53cc\u62ec\u53f7 $(()) \u529f\u80fd\u7c7b\u4f3c&#xff0c;\u4f46 let \u540e\u9762\u4e0d\u9700\u8981 $\u3002<\/p>\n<h4>7.6.5 \u65b9\u6cd5\u56db&#xff1a;bc\u547d\u4ee4&#xff08;\u652f\u6301\u5c0f\u6570&#xff09;<\/h4>\n<p>\u524d\u9762\u4e09\u79cd\u65b9\u6cd5\u90fd\u53ea\u652f\u6301\u6574\u6570\u8fd0\u7b97\u3002\u5982\u679c\u8981\u505a\u5c0f\u6570\u8fd0\u7b97&#xff0c;\u9700\u8981\u7528 bc&#xff08;basic calculator&#xff09;&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u57fa\u672c\u7528\u6cd5<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;10 &#043; 20&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span>           <span class=\"token comment\"># 30<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;10.5 &#043; 20.3&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span>       <span class=\"token comment\"># 30.8<\/span><\/p>\n<p><span class=\"token comment\"># \u9664\u6cd5\u4fdd\u7559\u5c0f\u6570<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;scale&#061;2; 10 \/ 3&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span>   <span class=\"token comment\"># 3.33&#xff08;scale&#061;2\u8868\u793a\u4fdd\u75592\u4f4d\u5c0f\u6570&#xff09;<\/span><\/p>\n<p><span class=\"token comment\"># \u4e58\u65b9<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;2 ^ 10&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span>            <span class=\"token comment\"># 1024<\/span><\/p>\n<p><span class=\"token comment\"># \u6c42\u5e73\u65b9\u6839<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;sqrt(144)&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span>         <span class=\"token comment\"># 12<\/span><\/p>\n<p>\u5728\u811a\u672c\u4e2d\u4f7f\u7528bc&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u8ba1\u7b97\u5706\u7684\u9762\u79ef circle.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u5706\u7684\u534a\u5f84&#xff1a;&#034;<\/span> radius<\/p>\n<p><span class=\"token comment\"># \u7528bc\u8ba1\u7b97&#xff08;\u4fdd\u75592\u4f4d\u5c0f\u6570&#xff09;<\/span><br \/>\n<span class=\"token assign-left variable\">area<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;scale&#061;2; 3.14 * <span class=\"token variable\">$radius<\/span> * <span class=\"token variable\">$radius<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u534a\u5f84\u4e3a <span class=\"token variable\">$radius<\/span> \u7684\u5706&#xff0c;\u9762\u79ef\u662f <span class=\"token variable\">$area<\/span>&#034;<\/span><\/p>\n<h4>7.6.6 \u81ea\u589e\u81ea\u51cf\u8fd0\u7b97<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u81ea\u589e\u81ea\u51cf\u6f14\u793a<\/span><\/p>\n<p><span class=\"token assign-left variable\">x<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">10<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e00&#xff1a;\u7528\u53cc\u62ec\u53f7<\/span><br \/>\n<span class=\"token variable\"><span class=\"token punctuation\">((<\/span>x<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">))<\/span><\/span>    <span class=\"token comment\"># x &#061; 11<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$x<\/span><\/p>\n<p><span class=\"token variable\"><span class=\"token punctuation\">((<\/span>x<span class=\"token operator\">&#8212;<\/span><span class=\"token punctuation\">))<\/span><\/span>    <span class=\"token comment\"># x &#061; 10<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$x<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e8c&#xff1a;\u7528let<\/span><br \/>\n<span class=\"token builtin class-name\">let<\/span> x&#043;&#043;    <span class=\"token comment\"># x &#061; 11<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$x<\/span><\/p>\n<p><span class=\"token builtin class-name\">let<\/span> <span class=\"token assign-left variable\">x<\/span><span class=\"token operator\">&#043;&#061;<\/span><span class=\"token number\">5<\/span>   <span class=\"token comment\"># x &#061; 16<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$x<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e09&#xff1a;\u4f20\u7edf\u65b9\u5f0f<\/span><br \/>\n<span class=\"token assign-left variable\">x<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>x <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$x<\/span><\/p>\n<h4>7.6.7 \u7b97\u672f\u8fd0\u7b97\u7efc\u5408\u793a\u4f8b<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u7b80\u6613\u6210\u7ee9\u8ba1\u7b97\u5668 grade.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u8bed\u6587\u6210\u7ee9&#xff1a;&#034;<\/span> chinese<br \/>\n<span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u6570\u5b66\u6210\u7ee9&#xff1a;&#034;<\/span> math<br \/>\n<span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u82f1\u8bed\u6210\u7ee9&#xff1a;&#034;<\/span> english<\/p>\n<p><span class=\"token comment\"># \u8ba1\u7b97\u603b\u5206&#xff08;\u6574\u6570\u8fd0\u7b97&#xff09;<\/span><br \/>\n<span class=\"token assign-left variable\">total<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>chinese <span class=\"token operator\">&#043;<\/span> math <span class=\"token operator\">&#043;<\/span> english<span class=\"token variable\">))<\/span><\/span><\/p>\n<p><span class=\"token comment\"># \u8ba1\u7b97\u5e73\u5747\u5206&#xff08;\u9700\u8981\u5c0f\u6570&#xff0c;\u7528bc&#xff09;<\/span><br \/>\n<span class=\"token assign-left variable\">average<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;scale&#061;2; <span class=\"token variable\">$total<\/span> \/ 3&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u6210\u7ee9\u5355 &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8bed\u6587&#xff1a;<span class=\"token variable\">$chinese<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6570\u5b66&#xff1a;<span class=\"token variable\">$math<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u82f1\u8bed&#xff1a;<span class=\"token variable\">$english<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u603b\u5206&#xff1a;<span class=\"token variable\">$total<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5e73\u5747\u5206&#xff1a;<span class=\"token variable\">$average<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<h4>7.6.8 \u6570\u503c\u6bd4\u8f83<\/h4>\n<p>\u5728\u6761\u4ef6\u5224\u65ad\u4e2d\u7ecf\u5e38\u9700\u8981\u6bd4\u8f83\u6570\u5b57\u5927\u5c0f&#xff0c;Shell\u63d0\u4f9b\u4e86\u8fd9\u4e9b\u8fd0\u7b97\u7b26&#xff1a;<\/p>\n<table>\n<tr>\u8fd0\u7b97\u7b26\u542b\u4e49\u793a\u4f8b<\/tr>\n<tbody>\n<tr>\n<td>-eq<\/td>\n<td>\u7b49\u4e8e (equal)<\/td>\n<td>[ $a -eq $b ]<\/td>\n<\/tr>\n<tr>\n<td>-ne<\/td>\n<td>\u4e0d\u7b49\u4e8e (not equal)<\/td>\n<td>[ $a -ne $b ]<\/td>\n<\/tr>\n<tr>\n<td>-gt<\/td>\n<td>\u5927\u4e8e (greater than)<\/td>\n<td>[ $a -gt $b ]<\/td>\n<\/tr>\n<tr>\n<td>-lt<\/td>\n<td>\u5c0f\u4e8e (less than)<\/td>\n<td>[ $a -lt $b ]<\/td>\n<\/tr>\n<tr>\n<td>-ge<\/td>\n<td>\u5927\u4e8e\u7b49\u4e8e<\/td>\n<td>[ $a -ge $b ]<\/td>\n<\/tr>\n<tr>\n<td>-le<\/td>\n<td>\u5c0f\u4e8e\u7b49\u4e8e<\/td>\n<td>[ $a -le $b ]<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5728\u53cc\u62ec\u53f7\u4e2d\u4e5f\u53ef\u4ee5\u7528\u6570\u5b66\u7b26\u53f7&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">a<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">10<\/span><br \/>\n<span class=\"token assign-left variable\">b<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">20<\/span><\/p>\n<p><span class=\"token comment\"># \u4f20\u7edf\u5199\u6cd5<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$a<\/span> <span class=\"token parameter variable\">-lt<\/span> <span class=\"token variable\">$b<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$a<\/span> \u5c0f\u4e8e <span class=\"token variable\">$b<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u53cc\u62ec\u53f7\u5199\u6cd5&#xff08;\u66f4\u76f4\u89c2&#xff09;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token variable\"><span class=\"token punctuation\">((<\/span>a <span class=\"token operator\">&lt;<\/span> b<span class=\"token punctuation\">))<\/span><\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$a<\/span> \u5c0f\u4e8e <span class=\"token variable\">$b<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<hr \/>\n<h3>7.7 \u6761\u4ef6\u5224\u65ad if \u8bed\u53e5<\/h3>\n<h4>7.7.1 \u5982\u679c\u2026\u5c31\u2026\u2014\u2014\u751f\u6d3b\u4e2d\u7684\u6761\u4ef6\u5224\u65ad<\/h4>\n<p>\u6211\u4eec\u6bcf\u5929\u90fd\u5728\u505a\u6761\u4ef6\u5224\u65ad&#xff1a;<\/p>\n<ul>\n<li>\u5982\u679c\u4e0b\u96e8&#xff0c;\u5c31\u5e26\u4f1e<\/li>\n<li>\u5982\u679c\u7ea2\u706f&#xff0c;\u5c31\u505c\u4e0b\u6765&#xff1b;\u5426\u5219\u7ee7\u7eed\u8d70<\/li>\n<li>\u5982\u679c\u6210\u7ee9\u5927\u4e8e90&#xff0c;\u5c31\u8bc4\u4f18&#xff1b;\u5982\u679c\u5927\u4e8e60&#xff0c;\u5c31\u53ca\u683c&#xff1b;\u5426\u5219\u4e0d\u53ca\u683c<\/li>\n<\/ul>\n<p>Shell\u7684 if \u8bed\u53e5\u5c31\u662f\u5e72\u8fd9\u4e2a\u7684&#xff0c;\u8ba9\u7a0b\u5e8f\u6839\u636e\u4e0d\u540c\u7684\u60c5\u51b5\u505a\u4e0d\u540c\u7684\u4e8b\u3002<\/p>\n<h4>7.7.2 if \u8bed\u53e5\u7684\u4e09\u79cd\u5f62\u5f0f<\/h4>\n<p>\u5f62\u5f0f\u4e00&#xff1a;\u5355\u5206\u652f if<\/p>\n<p>\u8bed\u6cd5&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> \u6761\u4ef6 <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    \u547d\u4ee4<br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u793a\u4f8b&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5224\u65ad\u662f\u5426\u6210\u5e74<\/span><\/p>\n<p><span class=\"token assign-left variable\">age<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">20<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$age<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">18<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u5df2\u7ecf\u6210\u5e74\u4e86&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u6ce8\u610f\u51e0\u4e2a\u7ec6\u8282&#xff1a;<\/p>\n<li>if \u540e\u9762\u6709\u7a7a\u683c<\/li>\n<li>[ \u540e\u9762\u8981\u6709\u7a7a\u683c&#xff0c;] \u524d\u9762\u4e5f\u8981\u6709\u7a7a\u683c<\/li>\n<li>; then \u53ef\u4ee5\u6362\u884c\u5199\u6210&#xff1a;<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> \u6761\u4ef6 <span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token keyword\">then<\/span><br \/>\n    \u547d\u4ee4<br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<\/li>\n<li>fi \u662f if \u53cd\u8fc7\u6765\u5199&#xff0c;\u8868\u793a\u6761\u4ef6\u5224\u65ad\u7ed3\u675f<\/li>\n<p>\u5f62\u5f0f\u4e8c&#xff1a;\u53cc\u5206\u652f if-else<\/p>\n<p>\u8bed\u6cd5&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> \u6761\u4ef6 <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    \u547d\u4ee41<br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    \u547d\u4ee42<br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u793a\u4f8b&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5224\u65ad\u6210\u7ee9\u662f\u5426\u53ca\u683c<\/span><\/p>\n<p><span class=\"token assign-left variable\">score<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">55<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$score<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">60<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u606d\u559c&#xff0c;\u53ca\u683c\u4e86&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u62b1\u6b49&#xff0c;\u4e0d\u53ca\u683c&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u5f62\u5f0f\u4e09&#xff1a;\u591a\u5206\u652f if-elif-else<\/p>\n<p>\u8bed\u6cd5&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> \u6761\u4ef61 <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    \u547d\u4ee41<br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> \u6761\u4ef62 <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    \u547d\u4ee42<br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> \u6761\u4ef63 <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    \u547d\u4ee43<br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    \u547d\u4ee4n<br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u793a\u4f8b&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u6210\u7ee9\u7b49\u7ea7\u8bc4\u5b9a<\/span><\/p>\n<p><span class=\"token assign-left variable\">score<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">85<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$score<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">90<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f18\u79c0&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$score<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">80<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u826f\u597d&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$score<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">70<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4e2d\u7b49&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$score<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">60<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u53ca\u683c&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4e0d\u53ca\u683c&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<h4>7.7.3 test\u547d\u4ee4\u548c\u65b9\u62ec\u53f7[]<\/h4>\n<p>\u5176\u5b9e [ ] \u662f test \u547d\u4ee4\u7684\u7b80\u5199&#xff0c;\u4e0b\u9762\u4e24\u79cd\u5199\u6cd5\u5b8c\u5168\u7b49\u4ef7&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u5199\u6cd5\u4e00&#xff1a;\u7528test<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token builtin class-name\">test<\/span> <span class=\"token variable\">$a<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token variable\">$b<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u76f8\u7b49&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u5199\u6cd5\u4e8c&#xff1a;\u7528\u65b9\u62ec\u53f7&#xff08;\u66f4\u5e38\u7528&#xff09;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$a<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token variable\">$b<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u76f8\u7b49&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>[ ] \u66f4\u5e38\u7528&#xff0c;\u56e0\u4e3a\u66f4\u7b80\u6d01\u3002\u4f46\u8981\u6ce8\u610f [ \u540e\u9762\u548c ] \u524d\u9762\u5fc5\u987b\u6709\u7a7a\u683c&#xff01;<\/p>\n<h4>7.7.4 \u6761\u4ef6\u5224\u65ad\u7684\u79cd\u7c7b<\/h4>\n<p>\u4e00\u3001\u6570\u5b57\u6bd4\u8f83<\/p>\n<table>\n<tr>\u8fd0\u7b97\u7b26\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>-eq<\/td>\n<td>\u7b49\u4e8e<\/td>\n<\/tr>\n<tr>\n<td>-ne<\/td>\n<td>\u4e0d\u7b49\u4e8e<\/td>\n<\/tr>\n<tr>\n<td>-gt<\/td>\n<td>\u5927\u4e8e<\/td>\n<\/tr>\n<tr>\n<td>-lt<\/td>\n<td>\u5c0f\u4e8e<\/td>\n<\/tr>\n<tr>\n<td>-ge<\/td>\n<td>\u5927\u4e8e\u7b49\u4e8e<\/td>\n<\/tr>\n<tr>\n<td>-le<\/td>\n<td>\u5c0f\u4e8e\u7b49\u4e8e<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span class=\"token assign-left variable\">a<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">10<\/span><br \/>\n<span class=\"token assign-left variable\">b<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">20<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$a<\/span> <span class=\"token parameter variable\">-lt<\/span> <span class=\"token variable\">$b<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$a<\/span> \u5c0f\u4e8e <span class=\"token variable\">$b<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u4e8c\u3001\u5b57\u7b26\u4e32\u6bd4\u8f83<\/p>\n<table>\n<tr>\u8fd0\u7b97\u7b26\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>&#061;<\/td>\n<td>\u76f8\u7b49<\/td>\n<\/tr>\n<tr>\n<td>!&#061;<\/td>\n<td>\u4e0d\u76f8\u7b49<\/td>\n<\/tr>\n<tr>\n<td>-z<\/td>\n<td>\u5b57\u7b26\u4e32\u4e3a\u7a7a&#xff08;\u957f\u5ea6\u4e3a0&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>-n<\/td>\n<td>\u5b57\u7b26\u4e32\u975e\u7a7a<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span class=\"token assign-left variable\">str1<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;hello&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">str2<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;world&#034;<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$str1<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token variable\">$str2<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u76f8\u7b49&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4e0d\u76f8\u7b49&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u5224\u65ad\u5b57\u7b26\u4e32\u662f\u5426\u4e3a\u7a7a<\/span><br \/>\n<span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-z<\/span> <span class=\"token variable\">$name<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;name\u662f\u7a7a\u7684&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u4e09\u3001\u6587\u4ef6\u5224\u65ad<\/p>\n<p>\u8fd9\u662fShell\u7279\u6709\u7684&#xff0c;\u7528\u6765\u5224\u65ad\u6587\u4ef6\u7684\u5404\u79cd\u72b6\u6001&#xff1a;<\/p>\n<table>\n<tr>\u8fd0\u7b97\u7b26\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>-e \u6587\u4ef6<\/td>\n<td>\u6587\u4ef6\u5b58\u5728<\/td>\n<\/tr>\n<tr>\n<td>-f \u6587\u4ef6<\/td>\n<td>\u5b58\u5728\u4e14\u662f\u666e\u901a\u6587\u4ef6<\/td>\n<\/tr>\n<tr>\n<td>-d \u6587\u4ef6<\/td>\n<td>\u5b58\u5728\u4e14\u662f\u76ee\u5f55<\/td>\n<\/tr>\n<tr>\n<td>-r \u6587\u4ef6<\/td>\n<td>\u5b58\u5728\u4e14\u53ef\u8bfb<\/td>\n<\/tr>\n<tr>\n<td>-w \u6587\u4ef6<\/td>\n<td>\u5b58\u5728\u4e14\u53ef\u5199<\/td>\n<\/tr>\n<tr>\n<td>-x \u6587\u4ef6<\/td>\n<td>\u5b58\u5728\u4e14\u53ef\u6267\u884c<\/td>\n<\/tr>\n<tr>\n<td>-s \u6587\u4ef6<\/td>\n<td>\u5b58\u5728\u4e14\u975e\u7a7a<\/td>\n<\/tr>\n<tr>\n<td>\u6587\u4ef61 -nt \u6587\u4ef62<\/td>\n<td>\u6587\u4ef61\u6bd4\u6587\u4ef62\u65b0<\/td>\n<\/tr>\n<tr>\n<td>\u6587\u4ef61 -ot \u6587\u4ef62<\/td>\n<td>\u6587\u4ef61\u6bd4\u6587\u4ef62\u65e7<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u6587\u4ef6\u68c0\u67e5 file_check.sh<\/span><\/p>\n<p><span class=\"token assign-left variable\">file<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/etc\/passwd&#034;<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token variable\">$file<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6587\u4ef6\u5b58\u5728&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token variable\">$file<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u662f\u666e\u901a\u6587\u4ef6&#034;<\/span><br \/>\n    <span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-d<\/span> <span class=\"token variable\">$file<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u662f\u76ee\u5f55&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-r<\/span> <span class=\"token variable\">$file<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u53ef\u8bfb&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-w<\/span> <span class=\"token variable\">$file<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u53ef\u5199&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-x<\/span> <span class=\"token variable\">$file<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u53ef\u6267\u884c&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6587\u4ef6\u4e0d\u5b58\u5728&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<h4>7.7.5 \u903b\u8f91\u8fd0\u7b97\u7b26<\/h4>\n<p>\u5c31\u50cf\u6570\u5b66\u91cc\u6709&#034;\u4e14&#034;\u3001\u201c\u6216\u201d\u3001\u201c\u975e\u201d&#xff0c;Shell\u4e5f\u6709&#xff1a;<\/p>\n<table>\n<tr>\u8fd0\u7b97\u7b26\u542b\u4e49\u793a\u4f8b<\/tr>\n<tbody>\n<tr>\n<td>-a \u6216 &amp;&amp;<\/td>\n<td>\u903b\u8f91\u4e0e&#xff08;\u4e14&#xff09;<\/td>\n<td>[ $a -gt 0 -a $a -lt 10 ]<\/td>\n<\/tr>\n<tr>\n<td>-o \u6216 ||<\/td>\n<td>\u903b\u8f91\u6216<\/td>\n<td>[ $a -lt 0 -o $a -gt 100 ]<\/td>\n<\/tr>\n<tr>\n<td>!<\/td>\n<td>\u903b\u8f91\u975e<\/td>\n<td>[ ! -e $file ]<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u903b\u8f91\u8fd0\u7b97\u6f14\u793a<\/span><\/p>\n<p><span class=\"token assign-left variable\">age<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">25<\/span><br \/>\n<span class=\"token assign-left variable\">gender<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7537&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u903b\u8f91\u4e0e&#xff1a;\u4e24\u4e2a\u6761\u4ef6\u90fd\u6ee1\u8db3<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$age<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">22<\/span> <span class=\"token parameter variable\">-a<\/span> <span class=\"token variable\">$gender<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u7537&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8fbe\u5230\u6cd5\u5b9a\u7ed3\u5a5a\u5e74\u9f84&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u903b\u8f91\u6216&#xff1a;\u6ee1\u8db3\u4e00\u4e2a\u5373\u53ef<\/span><br \/>\n<span class=\"token assign-left variable\">temperature<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">38<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$temperature<\/span> <span class=\"token parameter variable\">-lt<\/span> <span class=\"token number\">0<\/span> <span class=\"token parameter variable\">-o<\/span> <span class=\"token variable\">$temperature<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token number\">37<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f53\u6e29\u5f02\u5e38&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u903b\u8f91\u975e<\/span><br \/>\n<span class=\"token assign-left variable\">file<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/not_exist&#034;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token operator\">!<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token variable\">$file<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6587\u4ef6\u4e0d\u5b58\u5728&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u7528&amp;&amp;\u548c||\u7684\u7b80\u5199\u5f62\u5f0f&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u5982\u679c\u547d\u4ee41\u6210\u529f&#xff0c;\u5c31\u6267\u884c\u547d\u4ee42<\/span><br \/>\ncommand1 <span class=\"token operator\">&amp;&amp;<\/span> command2<\/p>\n<p><span class=\"token comment\"># \u5982\u679c\u547d\u4ee41\u5931\u8d25&#xff0c;\u5c31\u6267\u884c\u547d\u4ee42<\/span><br \/>\ncommand1 <span class=\"token operator\">||<\/span> command2<\/p>\n<p><span class=\"token comment\"># \u5b9e\u9645\u4f8b\u5b50<\/span><br \/>\n<span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-d<\/span> \/tmp\/test <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token function\">mkdir<\/span> <span class=\"token parameter variable\">-p<\/span> \/tmp\/test<br \/>\n<span class=\"token comment\"># \u5982\u679c\u76ee\u5f55\u4e0d\u5b58\u5728&#xff0c;\u5c31\u521b\u5efa\u5b83<\/span><\/p>\n<p><span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-f<\/span> config.txt <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u914d\u7f6e\u6587\u4ef6\u5b58\u5728&#034;<\/span><br \/>\n<span class=\"token comment\"># \u5982\u679c\u6587\u4ef6\u5b58\u5728&#xff0c;\u5c31\u8f93\u51fa\u63d0\u793a<\/span><\/p>\n<h4>7.7.6 \u53cc\u62ec\u53f7\u7684\u9ad8\u7ea7\u6761\u4ef6\u5224\u65ad<\/h4>\n<p>\u7528 (( )) \u505a\u6570\u5b66\u6bd4\u8f83\u66f4\u76f4\u89c2&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">a<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">10<\/span><br \/>\n<span class=\"token assign-left variable\">b<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">20<\/span><\/p>\n<p><span class=\"token comment\"># \u4f20\u7edf\u5199\u6cd5<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$a<\/span> <span class=\"token parameter variable\">-lt<\/span> <span class=\"token variable\">$b<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$a<\/span> &lt; <span class=\"token variable\">$b<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u53cc\u62ec\u53f7\u5199\u6cd5&#xff08;\u53ef\u4ee5\u7528\u6570\u5b66\u7b26\u53f7\u4e86&#xff01;&#xff09;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token variable\"><span class=\"token punctuation\">((<\/span>a <span class=\"token operator\">&lt;<\/span> b<span class=\"token punctuation\">))<\/span><\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$a<\/span> &lt; <span class=\"token variable\">$b<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u4e5f\u652f\u6301 &amp;&amp; \u548c ||<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token variable\"><span class=\"token punctuation\">((<\/span>a <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&amp;&amp;<\/span> a <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">100<\/span><span class=\"token punctuation\">))<\/span><\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;a\u57280\u5230100\u4e4b\u95f4&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u7528 [[ ]] \u505a\u5b57\u7b26\u4e32\u6bd4\u8f83\u66f4\u5f3a\u5927&#xff08;\u652f\u6301\u6a21\u5f0f\u5339\u914d&#xff09;&#xff1a;<\/p>\n<p><span class=\"token assign-left variable\">str<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;hello world&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u652f\u6301*\u901a\u914d\u7b26<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$str<\/span> <span class=\"token operator\">&#061;&#061;<\/span> hello* <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4ee5hello\u5f00\u5934&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u652f\u6301\u6b63\u5219\u5339\u914d&#xff08;\u7528&#061;~&#xff09;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$str<\/span> <span class=\"token operator\">&#061;~<\/span> ^<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span>-9<span class=\"token punctuation\">]<\/span>&#043;$ <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5168\u662f\u6570\u5b57&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4e0d\u5168\u662f\u6570\u5b57&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<h4>7.7.7 if\u5d4c\u5957<\/h4>\n<p>if\u91cc\u9762\u53ef\u4ee5\u518d\u5957if&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5d4c\u5957if\u793a\u4f8b<\/span><\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u5e74\u9f84&#xff1a;&#034;<\/span> age<br \/>\n<span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u662f\u5426\u6709\u9a7e\u7167(y\/n)&#xff1a;&#034;<\/span> has_license<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$age<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">18<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u5df2\u6210\u5e74&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$has_license<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;y&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u53ef\u4ee5\u5f00\u8f66\u4e86&#xff01;&#034;<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u9700\u8981\u5148\u8003\u9a7e\u7167&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u8fd8\u672a\u6210\u5e74&#xff0c;\u4e0d\u80fd\u5f00\u8f66&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<h4>7.7.8 \u7efc\u5408\u793a\u4f8b&#xff1a;\u5224\u65ad\u95f0\u5e74<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5224\u65ad\u95f0\u5e74 leap.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u5e74\u4efd&#xff1a;&#034;<\/span> year<\/p>\n<p><span class=\"token comment\"># \u95f0\u5e74\u89c4\u5219&#xff1a;<\/span><br \/>\n<span class=\"token comment\"># 1. \u80fd\u88ab4\u6574\u9664\u4f46\u4e0d\u80fd\u88ab100\u6574\u9664&#xff0c;\u662f\u95f0\u5e74<\/span><br \/>\n<span class=\"token comment\"># 2. \u80fd\u88ab400\u6574\u9664&#xff0c;\u662f\u95f0\u5e74<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>$year <span class=\"token operator\">%<\/span> <span class=\"token number\">400<\/span><span class=\"token variable\">))<\/span><\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$year<\/span> \u5e74\u662f\u95f0\u5e74&#034;<\/span><br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>$year <span class=\"token operator\">%<\/span> <span class=\"token number\">4<\/span><span class=\"token variable\">))<\/span><\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>$year <span class=\"token operator\">%<\/span> <span class=\"token number\">100<\/span><span class=\"token variable\">))<\/span><\/span> <span class=\"token parameter variable\">-ne<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$year<\/span> \u5e74\u662f\u95f0\u5e74&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$year<\/span> \u5e74\u4e0d\u662f\u95f0\u5e74&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<hr \/>\n<h3>7.8 \u5faa\u73af\u7ed3\u6784 for\u3001while\u3001until<\/h3>\n<h4>7.8.1 \u4e3a\u4ec0\u4e48\u8981\u5faa\u73af\u2014\u2014\u61d2\u4eba\u7684\u798f\u97f3<\/h4>\n<p>\u5047\u8bbe\u4f60\u8981\u6253\u53701\u5230100&#xff0c;\u5982\u679c\u6ca1\u6709\u5faa\u73af&#xff0c;\u4f60\u5f97\u5199100\u884c echo&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token number\">2<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token number\">3<\/span><br \/>\n<span class=\"token comment\"># &#8230; 97\u884c\u7701\u7565<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token number\">100<\/span><\/p>\n<p>\u592a\u8822\u4e86&#xff01;\u6709\u5faa\u73af\u7684\u8bdd&#xff0c;\u53ea\u9700\u8981\u51e0\u884c&#xff1a;<\/p>\n<p><span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$i<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u8fd9\u5c31\u662f\u5faa\u73af\u7684\u610f\u4e49&#xff1a;\u8ba9\u7535\u8111\u66ff\u4f60\u505a\u91cd\u590d\u7684\u4e8b\u60c5\u3002<\/p>\n<h4>7.8.2 for \u5faa\u73af<\/h4>\n<p>\u57fa\u672c\u8bed\u6cd5&#xff1a;<\/p>\n<p><span class=\"token keyword\">for<\/span> \u53d8\u91cf <span class=\"token keyword\">in<\/span> \u5217\u8868<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    \u547d\u4ee4<br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u793a\u4f8b\u4e00&#xff1a;\u904d\u5386\u5217\u8868<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">fruit<\/span> <span class=\"token keyword\">in<\/span> \u82f9\u679c \u9999\u8549 \u6a58\u5b50 \u8461\u8404<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6211\u559c\u6b22\u5403 <span class=\"token variable\">$fruit<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>\u6211\u559c\u6b22\u5403 \u82f9\u679c<br \/>\n\u6211\u559c\u6b22\u5403 \u9999\u8549<br \/>\n\u6211\u559c\u6b22\u5403 \u6a58\u5b50<br \/>\n\u6211\u559c\u6b22\u5403 \u8461\u8404<\/p>\n<p>\u6267\u884c\u8fc7\u7a0b&#xff1a;<\/p>\n<li>fruit \u5148\u53d6&#034;\u82f9\u679c&#034;&#xff0c;\u6267\u884c echo<\/li>\n<li>fruit \u518d\u53d6&#034;\u9999\u8549&#034;&#xff0c;\u6267\u884c echo<\/li>\n<li>\u4f9d\u6b64\u7c7b\u63a8&#xff0c;\u76f4\u5230\u5217\u8868\u904d\u5386\u5b8c<\/li>\n<p>\u793a\u4f8b\u4e8c&#xff1a;\u904d\u5386\u6570\u5b57\u8303\u56f4<\/p>\n<p><span class=\"token comment\"># \u65b9\u6cd5\u4e00&#xff1a;\u7528\u82b1\u62ec\u53f7<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c <span class=\"token variable\">$i<\/span> \u6b21&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u6cd5\u4e8c&#xff1a;\u7528seq\u547d\u4ee4<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">seq<\/span> <span class=\"token number\">1<\/span> <span class=\"token number\">5<\/span><span class=\"token variable\">)<\/span><\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c <span class=\"token variable\">$i<\/span> \u6b21&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token comment\"># \u5e26\u6b65\u957f&#xff08;\u6bcf\u6b21\u52a02&#xff09;<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$i<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;1 3 5 7 9<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token comment\"># \u5012\u5e8f<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$i<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;5 4 3 2 1<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u793a\u4f8b\u4e09&#xff1a;C\u8bed\u8a00\u98ce\u683c\u7684for<\/p>\n<p>\u5982\u679c\u4f60\u5b66\u8fc7C\/Java&#xff0c;\u8fd9\u79cd\u5199\u6cd5\u66f4\u4eb2\u5207&#xff1a;<\/p>\n<p><span class=\"token keyword\">for<\/span> <span class=\"token variable\"><span class=\"token punctuation\">((<\/span>i<span class=\"token operator\">&#061;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&lt;&#061;<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">))<\/span><\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c <span class=\"token variable\">$i<\/span> \u6b21\u5faa\u73af&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u6267\u884c\u8fc7\u7a0b&#xff1a;<\/p>\n<li>\u521d\u59cb\u5316 i&#061;1<\/li>\n<li>\u5224\u65ad i&lt;&#061;5&#xff0c;\u6210\u7acb\u5c31\u6267\u884c\u5faa\u73af\u4f53<\/li>\n<li>\u6267\u884c\u5b8c\u5faa\u73af\u4f53\u540e i&#043;&#043;<\/li>\n<li>\u56de\u5230\u7b2c2\u6b65&#xff0c;\u76f4\u5230 i&gt;5 \u7ed3\u675f<\/li>\n<p>\u793a\u4f8b\u56db&#xff1a;\u904d\u5386\u547d\u4ee4\u7ed3\u679c<\/p>\n<p><span class=\"token comment\"># \u904d\u5386\u5f53\u524d\u76ee\u5f55\u6240\u6709.txt\u6587\u4ef6<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">file<\/span> <span class=\"token keyword\">in<\/span> *.txt<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u627e\u5230\u6587\u4ef6&#xff1a;<span class=\"token variable\">$file<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token comment\"># \u904d\u5386\/etc\u76ee\u5f55\u4e0b\u7684\u5185\u5bb9<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">item<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">ls<\/span> \/etc<span class=\"token variable\">)<\/span><\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$item<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u793a\u4f8b\u4e94&#xff1a;\u904d\u5386\u6570\u7ec4<\/p>\n<p><span class=\"token assign-left variable\">colors<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7ea2&#034;<\/span> <span class=\"token string\">&#034;\u6a59&#034;<\/span> <span class=\"token string\">&#034;\u9ec4&#034;<\/span> <span class=\"token string\">&#034;\u7eff&#034;<\/span> <span class=\"token string\">&#034;\u84dd&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">color<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${colors<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u989c\u8272&#xff1a;<span class=\"token variable\">$color<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u793a\u4f8b\u516d&#xff1a;\u904d\u5386\u4f4d\u7f6e\u53c2\u6570<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u904d\u5386\u6240\u6709\u4f20\u5165\u7684\u53c2\u6570<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">arg<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$&#064;<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u53c2\u6570&#xff1a;<span class=\"token variable\">$arg<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<h4>7.8.3 while \u5faa\u73af<\/h4>\n<p>while\u662f&#034;\u5f53\u2026\u7684\u65f6\u5019&#034;\u7684\u610f\u601d&#xff0c;\u53ea\u8981\u6761\u4ef6\u6210\u7acb&#xff0c;\u5c31\u4e00\u76f4\u5faa\u73af\u3002<\/p>\n<p>\u8bed\u6cd5&#xff1a;<\/p>\n<p><span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">[<\/span> \u6761\u4ef6 <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    \u547d\u4ee4<br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u793a\u4f8b\u4e00&#xff1a;\u8ba1\u6570\u5668<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u6253\u53701\u52305<\/span><\/p>\n<p><span class=\"token assign-left variable\">i<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">1<\/span><br \/>\n<span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$i<\/span> <span class=\"token parameter variable\">-le<\/span> <span class=\"token number\">5<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c <span class=\"token variable\">$i<\/span> \u6b21&#034;<\/span><br \/>\n    <span class=\"token assign-left variable\">i<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>i <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span>    <span class=\"token comment\"># \u522b\u5fd8\u4e86\u8ba9\u8ba1\u6570\u5668\u589e\u52a0&#xff0c;\u5426\u5219\u6b7b\u5faa\u73af&#xff01;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u6ce8\u610f&#xff1a;while\u5faa\u73af\u4e2d\u6700\u5bb9\u6613\u72af\u7684\u9519\u8bef\u5c31\u662f\u5fd8\u8bb0\u66f4\u65b0\u8ba1\u6570\u5668&#xff0c;\u5bfc\u81f4\u65e0\u9650\u5faa\u73af\u3002\u5c31\u50cf\u8dd1\u6b65\u673a&#xff0c;\u5982\u679c\u4f60\u4e0d\u6309\u505c\u6b62\u952e&#xff0c;\u5b83\u4f1a\u4e00\u76f4\u8f6c\u3002<\/p>\n<p>\u793a\u4f8b\u4e8c&#xff1a;\u9010\u884c\u8bfb\u53d6\u6587\u4ef6<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u9010\u884c\u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9<\/span><\/p>\n<p><span class=\"token assign-left variable\">file<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/etc\/passwd&#034;<\/span><br \/>\n<span class=\"token keyword\">while<\/span> <span class=\"token builtin class-name\">read<\/span> line<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u884c\u5185\u5bb9&#xff1a;<span class=\"token variable\">$line<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token variable\">$file<\/span><\/p>\n<p>\u8fd9\u4e2a\u7528\u6cd5\u975e\u5e38\u5b9e\u7528&#xff0c;&lt; $file \u628a\u6587\u4ef6\u5185\u5bb9\u8f93\u5165\u7ed9while\u5faa\u73af&#xff0c;\u6bcf\u6b21\u8bfb\u53d6\u4e00\u884c\u8d4b\u7ed9 line \u53d8\u91cf\u3002<\/p>\n<p>\u793a\u4f8b\u4e09&#xff1a;\u4ea4\u4e92\u5f0f\u83dc\u5355<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u4ea4\u4e92\u5f0f\u83dc\u5355 menu.sh<\/span><\/p>\n<p><span class=\"token keyword\">while<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061; \u7cfb\u7edf\u7ba1\u7406\u83dc\u5355 &#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;1. \u67e5\u770b\u78c1\u76d8\u4f7f\u7528\u60c5\u51b5&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;2. \u67e5\u770b\u5185\u5b58\u4f7f\u7528\u60c5\u51b5&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;3. \u67e5\u770b\u5f53\u524d\u767b\u5f55\u7528\u6237&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;4. \u9000\u51fa&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u9009\u62e9 [1-4]&#xff1a;&#034;<\/span> choice<\/p>\n<p>    <span class=\"token keyword\">case<\/span> <span class=\"token variable\">$choice<\/span> <span class=\"token keyword\">in<\/span><br \/>\n        <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token function\">df<\/span> <span class=\"token parameter variable\">-h<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token function\">free<\/span> <span class=\"token parameter variable\">-h<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token function\">who<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u518d\u89c1&#xff01;&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token builtin class-name\">break<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        *<span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u65e0\u6548\u9009\u62e9&#xff0c;\u8bf7\u91cd\u8bd5&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">esac<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<h4>7.8.4 until \u5faa\u73af<\/h4>\n<p>until\u662f&#034;\u76f4\u5230\u2026\u624d&#034;\u7684\u610f\u601d&#xff0c;\u548cwhile\u6b63\u597d\u76f8\u53cd&#xff1a;while\u662f\u6761\u4ef6\u6210\u7acb\u5c31\u5faa\u73af&#xff0c;until\u662f\u6761\u4ef6\u4e0d\u6210\u7acb\u5c31\u5faa\u73af&#xff08;\u76f4\u5230\u6761\u4ef6\u6210\u7acb\u624d\u505c\u6b62&#xff09;\u3002<\/p>\n<p>\u8bed\u6cd5&#xff1a;<\/p>\n<p><span class=\"token keyword\">until<\/span> <span class=\"token punctuation\">[<\/span> \u6761\u4ef6 <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    \u547d\u4ee4<br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u793a\u4f8b&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u7b49\u5f85\u67d0\u4e2a\u7528\u6237\u767b\u5f55<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b49\u5f85\u7528\u6237admin\u767b\u5f55&#8230;&#034;<\/span><\/p>\n<p><span class=\"token keyword\">until<\/span> <span class=\"token function\">who<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-q<\/span> <span class=\"token string\">&#034;admin&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;admin\u8fd8\u6ca1\u767b\u5f55&#xff0c;\u7ee7\u7eed\u7b49\u5f85&#8230;&#034;<\/span><br \/>\n    <span class=\"token function\">sleep<\/span> <span class=\"token number\">5<\/span>    <span class=\"token comment\"># \u7b495\u79d2\u518d\u68c0\u67e5<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;admin\u767b\u5f55\u4e86&#xff01;&#034;<\/span><\/p>\n<p>while\u548cuntil\u7684\u5173\u7cfb&#xff1a;<\/p>\n<p><span class=\"token comment\"># while\u5199\u6cd5&#xff1a;\u6761\u4ef6\u4e3a\u771f\u65f6\u5faa\u73af<\/span><br \/>\n<span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">[<\/span> \u6761\u4ef6\u4e3a\u5047 <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    \u547d\u4ee4<br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token comment\"># \u7b49\u4ef7\u7684until\u5199\u6cd5&#xff1a;\u6761\u4ef6\u4e3a\u5047\u65f6\u5faa\u73af&#xff08;\u6761\u4ef6\u4e3a\u771f\u65f6\u505c\u6b62&#xff09;<\/span><br \/>\n<span class=\"token keyword\">until<\/span> <span class=\"token punctuation\">[<\/span> \u6761\u4ef6\u4e3a\u771f <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    \u547d\u4ee4<br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<h4>7.8.5 break \u548c continue<\/h4>\n<p>\u8fd9\u4e24\u4e2a\u5173\u952e\u5b57\u7528\u6765\u63a7\u5236\u5faa\u73af\u7684\u6d41\u7a0b&#xff1a;<\/p>\n<ul>\n<li>break&#xff1a;\u8df3\u51fa\u6574\u4e2a\u5faa\u73af&#xff08;\u201c\u6211\u4e0d\u5e72\u4e86&#xff0c;\u8d70\u4eba\u201d&#xff09;<\/li>\n<li>continue&#xff1a;\u8df3\u8fc7\u672c\u6b21\u5faa\u73af&#xff0c;\u8fdb\u5165\u4e0b\u4e00\u6b21&#xff08;\u201c\u8fd9\u6b21\u7b97\u4e86&#xff0c;\u4e0b\u4e00\u4e2a\u201d&#xff09;<\/li>\n<\/ul>\n<p>break\u793a\u4f8b&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u627e\u5230\u7b2c\u4e00\u4e2a\u5927\u4e8e5\u7684\u6570\u5c31\u505c\u6b62<\/span><\/p>\n<p><span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token number\">1<\/span> <span class=\"token number\">2<\/span> <span class=\"token number\">3<\/span> <span class=\"token number\">4<\/span> <span class=\"token number\">5<\/span> <span class=\"token number\">6<\/span> <span class=\"token number\">7<\/span> <span class=\"token number\">8<\/span> <span class=\"token number\">9<\/span> <span class=\"token number\">10<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$i<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token number\">5<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u627e\u5230\u7b2c\u4e00\u4e2a\u5927\u4e8e5\u7684\u6570&#xff1a;<span class=\"token variable\">$i<\/span>&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">break<\/span>    <span class=\"token comment\"># \u8df3\u51fa\u5faa\u73af<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u68c0\u67e5&#xff1a;<span class=\"token variable\">$i<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5faa\u73af\u7ed3\u675f&#034;<\/span><\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>\u68c0\u67e5&#xff1a;1<br \/>\n\u68c0\u67e5&#xff1a;2<br \/>\n\u68c0\u67e5&#xff1a;3<br \/>\n\u68c0\u67e5&#xff1a;4<br \/>\n\u68c0\u67e5&#xff1a;5<br \/>\n\u627e\u5230\u7b2c\u4e00\u4e2a\u5927\u4e8e5\u7684\u6570&#xff1a;6<br \/>\n\u5faa\u73af\u7ed3\u675f<\/p>\n<p>continue\u793a\u4f8b&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u6253\u53701\u523010&#xff0c;\u4f46\u8df3\u8fc7\u5076\u6570<\/span><\/p>\n<p><span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token variable\"><span class=\"token punctuation\">((<\/span>i <span class=\"token operator\">%<\/span> <span class=\"token number\">2<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">))<\/span><\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">continue<\/span>    <span class=\"token comment\"># \u8df3\u8fc7\u5076\u6570<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$i<\/span>    <span class=\"token comment\"># \u53ea\u6253\u5370\u5947\u6570<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>1<br \/>\n3<br \/>\n5<br \/>\n7<br \/>\n9<\/p>\n<h4>7.8.6 \u5d4c\u5957\u5faa\u73af<\/h4>\n<p>\u5faa\u73af\u91cc\u9762\u53ef\u4ee5\u518d\u5957\u5faa\u73af&#xff0c;\u6700\u5178\u578b\u7684\u4f8b\u5b50\u662f\u6253\u5370\u4e58\u6cd5\u8868&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u4e5d\u4e5d\u4e58\u6cd5\u8868 multiplication.sh<\/span><\/p>\n<p><span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">9<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">j<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">9<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n        <span class=\"token comment\"># \u53ea\u6253\u5370 j &lt;&#061; i \u7684\u90e8\u5206&#xff08;\u5f62\u6210\u4e09\u89d2\u5f62&#xff09;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$j<\/span> <span class=\"token parameter variable\">-le<\/span> <span class=\"token variable\">$i<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%d\u00d7%d&#061;%-4d&#034;<\/span> <span class=\"token variable\">$j<\/span> <span class=\"token variable\">$i<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>i <span class=\"token operator\">*<\/span> j<span class=\"token variable\">))<\/span><\/span><br \/>\n        <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token keyword\">done<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span>    <span class=\"token comment\"># \u6bcf\u884c\u7ed3\u675f\u540e\u6362\u884c<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>1\u00d71&#061;1<br \/>\n1\u00d72&#061;2   2\u00d72&#061;4<br \/>\n1\u00d73&#061;3   2\u00d73&#061;6   3\u00d73&#061;9<br \/>\n1\u00d74&#061;4   2\u00d74&#061;8   3\u00d74&#061;12  4\u00d74&#061;16<br \/>\n&#8230;&#xff08;\u7701\u7565&#xff09;<br \/>\n1\u00d79&#061;9   2\u00d79&#061;18  3\u00d79&#061;27  4\u00d79&#061;36  5\u00d79&#061;45  6\u00d79&#061;54  7\u00d79&#061;63  8\u00d79&#061;72  9\u00d79&#061;81  <\/p>\n<h4>7.8.7 select \u5faa\u73af&#xff08;\u83dc\u5355\u9009\u62e9&#xff09;<\/h4>\n<p>select \u662f\u4e00\u4e2a\u4e13\u95e8\u7528\u6765\u505a\u83dc\u5355\u7684\u5faa\u73af&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># select\u83dc\u5355 select_menu.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8bf7\u9009\u62e9\u4f60\u559c\u6b22\u7684\u7f16\u7a0b\u8bed\u8a00&#xff1a;&#034;<\/span><br \/>\n<span class=\"token keyword\">select<\/span> <span class=\"token for-or-select variable\">lang<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;Python&#034;<\/span> <span class=\"token string\">&#034;Java&#034;<\/span> <span class=\"token string\">&#034;C&#043;&#043;&#034;<\/span> <span class=\"token string\">&#034;Shell&#034;<\/span> <span class=\"token string\">&#034;\u9000\u51fa&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token keyword\">case<\/span> <span class=\"token variable\">$lang<\/span> <span class=\"token keyword\">in<\/span><br \/>\n        <span class=\"token string\">&#034;\u9000\u51fa&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u518d\u89c1&#xff01;&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">break<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        *<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u9009\u62e9\u4e86 <span class=\"token variable\">$lang<\/span>&#034;<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">esac<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p>\u8fd0\u884c\u540e\u6548\u679c&#xff1a;<\/p>\n<p>\u8bf7\u9009\u62e9\u4f60\u559c\u6b22\u7684\u7f16\u7a0b\u8bed\u8a00&#xff1a;<br \/>\n1) Python<br \/>\n2) Java<br \/>\n3) C&#043;&#043;<br \/>\n4) Shell<br \/>\n5) \u9000\u51fa<br \/>\n#? <\/p>\n<p>\u7528\u6237\u8f93\u5165\u6570\u5b57\u9009\u62e9&#xff0c;\u975e\u5e38\u65b9\u4fbf\u3002<\/p>\n<h4>7.8.8 \u5faa\u73af\u7efc\u5408\u793a\u4f8b&#xff1a;\u731c\u6570\u5b57\u6e38\u620f<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u731c\u6570\u5b57\u6e38\u620f guess.sh<\/span><\/p>\n<p><span class=\"token comment\"># \u751f\u62101-100\u7684\u968f\u673a\u6570<\/span><br \/>\n<span class=\"token assign-left variable\">target<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>RANDOM <span class=\"token operator\">%<\/span> <span class=\"token number\">100<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n<span class=\"token assign-left variable\">count<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u6b22\u8fce\u6765\u5230\u731c\u6570\u5b57\u6e38\u620f&#xff01;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u6211\u5df2\u7ecf\u60f3\u597d\u4e86\u4e00\u4e2a1-100\u7684\u6570\u5b57&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u770b\u4f60\u80fd\u731c\u51e0\u6b21\u731c\u4e2d&#xff01;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token keyword\">while<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u4f60\u731c\u7684\u6570\u5b57&#xff08;1-100&#xff09;&#xff1a;&#034;<\/span> guess<br \/>\n    <span class=\"token assign-left variable\">count<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>count <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$guess<\/span> <span class=\"token parameter variable\">-lt<\/span> <span class=\"token variable\">$target<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u592a\u5c0f\u4e86&#xff0c;\u5f80\u5927\u731c&#xff01;&#034;<\/span><br \/>\n    <span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$guess<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token variable\">$target<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u592a\u5927\u4e86&#xff0c;\u5f80\u5c0f\u731c&#xff01;&#034;<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u606d\u559c\u4f60&#xff0c;\u731c\u4e2d\u4e86&#xff01;&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6b63\u786e\u7b54\u6848\u662f <span class=\"token variable\">$target<\/span>&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u4e00\u5171\u731c\u4e86 <span class=\"token variable\">$count<\/span> \u6b21&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">break<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<hr \/>\n<h3>7.9 case \u591a\u5206\u652f\u9009\u62e9<\/h3>\n<h4>7.9.1 \u4e3a\u4ec0\u4e48\u9700\u8981case\u2014\u2014if-elif\u592a\u591a\u4e86<\/h4>\n<p>\u5047\u8bbe\u4f60\u8981\u505a\u4e00\u4e2a\u83dc\u5355\u7a0b\u5e8f&#xff0c;\u6709\u5f88\u591a\u9009\u9879&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$choice<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;1&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token punctuation\">..<\/span>.<br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$choice<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;2&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token punctuation\">..<\/span>.<br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$choice<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;3&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token punctuation\">..<\/span>.<br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$choice<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;4&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token punctuation\">..<\/span>.<br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$choice<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;5&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token punctuation\">..<\/span>.<br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token punctuation\">..<\/span>.<br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>if-elif\u4e00\u591a&#xff0c;\u4ee3\u7801\u5c31\u53d8\u5f97\u5f88\u957f\u3001\u5f88\u96be\u770b\u3002\u8fd9\u65f6\u5019\u7528 case \u5c31\u4f18\u96c5\u591a\u4e86\u3002<\/p>\n<h4>7.9.2 case \u7684\u8bed\u6cd5<\/h4>\n<p><span class=\"token keyword\">case<\/span> \u53d8\u91cf <span class=\"token keyword\">in<\/span><br \/>\n    \u6a21\u5f0f1<span class=\"token punctuation\">)<\/span><br \/>\n        \u547d\u4ee41<br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    \u6a21\u5f0f2<span class=\"token punctuation\">)<\/span><br \/>\n        \u547d\u4ee42<br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    \u6a21\u5f0f3<span class=\"token punctuation\">)<\/span><br \/>\n        \u547d\u4ee43<br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    *<span class=\"token punctuation\">)<\/span><br \/>\n        \u9ed8\u8ba4\u547d\u4ee4<br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">esac<\/span><\/p>\n<p>\u89e3\u91ca\u4e00\u4e0b&#xff1a;<\/p>\n<ul>\n<li>case \u53d8\u91cf in&#xff1a;\u5f00\u59cbcase\u8bed\u53e5&#xff0c;\u68c0\u67e5&#034;\u53d8\u91cf&#034;\u7684\u503c<\/li>\n<li>\u6a21\u5f0f)&#xff1a;\u6bcf\u4e2a\u5206\u652f\u4ee5 ) \u7ed3\u5c3e&#xff08;\u4e0d\u662f\u62ec\u53f7\u914d\u5bf9&#xff0c;\u5c31\u662f\u5355\u4e2a\u53f3\u62ec\u53f7&#xff09;<\/li>\n<li>;;&#xff1a;\u6bcf\u4e2a\u5206\u652f\u7ed3\u675f\u7684\u6807\u5fd7&#xff08;\u76f8\u5f53\u4e8eC\u8bed\u8a00\u91cc\u7684break&#xff09;<\/li>\n<li>*)&#xff1a;\u9ed8\u8ba4\u5206\u652f&#xff08;\u76f8\u5f53\u4e8eelse&#xff09;&#xff0c;* \u5339\u914d\u6240\u6709<\/li>\n<li>esac&#xff1a;case \u53cd\u8fc7\u6765\u5199&#xff0c;\u8868\u793acase\u8bed\u53e5\u7ed3\u675f<\/li>\n<\/ul>\n<h4>7.9.3 case \u57fa\u7840\u793a\u4f8b<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u661f\u671f\u5224\u65ad day.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u6570\u5b57(1-7)&#xff1a;&#034;<\/span> day<\/p>\n<p><span class=\"token keyword\">case<\/span> <span class=\"token variable\">$day<\/span> <span class=\"token keyword\">in<\/span><br \/>\n    <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u661f\u671f\u4e00&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u661f\u671f\u4e8c&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u661f\u671f\u4e09&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u661f\u671f\u56db&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token number\">5<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u661f\u671f\u4e94&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u661f\u671f\u516d&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token number\">7<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u661f\u671f\u65e5&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    *<span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8f93\u5165\u65e0\u6548&#xff01;&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">esac<\/span><\/p>\n<p>\u662f\u4e0d\u662f\u6bd4\u7528\u4e00\u5806if-elif\u6e05\u723d\u591a\u4e86&#xff1f;<\/p>\n<h4>7.9.4 case \u4e2d\u7684\u6a21\u5f0f\u5339\u914d<\/h4>\n<p>case\u7684\u5f3a\u5927\u4e4b\u5904\u5728\u4e8e\u652f\u6301\u6a21\u5f0f\u5339\u914d&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u6587\u4ef6\u7c7b\u578b\u5224\u65ad filetype.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u6587\u4ef6\u540d&#xff1a;&#034;<\/span> filename<\/p>\n<p><span class=\"token keyword\">case<\/span> <span class=\"token variable\">$filename<\/span> <span class=\"token keyword\">in<\/span><br \/>\n    *.txt<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8fd9\u662f\u4e00\u4e2a\u6587\u672c\u6587\u4ef6&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    *.sh<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8fd9\u662f\u4e00\u4e2aShell\u811a\u672c&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    *.jpg<span class=\"token operator\">|<\/span>*.jpeg<span class=\"token operator\">|<\/span>*.png<span class=\"token operator\">|<\/span>*.gif<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8fd9\u662f\u4e00\u4e2a\u56fe\u7247\u6587\u4ef6&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    *.mp3<span class=\"token operator\">|<\/span>*.wav<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8fd9\u662f\u4e00\u4e2a\u97f3\u9891\u6587\u4ef6&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    *.mp4<span class=\"token operator\">|<\/span>*.avi<span class=\"token operator\">|<\/span>*.mkv<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8fd9\u662f\u4e00\u4e2a\u89c6\u9891\u6587\u4ef6&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    *<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u672a\u77e5\u6587\u4ef6\u7c7b\u578b&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">esac<\/span><\/p>\n<p>\u6ce8\u610f&#xff1a;<\/p>\n<ul>\n<li>| \u8868\u793a&#034;\u6216&#034;&#xff0c;\u53ef\u4ee5\u5339\u914d\u591a\u4e2a\u6a21\u5f0f<\/li>\n<li>* \u662f\u901a\u914d\u7b26&#xff0c;\u5339\u914d\u4efb\u610f\u5185\u5bb9<\/li>\n<\/ul>\n<h4>7.9.5 case \u4e2d\u7684\u5b57\u7b26\u8303\u56f4<\/h4>\n<p>\u53ef\u4ee5\u7528 [ ] \u5339\u914d\u5b57\u7b26\u8303\u56f4&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u6210\u7ee9\u7b49\u7ea7 case_grade.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u6210\u7ee9(0-100)&#xff1a;&#034;<\/span> score<\/p>\n<p><span class=\"token comment\"># \u786e\u4fdd\u8f93\u5165\u7684\u662f\u6570\u5b57<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token operator\">!<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$score<\/span> <span class=\"token operator\">&#061;~<\/span> ^<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span>-9<span class=\"token punctuation\">]<\/span>&#043;$ <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u6709\u6548\u7684\u6570\u5b57&#xff01;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u53d6\u5341\u4f4d\u6570\u5224\u65ad\u7b49\u7ea7<\/span><br \/>\n<span class=\"token assign-left variable\">level<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>score <span class=\"token operator\">\/<\/span> <span class=\"token number\">10<\/span><span class=\"token variable\">))<\/span><\/span><\/p>\n<p><span class=\"token keyword\">case<\/span> <span class=\"token variable\">$level<\/span> <span class=\"token keyword\">in<\/span><br \/>\n    <span class=\"token number\">9<\/span><span class=\"token operator\">|<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6210\u7ee9 <span class=\"token variable\">$score<\/span>&#xff1a;\u4f18\u79c0&#xff01;&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6210\u7ee9 <span class=\"token variable\">$score<\/span>&#xff1a;\u826f\u597d&#xff01;&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token number\">7<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6210\u7ee9 <span class=\"token variable\">$score<\/span>&#xff1a;\u4e2d\u7b49&#xff01;&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token number\">6<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6210\u7ee9 <span class=\"token variable\">$score<\/span>&#xff1a;\u53ca\u683c&#xff01;&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    *<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6210\u7ee9 <span class=\"token variable\">$score<\/span>&#xff1a;\u4e0d\u53ca\u683c&#xff01;&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">esac<\/span><\/p>\n<h4>7.9.6 case \u5b9e\u6218&#xff1a;\u7b80\u6613\u8ba1\u7b97\u5668<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u7b80\u6613\u8ba1\u7b97\u5668 calculator.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061; \u7b80\u6613\u8ba1\u7b97\u5668 &#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u7b2c\u4e00\u4e2a\u6570\u5b57&#xff1a;&#034;<\/span> num1<br \/>\n<span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u8fd0\u7b97\u7b26(&#043;,-,*,\/)&#xff1a;&#034;<\/span> <span class=\"token function\">op<\/span><br \/>\n<span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u7b2c\u4e8c\u4e2a\u6570\u5b57&#xff1a;&#034;<\/span> num2<\/p>\n<p><span class=\"token keyword\">case<\/span> <span class=\"token variable\">$op<\/span> <span class=\"token keyword\">in<\/span><br \/>\n    &#043;<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>num1 <span class=\"token operator\">&#043;<\/span> num2<span class=\"token variable\">))<\/span><\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$num1<\/span> &#043; <span class=\"token variable\">$num2<\/span> &#061; <span class=\"token variable\">$result<\/span>&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    &#8211;<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>num1 <span class=\"token operator\">&#8211;<\/span> num2<span class=\"token variable\">))<\/span><\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$num1<\/span> &#8211; <span class=\"token variable\">$num2<\/span> &#061; <span class=\"token variable\">$result<\/span>&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">\\\\<\/span>*<span class=\"token operator\">|<\/span>x<span class=\"token operator\">|<\/span>X<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>num1 <span class=\"token operator\">*<\/span> num2<span class=\"token variable\">))<\/span><\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$num1<\/span> \u00d7 <span class=\"token variable\">$num2<\/span> &#061; <span class=\"token variable\">$result<\/span>&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    \/<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$num2<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u9519\u8bef&#xff1a;\u9664\u6570\u4e0d\u80fd\u4e3a0&#xff01;&#034;<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><br \/>\n            <span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;scale&#061;2; <span class=\"token variable\">$num1<\/span> \/ <span class=\"token variable\">$num2<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$num1<\/span> \u00f7 <span class=\"token variable\">$num2<\/span> &#061; <span class=\"token variable\">$result<\/span>&#034;<\/span><br \/>\n        <span class=\"token keyword\">fi<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    *<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4e0d\u652f\u6301\u7684\u8fd0\u7b97\u7b26&#xff1a;<span class=\"token variable\">$op<\/span>&#034;<\/span><br \/>\n        <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">esac<\/span><\/p>\n<h4>7.9.7 case \u5d4c\u5957<\/h4>\n<p>case\u91cc\u9762\u4e5f\u53ef\u4ee5\u5d4c\u5957case&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u7cfb\u7edf\u7ba1\u7406\u83dc\u5355 sysmenu.sh<\/span><\/p>\n<p><span class=\"token keyword\">while<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061; \u7cfb\u7edf\u7ba1\u7406\u5de5\u5177 &#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;1. \u78c1\u76d8\u7ba1\u7406&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;2. \u5185\u5b58\u7ba1\u7406&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;3. \u7f51\u7edc\u7ba1\u7406&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;4. \u9000\u51fa&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u9009\u62e9&#xff1a;&#034;<\/span> main_choice<\/p>\n<p>    <span class=\"token keyword\">case<\/span> <span class=\"token variable\">$main_choice<\/span> <span class=\"token keyword\">in<\/span><br \/>\n        <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#8211; \u78c1\u76d8\u7ba1\u7406 &#8211;&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;a. \u67e5\u770b\u78c1\u76d8\u4f7f\u7528\u60c5\u51b5&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;b. \u67e5\u770b\u6302\u8f7d\u4fe1\u606f&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u9009\u62e9&#xff1a;&#034;<\/span> sub_choice<br \/>\n            <span class=\"token keyword\">case<\/span> <span class=\"token variable\">$sub_choice<\/span> <span class=\"token keyword\">in<\/span><br \/>\n                a<span class=\"token operator\">|<\/span>A<span class=\"token punctuation\">)<\/span> <span class=\"token function\">df<\/span> <span class=\"token parameter variable\">-h<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                b<span class=\"token operator\">|<\/span>B<span class=\"token punctuation\">)<\/span> <span class=\"token function\">mount<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                *<span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u65e0\u6548\u9009\u62e9&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">esac<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#8211; \u5185\u5b58\u7ba1\u7406 &#8211;&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;a. \u67e5\u770b\u5185\u5b58\u4f7f\u7528&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;b. \u67e5\u770b\u5185\u5b58\u8be6\u60c5&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u9009\u62e9&#xff1a;&#034;<\/span> sub_choice<br \/>\n            <span class=\"token keyword\">case<\/span> <span class=\"token variable\">$sub_choice<\/span> <span class=\"token keyword\">in<\/span><br \/>\n                a<span class=\"token operator\">|<\/span>A<span class=\"token punctuation\">)<\/span> <span class=\"token function\">free<\/span> <span class=\"token parameter variable\">-h<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                b<span class=\"token operator\">|<\/span>B<span class=\"token punctuation\">)<\/span> <span class=\"token function\">cat<\/span> \/proc\/meminfo <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                *<span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u65e0\u6548\u9009\u62e9&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">esac<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#8211; \u7f51\u7edc\u7ba1\u7406 &#8211;&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;a. \u67e5\u770bIP\u5730\u5740&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;b. \u67e5\u770b\u7f51\u7edc\u8fde\u63a5&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u9009\u62e9&#xff1a;&#034;<\/span> sub_choice<br \/>\n            <span class=\"token keyword\">case<\/span> <span class=\"token variable\">$sub_choice<\/span> <span class=\"token keyword\">in<\/span><br \/>\n                a<span class=\"token operator\">|<\/span>A<span class=\"token punctuation\">)<\/span> <span class=\"token function\">ip<\/span> addr <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                b<span class=\"token operator\">|<\/span>B<span class=\"token punctuation\">)<\/span> <span class=\"token function\">netstat<\/span> <span class=\"token parameter variable\">-tlnp<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> ss <span class=\"token parameter variable\">-tlnp<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                *<span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u65e0\u6548\u9009\u62e9&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">esac<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u518d\u89c1&#xff01;&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">break<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        *<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u65e0\u6548\u9009\u62e9&#xff0c;\u8bf7\u91cd\u8bd5&#034;<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">esac<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<hr \/>\n<h3>7.10 \u51fd\u6570\u5b9a\u4e49\u4e0e\u8c03\u7528<\/h3>\n<h4>7.10.1 \u4e3a\u4ec0\u4e48\u9700\u8981\u51fd\u6570\u2014\u2014\u907f\u514d\u91cd\u590d\u52b3\u52a8<\/h4>\n<p>\u5047\u8bbe\u4f60\u5728\u811a\u672c\u4e2d\u591a\u6b21\u9700\u8981\u8ba1\u7b97\u5706\u7684\u9762\u79ef&#xff0c;\u5982\u679c\u6ca1\u6709\u51fd\u6570&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u8ba1\u7b97\u7b2c\u4e00\u4e2a\u5706<\/span><br \/>\n<span class=\"token assign-left variable\">r1<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">5<\/span><br \/>\n<span class=\"token assign-left variable\">area1<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;scale&#061;2; 3.14 * <span class=\"token variable\">$r1<\/span> * <span class=\"token variable\">$r1<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$area1<\/span><\/p>\n<p><span class=\"token comment\"># \u8ba1\u7b97\u7b2c\u4e8c\u4e2a\u5706<\/span><br \/>\n<span class=\"token assign-left variable\">r2<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">10<\/span><br \/>\n<span class=\"token assign-left variable\">area2<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;scale&#061;2; 3.14 * <span class=\"token variable\">$r2<\/span> * <span class=\"token variable\">$r2<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$area2<\/span><\/p>\n<p><span class=\"token comment\"># \u8ba1\u7b97\u7b2c\u4e09\u4e2a\u5706<\/span><br \/>\n<span class=\"token assign-left variable\">r3<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">15<\/span><br \/>\n<span class=\"token assign-left variable\">area3<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;scale&#061;2; 3.14 * <span class=\"token variable\">$r3<\/span> * <span class=\"token variable\">$r3<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$area3<\/span><\/p>\n<p>\u540c\u6837\u7684\u4ee3\u7801\u5199\u4e86\u4e09\u904d&#xff0c;\u592a\u7d2f\u4e86\u3002<\/p>\n<p>\u51fd\u6570\u7684\u4f5c\u7528\u5c31\u662f\u628a\u91cd\u590d\u7684\u4ee3\u7801\u6253\u5305&#xff0c;\u53d6\u4e2a\u540d\u5b57&#xff0c;\u7528\u7684\u65f6\u5019\u53eb\u540d\u5b57\u5c31\u884c\u3002\u5c31\u50cf\u4f60\u6559\u5b69\u5b50\u7cfb\u978b\u5e26&#xff0c;\u6559\u4e00\u6b21&#xff0c;\u4ee5\u540e\u4ed6\u81ea\u5df1\u4f1a\u7cfb&#xff0c;\u4e0d\u7528\u6bcf\u6b21\u90fd\u6559\u3002<\/p>\n<h4>7.10.2 \u5b9a\u4e49\u51fd\u6570<\/h4>\n<p>Shell\u4e2d\u5b9a\u4e49\u51fd\u6570\u6709\u4e24\u79cd\u8bed\u6cd5&#xff1a;<\/p>\n<p>\u8bed\u6cd5\u4e00&#xff1a;<\/p>\n<p><span class=\"token keyword\">function<\/span> \u51fd\u6570\u540d<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    \u547d\u4ee4<br \/>\n    <span class=\"token punctuation\">..<\/span>.<br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u8bed\u6cd5\u4e8c&#xff08;\u7701\u7565function\u5173\u952e\u5b57&#xff09;&#xff1a;<\/p>\n<p>\u51fd\u6570\u540d<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    \u547d\u4ee4<br \/>\n    <span class=\"token punctuation\">..<\/span>.<br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u4e24\u79cd\u90fd\u53ef\u4ee5&#xff0c;\u63a8\u8350\u7528\u7b2c\u4e8c\u79cd&#xff08;\u66f4\u7b80\u6d01&#xff09;\u3002<\/p>\n<h4>7.10.3 \u8c03\u7528\u51fd\u6570<\/h4>\n<p>\u76f4\u63a5\u5199\u51fd\u6570\u540d\u5c31\u80fd\u8c03\u7528&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u51fd\u6570\u57fa\u7840 func_basic.sh<\/span><\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u51fd\u6570<\/span><br \/>\n<span class=\"token function-name function\">say_hello<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u597d&#xff0c;\u4e16\u754c&#xff01;&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u8c03\u7528\u51fd\u6570<\/span><br \/>\nsay_hello<br \/>\nsay_hello<br \/>\nsay_hello<\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>\u4f60\u597d&#xff0c;\u4e16\u754c&#xff01;<br \/>\n\u4f60\u597d&#xff0c;\u4e16\u754c&#xff01;<br \/>\n\u4f60\u597d&#xff0c;\u4e16\u754c&#xff01;<\/p>\n<p>\u8c03\u7528\u51fd\u6570\u5c31\u50cf\u8c03\u7528\u547d\u4ee4\u4e00\u6837&#xff0c;\u76f4\u63a5\u5199\u51fd\u6570\u540d\u5373\u53ef&#xff0c;\u4e0d\u9700\u8981\u52a0\u62ec\u53f7\u3002<\/p>\n<h4>7.10.4 \u51fd\u6570\u53c2\u6570<\/h4>\n<p>\u51fd\u6570\u5185\u90e8\u53ef\u4ee5\u7528 $1, $2, $3&#8230; \u63a5\u6536\u53c2\u6570&#xff08;\u8ddf\u811a\u672c\u7684\u4f4d\u7f6e\u53c2\u6570\u7c7b\u4f3c&#xff0c;\u4f46\u8fd9\u662f\u51fd\u6570\u7684\u53c2\u6570&#xff0c;\u4e0d\u662f\u811a\u672c\u7684&#xff09;&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u51fd\u6570\u53c2\u6570 func_param.sh<\/span><\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u5e26\u53c2\u6570\u7684\u51fd\u6570<\/span><br \/>\n<span class=\"token function-name function\">greet<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u597d&#xff0c;<span class=\"token variable\">$1<\/span>&#xff01;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u4eca\u5e74 <span class=\"token variable\">$2<\/span> \u5c81\u3002&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u4f4f\u5728 <span class=\"token variable\">$3<\/span>\u3002&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u8c03\u7528\u5e76\u4f20\u53c2<\/span><br \/>\ngreet <span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span> <span class=\"token number\">25<\/span> <span class=\"token string\">&#034;\u5317\u4eac&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#8212;&#034;<\/span><br \/>\ngreet <span class=\"token string\">&#034;\u674e\u56db&#034;<\/span> <span class=\"token number\">30<\/span> <span class=\"token string\">&#034;\u4e0a\u6d77&#034;<\/span><\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>\u4f60\u597d&#xff0c;\u5f20\u4e09&#xff01;<br \/>\n\u4f60\u4eca\u5e74 25 \u5c81\u3002<br \/>\n\u4f60\u4f4f\u5728 \u5317\u4eac\u3002<br \/>\n&#8212;<br \/>\n\u4f60\u597d&#xff0c;\u674e\u56db&#xff01;<br \/>\n\u4f60\u4eca\u5e74 30 \u5c81\u3002<br \/>\n\u4f60\u4f4f\u5728 \u4e0a\u6d77\u3002<\/p>\n<p>\u6ce8\u610f\u51fd\u6570\u5185\u7684 $1 \u548c\u811a\u672c\u5916\u7684 $1 \u662f\u4e0d\u540c\u7684\u2014\u2014\u51fd\u6570\u5185\u7684 $1 \u6307\u7684\u662f\u8c03\u7528\u51fd\u6570\u65f6\u4f20\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570&#xff0c;\u4e0d\u662f\u8fd0\u884c\u811a\u672c\u65f6\u4f20\u7684\u53c2\u6570\u3002<\/p>\n<h4>7.10.5 \u51fd\u6570\u8fd4\u56de\u503c<\/h4>\n<p>\u51fd\u6570\u7684\u8fd4\u56de\u503c\u6709\u4e24\u79cd\u65b9\u5f0f&#xff1a;<\/p>\n<p>\u65b9\u5f0f\u4e00&#xff1a;\u7528return\u8fd4\u56de\u72b6\u6001\u7801<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># return\u8fd4\u56de\u503c<\/span><\/p>\n<p><span class=\"token function-name function\">is_even<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>$<span class=\"token number\">1<\/span> <span class=\"token operator\">%<\/span> <span class=\"token number\">2<\/span><span class=\"token variable\">))<\/span><\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span> <span class=\"token number\">0<\/span>    <span class=\"token comment\"># \u8fd4\u56de0\u8868\u793a\u6210\u529f&#xff08;\u5076\u6570&#xff09;<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span> <span class=\"token number\">1<\/span>    <span class=\"token comment\"># \u8fd4\u56de\u975e0\u8868\u793a\u5931\u8d25&#xff08;\u5947\u6570&#xff09;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u8c03\u7528<\/span><br \/>\nis_even <span class=\"token number\">4<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$?<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;4\u662f\u5076\u6570&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>is_even <span class=\"token number\">7<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$?<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;7\u662f\u5076\u6570&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;7\u662f\u5947\u6570&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u6ce8\u610f&#xff1a;return \u53ea\u80fd\u8fd4\u56de0-255\u7684\u6574\u6570&#xff0c;\u901a\u5e38\u7528\u6765\u8868\u793a\u6210\u529f(0)\u6216\u5931\u8d25(\u975e0)\u3002$? \u7528\u6765\u83b7\u53d6\u4e0a\u4e00\u6761\u547d\u4ee4&#xff08;\u6216\u51fd\u6570&#xff09;\u7684\u8fd4\u56de\u503c\u3002<\/p>\n<p>\u65b9\u5f0f\u4e8c&#xff1a;\u7528echo\u8f93\u51fa\u7ed3\u679c&#xff08;\u66f4\u5e38\u7528&#xff09;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># echo\u8fd4\u56de\u503c<\/span><\/p>\n<p><span class=\"token comment\"># \u8ba1\u7b97\u4e24\u4e2a\u6570\u4e4b\u548c<\/span><br \/>\n<span class=\"token function-name function\">add<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>$<span class=\"token number\">1<\/span> <span class=\"token operator\">&#043;<\/span> $<span class=\"token number\">2<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u8ba1\u7b97\u5706\u9762\u79ef<\/span><br \/>\n<span class=\"token function-name function\">circle_area<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;scale&#061;2; 3.14 * <span class=\"token variable\">$1<\/span> * <span class=\"token variable\">$1<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u8c03\u7528\u5e76\u63a5\u6536\u8fd4\u56de\u503c<\/span><br \/>\n<span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">add<\/span> <span class=\"token number\">10<\/span> <span class=\"token number\">20<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;10 &#043; 20 &#061; <span class=\"token variable\">$result<\/span>&#034;<\/span><\/p>\n<p><span class=\"token assign-left variable\">area<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span>circle_area <span class=\"token number\">5<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u534a\u5f845\u7684\u5706\u9762\u79ef &#061; <span class=\"token variable\">$area<\/span>&#034;<\/span><\/p>\n<p>\u8fd9\u79cd\u65b9\u5f0f\u66f4\u7075\u6d3b&#xff0c;\u53ef\u4ee5\u8fd4\u56de\u4efb\u610f\u5b57\u7b26\u4e32\u3002\u7528 $(\u51fd\u6570\u540d \u53c2\u6570) \u6765\u6355\u83b7\u51fd\u6570\u7684\u8f93\u51fa\u3002<\/p>\n<h4>7.10.6 \u5c40\u90e8\u53d8\u91cf local<\/h4>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b&#xff0c;\u51fd\u6570\u5185\u5b9a\u4e49\u7684\u53d8\u91cf\u662f\u5168\u5c40\u7684&#xff0c;\u4f1a\u5f71\u54cd\u51fd\u6570\u5916&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5168\u5c40\u53d8\u91cf\u7684\u95ee\u9898<\/span><\/p>\n<p><span class=\"token function-name function\">modify_var<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token assign-left variable\">x<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">100<\/span>    <span class=\"token comment\"># \u8fd9\u4f1a\u4fee\u6539\u5168\u5c40\u7684x&#xff01;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token assign-left variable\">x<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">1<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8c03\u7528\u524d&#xff1a;x&#061;<span class=\"token variable\">$x<\/span>&#034;<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;1<\/span><br \/>\nmodify_var<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8c03\u7528\u540e&#xff1a;x&#061;<span class=\"token variable\">$x<\/span>&#034;<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;100&#xff08;\u88ab\u51fd\u6570\u4fee\u6539\u4e86&#xff01;&#xff09;<\/span><\/p>\n<p>\u5982\u679c\u4f60\u4e0d\u60f3\u51fd\u6570\u5185\u7684\u53d8\u91cf\u5f71\u54cd\u5916\u9762&#xff0c;\u7528 local \u58f0\u660e\u5c40\u90e8\u53d8\u91cf&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># local\u5c40\u90e8\u53d8\u91cf<\/span><\/p>\n<p><span class=\"token function-name function\">safe_function<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">x<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">100<\/span>    <span class=\"token comment\"># \u5c40\u90e8\u53d8\u91cf&#xff0c;\u53ea\u5728\u51fd\u6570\u5185\u6709\u6548<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u51fd\u6570\u5185&#xff1a;x&#061;<span class=\"token variable\">$x<\/span>&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token assign-left variable\">x<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">1<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8c03\u7528\u524d&#xff1a;x&#061;<span class=\"token variable\">$x<\/span>&#034;<\/span><br \/>\nsafe_function<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8c03\u7528\u540e&#xff1a;x&#061;<span class=\"token variable\">$x<\/span>&#034;<\/span>    <span class=\"token comment\"># \u8fd8\u662f1&#xff0c;\u6ca1\u88ab\u4fee\u6539<\/span><\/p>\n<p>\u517b\u6210\u597d\u4e60\u60ef&#xff1a;\u51fd\u6570\u5185\u90e8\u7528\u7684\u4e34\u65f6\u53d8\u91cf\u90fd\u7528 local \u58f0\u660e&#xff0c;\u907f\u514d\u610f\u5916\u4fee\u6539\u5168\u5c40\u53d8\u91cf\u3002<\/p>\n<h4>7.10.7 \u51fd\u6570\u7684\u9012\u5f52\u8c03\u7528<\/h4>\n<p>\u51fd\u6570\u53ef\u4ee5\u8c03\u7528\u81ea\u5df1&#xff0c;\u8fd9\u53eb\u9012\u5f52\u3002\u7ecf\u5178\u4f8b\u5b50\u662f\u8ba1\u7b97\u9636\u4e58&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u9012\u5f52\u8ba1\u7b97\u9636\u4e58 factorial.sh<\/span><\/p>\n<p><span class=\"token function-name function\">factorial<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">n<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$1<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$n<\/span> <span class=\"token parameter variable\">-le<\/span> <span class=\"token number\">1<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token number\">1<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">prev<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span>factorial <span class=\"token punctuation\">$((<\/span>n &#8211; <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token variable\">)<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>n <span class=\"token operator\">*<\/span> prev<span class=\"token variable\">))<\/span><\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u4e00\u4e2a\u6b63\u6574\u6570&#xff1a;&#034;<\/span> num<br \/>\n<span class=\"token assign-left variable\">result<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span>factorial $num<span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$num<\/span>! &#061; <span class=\"token variable\">$result<\/span>&#034;<\/span><\/p>\n<p>\u6267\u884c\u8fc7\u7a0b&#xff08;\u4ee5 factorial 4 \u4e3a\u4f8b&#xff09;&#xff1a;<\/p>\n<p>factorial(4) &#061; 4 * factorial(3)<br \/>\n             &#061; 4 * (3 * factorial(2))<br \/>\n             &#061; 4 * (3 * (2 * factorial(1)))<br \/>\n             &#061; 4 * (3 * (2 * 1))<br \/>\n             &#061; 4 * (3 * 2)<br \/>\n             &#061; 4 * 6<br \/>\n             &#061; 24<\/p>\n<h4>7.10.8 \u5728\u5355\u72ec\u6587\u4ef6\u4e2d\u5b9a\u4e49\u51fd\u6570<\/h4>\n<p>\u5f53\u51fd\u6570\u591a\u4e86&#xff0c;\u53ef\u4ee5\u628a\u51fd\u6570\u653e\u5230\u5355\u72ec\u7684\u6587\u4ef6\u4e2d&#xff0c;\u7136\u540e\u5728\u4e3b\u811a\u672c\u4e2d\u5f15\u7528&#xff1a;<\/p>\n<p>\u6587\u4ef6 lib.sh&#xff08;\u51fd\u6570\u5e93&#xff09;&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u51fd\u6570\u5e93<\/span><\/p>\n<p><span class=\"token comment\"># \u6253\u5370\u5206\u9694\u7ebf<\/span><br \/>\n<span class=\"token function-name function\">print_line<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u6253\u5370\u4fe1\u606f<\/span><br \/>\n<span class=\"token function-name function\">print_info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    print_line<br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  <span class=\"token variable\">$1<\/span>&#034;<\/span><br \/>\n    print_line<br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u68c0\u67e5\u6587\u4ef6\u662f\u5426\u5b58\u5728<\/span><br \/>\n<span class=\"token function-name function\">check_file<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$1<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span> <span class=\"token number\">0<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span> <span class=\"token number\">1<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u4e3b\u811a\u672c main.sh&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5f15\u5165\u51fd\u6570\u5e93<\/span><br \/>\n<span class=\"token builtin class-name\">source<\/span> .\/lib.sh<br \/>\n<span class=\"token comment\"># \u6216\u8005\u7528 . .\/lib.sh<\/span><\/p>\n<p><span class=\"token comment\"># \u4f7f\u7528\u5e93\u4e2d\u7684\u51fd\u6570<\/span><br \/>\nprint_info <span class=\"token string\">&#034;\u7cfb\u7edf\u68c0\u67e5\u5f00\u59cb&#034;<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> check_file <span class=\"token string\">&#034;\/etc\/passwd&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\/etc\/passwd \u5b58\u5728&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>print_info <span class=\"token string\">&#034;\u7cfb\u7edf\u68c0\u67e5\u7ed3\u675f&#034;<\/span><\/p>\n<h4>7.10.9 \u7efc\u5408\u793a\u4f8b&#xff1a;\u5b66\u751f\u6210\u7ee9\u7ba1\u7406<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5b66\u751f\u6210\u7ee9\u7ba1\u7406 grade_manager.sh<\/span><\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u6570\u7ec4\u5b58\u50a8\u5b66\u751f\u4fe1\u606f<\/span><br \/>\n<span class=\"token builtin class-name\">declare<\/span> <span class=\"token parameter variable\">-a<\/span> students<br \/>\n<span class=\"token builtin class-name\">declare<\/span> <span class=\"token parameter variable\">-a<\/span> scores<br \/>\n<span class=\"token assign-left variable\">count<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><\/p>\n<p><span class=\"token comment\"># \u6dfb\u52a0\u5b66\u751f<\/span><br \/>\n<span class=\"token function-name function\">add_student<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$1<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">score<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$2<\/span><\/p>\n<p>    students<span class=\"token punctuation\">[<\/span><span class=\"token variable\">$count<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$name<\/span><br \/>\n    scores<span class=\"token punctuation\">[<\/span><span class=\"token variable\">$count<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$score<\/span><br \/>\n    <span class=\"token assign-left variable\">count<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>count <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><\/p>\n<p>    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6dfb\u52a0\u6210\u529f&#xff1a;<span class=\"token variable\">$name<\/span> \u7684\u6210\u7ee9\u662f <span class=\"token variable\">$score<\/span>&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u663e\u793a\u6240\u6709\u5b66\u751f<\/span><br \/>\n<span class=\"token function-name function\">show_all<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$count<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6682\u65e0\u5b66\u751f\u4fe1\u606f&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5e8f\u53f7  \u59d3\u540d    \u6210\u7ee9    \u7b49\u7ea7&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">i<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><br \/>\n    <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$i<\/span> <span class=\"token parameter variable\">-lt<\/span> <span class=\"token variable\">$count<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n        <span class=\"token builtin class-name\">local<\/span> grade<br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">${scores<span class=\"token punctuation\">[<\/span>$i<span class=\"token punctuation\">]<\/span>}<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">90<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token assign-left variable\">grade<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f18\u79c0&#034;<\/span><br \/>\n        <span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">${scores<span class=\"token punctuation\">[<\/span>$i<span class=\"token punctuation\">]<\/span>}<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">80<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token assign-left variable\">grade<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u826f\u597d&#034;<\/span><br \/>\n        <span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">${scores<span class=\"token punctuation\">[<\/span>$i<span class=\"token punctuation\">]<\/span>}<\/span> <span class=\"token parameter variable\">-ge<\/span> <span class=\"token number\">60<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token assign-left variable\">grade<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u53ca\u683c&#034;<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><br \/>\n            <span class=\"token assign-left variable\">grade<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4e0d\u53ca\u683c&#034;<\/span><br \/>\n        <span class=\"token keyword\">fi<\/span><br \/>\n        <span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%-4d  %-6s  %-4d    %s<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>i<span class=\"token operator\">&#043;<\/span><span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${students<span class=\"token punctuation\">[<\/span>$i<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${scores<span class=\"token punctuation\">[<\/span>$i<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$grade<\/span>&#034;<\/span><br \/>\n        <span class=\"token assign-left variable\">i<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>i <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n    <span class=\"token keyword\">done<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u8ba1\u7b97\u5e73\u5747\u5206<\/span><br \/>\n<span class=\"token function-name function\">calc_average<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$count<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6682\u65e0\u6570\u636e&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">total<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">i<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><br \/>\n    <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$i<\/span> <span class=\"token parameter variable\">-lt<\/span> <span class=\"token variable\">$count<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n        <span class=\"token assign-left variable\">total<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>total <span class=\"token operator\">&#043;<\/span> scores[$i]<span class=\"token variable\">))<\/span><\/span><br \/>\n        <span class=\"token assign-left variable\">i<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>i <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n    <span class=\"token keyword\">done<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">avg<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;scale&#061;2; <span class=\"token variable\">$total<\/span> \/ <span class=\"token variable\">$count<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5e73\u5747\u5206&#xff1a;<span class=\"token variable\">$avg<\/span>&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u67e5\u627e\u5b66\u751f<\/span><br \/>\n<span class=\"token function-name function\">find_student<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$1<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">i<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><br \/>\n    <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$i<\/span> <span class=\"token parameter variable\">-lt<\/span> <span class=\"token variable\">$count<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${students<span class=\"token punctuation\">[<\/span>$i<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$name<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u627e\u5230&#xff1a;<span class=\"token variable\">$name<\/span> \u7684\u6210\u7ee9\u662f <span class=\"token variable\">${scores<span class=\"token punctuation\">[<\/span>$i<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">return<\/span> <span class=\"token number\">0<\/span><br \/>\n        <span class=\"token keyword\">fi<\/span><br \/>\n        <span class=\"token assign-left variable\">i<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>i <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n    <span class=\"token keyword\">done<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u672a\u627e\u5230\u5b66\u751f&#xff1a;<span class=\"token variable\">$name<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">return<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u4e3b\u7a0b\u5e8f<\/span><br \/>\nadd_student <span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span> <span class=\"token number\">95<\/span><br \/>\nadd_student <span class=\"token string\">&#034;\u674e\u56db&#034;<\/span> <span class=\"token number\">82<\/span><br \/>\nadd_student <span class=\"token string\">&#034;\u738b\u4e94&#034;<\/span> <span class=\"token number\">58<\/span><br \/>\nadd_student <span class=\"token string\">&#034;\u8d75\u516d&#034;<\/span> <span class=\"token number\">76<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\nshow_all<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\ncalc_average<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\nfind_student <span class=\"token string\">&#034;\u674e\u56db&#034;<\/span><br \/>\nfind_student <span class=\"token string\">&#034;\u94b1\u4e03&#034;<\/span><\/p>\n<hr \/>\n<h3>7.11 \u8f93\u5165\u8f93\u51fa\u4e0eread\u547d\u4ee4<\/h3>\n<h4>7.11.1 echo \u547d\u4ee4\u8be6\u89e3<\/h4>\n<p>echo \u662f\u6700\u5e38\u7528\u7684\u8f93\u51fa\u547d\u4ee4&#xff0c;\u524d\u9762\u5df2\u7ecf\u7528\u4e86\u5f88\u591a\u6b21\u4e86\u3002\u8fd9\u91cc\u8865\u5145\u4e00\u4e9b\u9ad8\u7ea7\u7528\u6cd5&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u57fa\u672c\u8f93\u51fa<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;Hello&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u8f93\u51fa\u4e0d\u6362\u884c&#xff08;\u7528-n&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-n<\/span> <span class=\"token string\">&#034;\u8bf7\u7a0d\u5019&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-n<\/span> <span class=\"token string\">&#034;&#8230;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5b8c\u6210&#034;<\/span><br \/>\n<span class=\"token comment\"># \u8f93\u51fa\u5728\u4e00\u884c&#xff1a;\u8bf7\u7a0d\u5019&#8230;\u5b8c\u6210<\/span><\/p>\n<p><span class=\"token comment\"># \u542f\u7528\u8f6c\u4e49\u5b57\u7b26&#xff08;\u7528-e&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;\u7b2c\u4e00\u884c<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>\u7b2c\u4e8c\u884c&#034;<\/span>        <span class=\"token comment\"># \\\\n\u6362\u884c<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;\u5236\u8868\u7b26<span class=\"token entity\" title=\"\\\\t\">\\\\t<\/span>\u8fd9\u91cc&#034;<\/span>          <span class=\"token comment\"># \\\\t\u5236\u8868\u7b26<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;\u8fd9\u662f<span class=\"token entity\" title=\"\\\\b\">\\\\b<\/span>\u9000\u683c&#034;<\/span>            <span class=\"token comment\"># \\\\b\u9000\u683c<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[31m\u7ea2\u8272\u6587\u5b57<span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[0m&#034;<\/span>    <span class=\"token comment\"># \u7ea2\u8272\u6587\u5b57<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[32m\u7eff\u8272\u6587\u5b57<span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[0m&#034;<\/span>    <span class=\"token comment\"># \u7eff\u8272\u6587\u5b57<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[33m\u9ec4\u8272\u6587\u5b57<span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[0m&#034;<\/span>    <span class=\"token comment\"># \u9ec4\u8272\u6587\u5b57<\/span><\/p>\n<p>\u989c\u8272\u8f93\u51fa\u7684\u683c\u5f0f&#xff1a;<\/p>\n<p>\\\\033[\u989c\u8272\u4ee3\u7801m  \u5185\u5bb9  \\\\033[0m<\/p>\n<p>\u5e38\u89c1\u989c\u8272\u4ee3\u7801&#xff1a;<\/p>\n<table>\n<tr>\u4ee3\u7801\u989c\u8272<\/tr>\n<tbody>\n<tr>\n<td>30<\/td>\n<td>\u9ed1\u8272<\/td>\n<\/tr>\n<tr>\n<td>31<\/td>\n<td>\u7ea2\u8272<\/td>\n<\/tr>\n<tr>\n<td>32<\/td>\n<td>\u7eff\u8272<\/td>\n<\/tr>\n<tr>\n<td>33<\/td>\n<td>\u9ec4\u8272<\/td>\n<\/tr>\n<tr>\n<td>34<\/td>\n<td>\u84dd\u8272<\/td>\n<\/tr>\n<tr>\n<td>35<\/td>\n<td>\u7d2b\u8272<\/td>\n<\/tr>\n<tr>\n<td>36<\/td>\n<td>\u9752\u8272<\/td>\n<\/tr>\n<tr>\n<td>37<\/td>\n<td>\u767d\u8272<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5c01\u88c5\u6210\u51fd\u6570\u66f4\u65b9\u4fbf&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5f69\u8272\u8f93\u51fa color.sh<\/span><\/p>\n<p><span class=\"token function-name function\">red<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>    <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[31m<span class=\"token variable\">$1<\/span><span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[0m&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token function-name function\">green<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[32m<span class=\"token variable\">$1<\/span><span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[0m&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token function-name function\">yellow<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[33m<span class=\"token variable\">$1<\/span><span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[0m&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token function-name function\">blue<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>   <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[34m<span class=\"token variable\">$1<\/span><span class=\"token entity\" title=\"\\\\033\">\\\\033<\/span>[0m&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>red    <span class=\"token string\">&#034;\u8fd9\u662f\u7ea2\u8272\u6587\u5b57&#034;<\/span><br \/>\ngreen  <span class=\"token string\">&#034;\u8fd9\u662f\u7eff\u8272\u6587\u5b57&#034;<\/span><br \/>\nyellow <span class=\"token string\">&#034;\u8fd9\u662f\u9ec4\u8272\u6587\u5b57&#034;<\/span><br \/>\nblue   <span class=\"token string\">&#034;\u8fd9\u662f\u84dd\u8272\u6587\u5b57&#034;<\/span><\/p>\n<h4>7.11.2 printf \u547d\u4ee4<\/h4>\n<p>printf \u6bd4echo\u66f4\u5f3a\u5927&#xff0c;\u652f\u6301\u683c\u5f0f\u5316\u8f93\u51fa&#xff08;\u8ddfC\u8bed\u8a00\u7684printf\u7c7b\u4f3c&#xff09;&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u57fa\u672c\u7528\u6cd5&#xff08;\u4e0d\u4f1a\u81ea\u52a8\u6362\u884c&#xff0c;\u9700\u8981\u624b\u52a8\u52a0\\\\n&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;Hello<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span>           <span class=\"token comment\"># \u8f93\u51fa&#xff1a;Hello&#xff08;\u6362\u884c&#xff09;<\/span><\/p>\n<p><span class=\"token comment\"># \u683c\u5f0f\u5316\u8f93\u51fa<\/span><br \/>\n<span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%s\u4eca\u5e74%d\u5c81<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span> <span class=\"token number\">25<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u5f20\u4e09\u4eca\u5e7425\u5c81<\/span><\/p>\n<p><span class=\"token comment\"># \u5bf9\u9f50\u8f93\u51fa<\/span><br \/>\n<span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%-10s %-10s %5d<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token string\">&#034;\u59d3\u540d&#034;<\/span> <span class=\"token string\">&#034;\u57ce\u5e02&#034;<\/span> <span class=\"token string\">&#034;\u5e74\u9f84&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%-10s %-10s %5d<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span> <span class=\"token string\">&#034;\u5317\u4eac&#034;<\/span> <span class=\"token number\">25<\/span><br \/>\n<span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%-10s %-10s %5d<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token string\">&#034;\u674e\u56db&#034;<\/span> <span class=\"token string\">&#034;\u4e0a\u6d77&#034;<\/span> <span class=\"token number\">30<\/span><\/p>\n<p><span class=\"token comment\"># \u6d6e\u70b9\u6570<\/span><br \/>\n<span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;\u5706\u5468\u7387\u662f&#xff1a;%.2f<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token number\">3.14159<\/span>    <span class=\"token comment\"># \u8f93\u51fa&#xff1a;\u5706\u5468\u7387\u662f&#xff1a;3.14<\/span><\/p>\n<p>\u5e38\u7528\u683c\u5f0f\u7b26&#xff1a;<\/p>\n<table>\n<tr>\u683c\u5f0f\u7b26\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>%s<\/td>\n<td>\u5b57\u7b26\u4e32<\/td>\n<\/tr>\n<tr>\n<td>%d<\/td>\n<td>\u6574\u6570<\/td>\n<\/tr>\n<tr>\n<td>%f<\/td>\n<td>\u6d6e\u70b9\u6570<\/td>\n<\/tr>\n<tr>\n<td>%-10s<\/td>\n<td>\u5de6\u5bf9\u9f50&#xff0c;\u536010\u4e2a\u5b57\u7b26\u5bbd\u5ea6<\/td>\n<\/tr>\n<tr>\n<td>%10s<\/td>\n<td>\u53f3\u5bf9\u9f50&#xff0c;\u536010\u4e2a\u5b57\u7b26\u5bbd\u5ea6<\/td>\n<\/tr>\n<tr>\n<td>%.2f<\/td>\n<td>\u4fdd\u75592\u4f4d\u5c0f\u6570<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u7528printf\u8f93\u51fa\u8868\u683c&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u8868\u683c\u8f93\u51fa table.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%-8s %-8s %-6s %-8s<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token string\">&#034;\u59d3\u540d&#034;<\/span> <span class=\"token string\">&#034;\u8bed\u6587&#034;<\/span> <span class=\"token string\">&#034;\u6570\u5b66&#034;<\/span> <span class=\"token string\">&#034;\u82f1\u8bed&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%-8s %-8s %-8s %-8s<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token string\">&#034;&#8212;-&#034;<\/span> <span class=\"token string\">&#034;&#8212;-&#034;<\/span> <span class=\"token string\">&#034;&#8212;-&#034;<\/span> <span class=\"token string\">&#034;&#8212;-&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%-8s %-8d %-8d %-8d<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span> <span class=\"token number\">90<\/span> <span class=\"token number\">85<\/span> <span class=\"token number\">92<\/span><br \/>\n<span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%-8s %-8d %-8d %-8d<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token string\">&#034;\u674e\u56db&#034;<\/span> <span class=\"token number\">78<\/span> <span class=\"token number\">95<\/span> <span class=\"token number\">88<\/span><br \/>\n<span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%-8s %-8d %-8d %-8d<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token string\">&#034;\u738b\u4e94&#034;<\/span> <span class=\"token number\">88<\/span> <span class=\"token number\">76<\/span> <span class=\"token number\">90<\/span><\/p>\n<p>\u8f93\u51fa&#xff1a;<\/p>\n<p>\u59d3\u540d     \u8bed\u6587     \u6570\u5b66    \u82f1\u8bed<br \/>\n&#8212;-     &#8212;-     &#8212;-    &#8212;-<br \/>\n\u5f20\u4e09     90       85       92<br \/>\n\u674e\u56db     78       95       88<br \/>\n\u738b\u4e94     88       76       90<\/p>\n<h4>7.11.3 read \u547d\u4ee4\u8be6\u89e3<\/h4>\n<p>read \u7528\u6765\u4ece\u6807\u51c6\u8f93\u5165\u8bfb\u53d6\u6570\u636e&#xff0c;\u901a\u5e38\u7528\u4e8e\u548c\u7528\u6237\u4ea4\u4e92\u3002<\/p>\n<p>\u57fa\u672c\u7528\u6cd5&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># read\u57fa\u7840<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u4f60\u7684\u540d\u5b57&#xff1a;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">read<\/span> name<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u597d&#xff0c;<span class=\"token variable\">$name<\/span>&#xff01;&#034;<\/span><\/p>\n<p>\u52a0\u63d0\u793a\u4fe1\u606f&#xff08;-p&#xff09;&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u4f60\u7684\u540d\u5b57&#xff1a;&#034;<\/span> name<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u597d&#xff0c;<span class=\"token variable\">$name<\/span>&#xff01;&#034;<\/span><\/p>\n<p>-p \u540e\u9762\u7684\u63d0\u793a\u4fe1\u606f\u4f1a\u663e\u793a\u5728\u7528\u6237\u8f93\u5165\u4e4b\u524d&#xff0c;\u4e0d\u9700\u8981\u5355\u72ec\u7528echo\u3002<\/p>\n<p>\u8f93\u5165\u5bc6\u7801\u65f6\u9690\u85cf\u5185\u5bb9&#xff08;-s&#xff09;&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-s<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u5bc6\u7801&#xff1a;&#034;<\/span> password<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5bc6\u7801\u5df2\u63a5\u6536&#xff08;\u6211\u4e0d\u4f1a\u544a\u8bc9\u522b\u4eba\u7684&#xff09;&#034;<\/span><\/p>\n<p>-s \u8868\u793asilent&#xff08;\u9759\u9ed8\u6a21\u5f0f&#xff09;&#xff0c;\u8f93\u5165\u7684\u5185\u5bb9\u4e0d\u4f1a\u663e\u793a\u5728\u5c4f\u5e55\u4e0a\u3002<\/p>\n<p>\u9650\u5236\u8f93\u5165\u957f\u5ea6&#xff08;-n&#xff09;&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-n<\/span> <span class=\"token number\">1<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u7ee7\u7eed\u5417&#xff1f;(y\/n)&#xff1a;&#034;<\/span> choice<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u9009\u62e9\u4e86&#xff1a;<span class=\"token variable\">$choice<\/span>&#034;<\/span><\/p>\n<p>-n 1 \u8868\u793a\u53ea\u8bfb1\u4e2a\u5b57\u7b26&#xff0c;\u7528\u6237\u8f93\u5165\u4e00\u4e2a\u5b57\u7b26\u540e\u81ea\u52a8\u7ed3\u675f&#xff0c;\u4e0d\u9700\u8981\u6309\u56de\u8f66\u3002<\/p>\n<p>\u8bbe\u7f6e\u8d85\u65f6&#xff08;-t&#xff09;&#xff1a;<\/p>\n<p><span class=\"token comment\"># 5\u79d2\u5185\u4e0d\u8f93\u5165\u5c31\u81ea\u52a8\u8df3\u8fc7<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-t<\/span> <span class=\"token number\">5<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u4f60\u7684\u540d\u5b57&#xff08;5\u79d2\u5185&#xff09;&#xff1a;&#034;<\/span> name<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u597d&#xff0c;<span class=\"token variable\">$name<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8d85\u65f6\u4e86&#xff0c;\u4f60\u592a\u6162\u4e86&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u8bfb\u53d6\u591a\u4e2a\u53d8\u91cf&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u59d3\u540d\u548c\u5e74\u9f84&#xff08;\u7528\u7a7a\u683c\u5206\u5f00&#xff09;&#xff1a;&#034;<\/span> name age<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u59d3\u540d&#xff1a;<span class=\"token variable\">$name<\/span>&#xff0c;\u5e74\u9f84&#xff1a;<span class=\"token variable\">$age<\/span>&#034;<\/span><\/p>\n<p>\u8f93\u5165&#034;\u5f20\u4e09 25&#034;&#xff0c;name\u5c31\u662f&#034;\u5f20\u4e09&#034;&#xff0c;age\u5c31\u662f&#034;25&#034;\u3002<\/p>\n<p>\u8bfb\u53d6\u6574\u884c\u5230\u6570\u7ec4&#xff08;-a&#xff09;&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-a<\/span> nums <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u51e0\u4e2a\u6570\u5b57&#xff08;\u7a7a\u683c\u5206\u5f00&#xff09;&#xff1a;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u4f60\u8f93\u5165\u4e86 <span class=\"token variable\">${<span class=\"token operator\">#<\/span>nums<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span> \u4e2a\u6570\u5b57&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5206\u522b\u662f&#xff1a;<span class=\"token variable\">${nums<span class=\"token punctuation\">[<\/span>&#064;<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c\u4e00\u4e2a\u662f&#xff1a;<span class=\"token variable\">${nums<span class=\"token punctuation\">[<\/span>0<span class=\"token punctuation\">]<\/span>}<\/span>&#034;<\/span><\/p>\n<h4>7.11.4 \u91cd\u5b9a\u5411<\/h4>\n<p>\u91cd\u5b9a\u5411\u5c31\u662f\u6539\u53d8\u8f93\u5165\u8f93\u51fa\u7684\u65b9\u5411\u3002<\/p>\n<p>\u8f93\u51fa\u91cd\u5b9a\u5411&#xff08;&gt; \u548c &gt;&gt;&#xff09;&#xff1a;<\/p>\n<p><span class=\"token comment\"># &gt; \u8986\u76d6\u5199\u5165&#xff08;\u539f\u6765\u7684\u5185\u5bb9\u6ca1\u4e86&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c\u4e00\u884c&#034;<\/span> <span class=\"token operator\">&gt;<\/span> file.txt<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c\u4e8c\u884c&#034;<\/span> <span class=\"token operator\">&gt;<\/span> file.txt    <span class=\"token comment\"># file.txt\u91cc\u53ea\u5269&#034;\u7b2c\u4e8c\u884c&#034;<\/span><\/p>\n<p><span class=\"token comment\"># &gt;&gt; \u8ffd\u52a0\u5199\u5165&#xff08;\u5728\u539f\u6765\u7684\u57fa\u7840\u4e0a\u6dfb\u52a0&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c\u4e00\u884c&#034;<\/span> <span class=\"token operator\">&gt;<\/span> file.txt<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7b2c\u4e8c\u884c&#034;<\/span> <span class=\"token operator\">&gt;&gt;<\/span> file.txt    <span class=\"token comment\"># file.txt\u91cc\u6709&#034;\u7b2c\u4e00\u884c&#034;\u548c&#034;\u7b2c\u4e8c\u884c&#034;<\/span><\/p>\n<p>\u6253\u4e2a\u6bd4\u65b9&#xff1a;<\/p>\n<ul>\n<li>&gt; \u5c31\u50cf\u64e6\u9ed1\u677f\u91cd\u65b0\u5199\u2014\u2014\u539f\u6765\u7684\u5185\u5bb9\u88ab\u64e6\u6389<\/li>\n<li>&gt;&gt; \u5c31\u50cf\u5728\u7eb8\u4e0a\u63a5\u7740\u5199\u2014\u2014\u539f\u6765\u7684\u5185\u5bb9\u8fd8\u5728<\/li>\n<\/ul>\n<p>\u9519\u8bef\u91cd\u5b9a\u5411&#xff08;2&gt;&#xff09;&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u628a\u9519\u8bef\u4fe1\u606f\u5199\u5165\u6587\u4ef6<\/span><br \/>\n<span class=\"token function\">ls<\/span> \/nonexistent <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span> error.log<\/p>\n<p><span class=\"token comment\"># \u4e22\u5f03\u9519\u8bef\u4fe1\u606f&#xff08;\u6254\u5230\u9ed1\u6d1e\/dev\/null&#xff09;<\/span><br \/>\n<span class=\"token function\">ls<\/span> \/nonexistent <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span> \/dev\/null<\/p>\n<p>\u5728Linux\u4e2d&#xff0c;\u6bcf\u4e2a\u8fdb\u7a0b\u6709\u4e09\u4e2a\u6807\u51c6\u6d41&#xff1a;<\/p>\n<table>\n<tr>\u7f16\u53f7\u540d\u79f0\u8bf4\u660e<\/tr>\n<tbody>\n<tr>\n<td>0<\/td>\n<td>stdin<\/td>\n<td>\u6807\u51c6\u8f93\u5165&#xff08;\u952e\u76d8&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>stdout<\/td>\n<td>\u6807\u51c6\u8f93\u51fa&#xff08;\u5c4f\u5e55&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>stderr<\/td>\n<td>\u6807\u51c6\u9519\u8bef&#xff08;\u5c4f\u5e55&#xff09;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6240\u4ee5 2&gt; \u5c31\u662f\u91cd\u5b9a\u5411\u6807\u51c6\u9519\u8bef\u3002<\/p>\n<p>\u540c\u65f6\u91cd\u5b9a\u5411\u6b63\u786e\u548c\u9519\u8bef\u8f93\u51fa&#xff08;&amp;&gt;&#xff09;&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u628a\u6b63\u786e\u548c\u9519\u8bef\u8f93\u51fa\u90fd\u5199\u5165\u540c\u4e00\u4e2a\u6587\u4ef6<\/span><br \/>\n<span class=\"token builtin class-name\">command<\/span> <span class=\"token operator\">&amp;&gt;<\/span> output.log<\/p>\n<p><span class=\"token comment\"># \u7b49\u4ef7\u5199\u6cd5<\/span><br \/>\n<span class=\"token builtin class-name\">command<\/span> <span class=\"token operator\">&gt;<\/span> output.log <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;1<\/span><\/p>\n<p>\u8f93\u5165\u91cd\u5b9a\u5411&#xff08;&lt;&#xff09;&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u4ece\u6587\u4ef6\u8bfb\u53d6\u5185\u5bb9&#xff08;\u800c\u4e0d\u662f\u4ece\u952e\u76d8&#xff09;<\/span><br \/>\n<span class=\"token function\">wc<\/span> <span class=\"token parameter variable\">-l<\/span> <span class=\"token operator\">&lt;<\/span> \/etc\/passwd    <span class=\"token comment\"># \u7edf\u8ba1\u6587\u4ef6\u7684\u884c\u6570<\/span><\/p>\n<p><span class=\"token comment\"># \u5728\u811a\u672c\u4e2d<\/span><br \/>\n<span class=\"token keyword\">while<\/span> <span class=\"token builtin class-name\">read<\/span> line<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5904\u7406&#xff1a;<span class=\"token variable\">$line<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span> <span class=\"token operator\">&lt;<\/span> input.txt<\/p>\n<p>Here Document&#xff08;&lt;&lt;&#xff09;&#xff1a;<\/p>\n<p>Here Document\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u8f93\u5165\u65b9\u5f0f&#xff0c;\u53ef\u4ee5\u5728\u811a\u672c\u4e2d\u76f4\u63a5\u5199\u591a\u884c\u6587\u672c&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># here\u6587\u6863\u793a\u4f8b<\/span><\/p>\n<p><span class=\"token function\">cat<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">EOF<br \/>\n&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n  \u6b22\u8fce\u4f7f\u7528\u672c\u7cfb\u7edf<br \/>\n  \u7248\u672c&#xff1a;1.0<br \/>\n  \u4f5c\u8005&#xff1a;\u5f20\u4e09<br \/>\n&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\nEOF<\/span><\/p>\n<p>&lt;&lt; \u540e\u9762\u8ddf\u4e00\u4e2a\u6807\u8bb0&#xff08;\u901a\u5e38\u662fEOF&#xff0c;\u8868\u793aEnd Of File&#xff09;&#xff0c;\u4e4b\u95f4\u7684\u5185\u5bb9\u4f1a\u88ab\u5f53\u4f5c\u8f93\u5165\u3002\u5f53\u518d\u6b21\u9047\u5230\u8fd9\u4e2a\u6807\u8bb0\u65f6&#xff0c;\u8f93\u5165\u7ed3\u675f\u3002<\/p>\n<p>\u5b9e\u9645\u7528\u9014\u2014\u2014\u751f\u6210\u914d\u7f6e\u6587\u4ef6&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u81ea\u52a8\u751f\u6210\u914d\u7f6e\u6587\u4ef6<\/span><\/p>\n<p><span class=\"token function\">cat<\/span> <span class=\"token operator\">&gt;<\/span> \/tmp\/myapp.conf <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">EOF<br \/>\n# \u5e94\u7528\u914d\u7f6e\u6587\u4ef6<br \/>\nAPP_NAME&#061;MyApp<br \/>\nAPP_PORT&#061;8080<br \/>\nAPP_DEBUG&#061;true<br \/>\nAPP_LOG&#061;\/var\/log\/myapp.log<br \/>\nEOF<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u914d\u7f6e\u6587\u4ef6\u5df2\u751f\u6210&#034;<\/span><br \/>\n<span class=\"token function\">cat<\/span> \/tmp\/myapp.conf<\/p>\n<h4>7.11.5 \u7ba1\u9053 |<\/h4>\n<p>\u7ba1\u9053 | \u628a\u524d\u4e00\u4e2a\u547d\u4ee4\u7684\u8f93\u51fa\u5f53\u4f5c\u540e\u4e00\u4e2a\u547d\u4ee4\u7684\u8f93\u5165&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u67e5\u770b\u7cfb\u7edf\u4e2d\u8fd0\u884c\u7684\u6240\u6709\u8fdb\u7a0b&#xff0c;\u7136\u540e\u53ea\u770b\u5305\u542bnginx\u7684<\/span><br \/>\n<span class=\"token function\">ps<\/span> aux <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> nginx<\/p>\n<p><span class=\"token comment\"># \u7edf\u8ba1\u5f53\u524d\u76ee\u5f55\u6709\u591a\u5c11\u4e2a\u6587\u4ef6<\/span><br \/>\n<span class=\"token function\">ls<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">wc<\/span> <span class=\"token parameter variable\">-l<\/span><\/p>\n<p><span class=\"token comment\"># \u67e5\u770b\u6587\u4ef6\u5185\u5bb9\u5e76\u5206\u9875\u663e\u793a<\/span><br \/>\n<span class=\"token function\">cat<\/span> \/etc\/passwd <span class=\"token operator\">|<\/span> <span class=\"token function\">less<\/span><\/p>\n<p><span class=\"token comment\"># \u591a\u7ea7\u7ba1\u9053<\/span><br \/>\n<span class=\"token function\">cat<\/span> \/etc\/passwd <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token function\">bash<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">wc<\/span> <span class=\"token parameter variable\">-l<\/span><br \/>\n<span class=\"token comment\"># \u627e\u51fa\u4f7f\u7528bash\u7684\u7528\u6237\u6570\u91cf<\/span><\/p>\n<p>\u7ba1\u9053\u5c31\u50cf\u6d41\u6c34\u7ebf\u2014\u2014\u524d\u4e00\u4e2a\u5de5\u5e8f\u7684\u4ea7\u54c1&#xff0c;\u76f4\u63a5\u4f20\u7ed9\u4e0b\u4e00\u4e2a\u5de5\u5e8f\u7ee7\u7eed\u52a0\u5de5\u3002<\/p>\n<h4>7.11.6 \u7efc\u5408\u793a\u4f8b&#xff1a;\u7528\u6237\u6ce8\u518c\u7cfb\u7edf<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u7528\u6237\u6ce8\u518c\u7cfb\u7edf register.sh<\/span><\/p>\n<p><span class=\"token comment\"># \u5b58\u50a8\u7528\u6237\u4fe1\u606f\u7684\u6587\u4ef6<\/span><br \/>\n<span class=\"token assign-left variable\">USER_FILE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;users.txt&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u5982\u679c\u6587\u4ef6\u4e0d\u5b58\u5728\u5c31\u521b\u5efa<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token operator\">!<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$USER_FILE<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token function\">touch<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$USER_FILE<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u6ce8\u518c\u51fd\u6570<\/span><br \/>\n<span class=\"token function-name function\">register<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061; \u7528\u6237\u6ce8\u518c &#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u7528\u6237\u540d&#xff1a;&#034;<\/span> username<\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5\u7528\u6237\u540d\u662f\u5426\u5df2\u5b58\u5728<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-q<\/span> <span class=\"token string\">&#034;^<span class=\"token variable\">${username}<\/span>|&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$USER_FILE<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u9519\u8bef&#xff1a;\u7528\u6237\u540d <span class=\"token variable\">$username<\/span> \u5df2\u5b58\u5728&#xff01;&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span> <span class=\"token number\">1<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-s<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u5bc6\u7801&#xff1a;&#034;<\/span> password<br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-s<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u518d\u6b21\u8f93\u5165\u5bc6\u7801&#xff1a;&#034;<\/span> password2<br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$password<\/span>&#034;<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$password2<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u9519\u8bef&#xff1a;\u4e24\u6b21\u5bc6\u7801\u4e0d\u4e00\u81f4&#xff01;&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span> <span class=\"token number\">1<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u90ae\u7bb1&#xff1a;&#034;<\/span> email<\/p>\n<p>    <span class=\"token comment\"># \u4fdd\u5b58\u5230\u6587\u4ef6&#xff08;\u7528|\u5206\u9694&#xff09;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${username}<\/span>|<span class=\"token variable\">${password}<\/span>|<span class=\"token variable\">${email}<\/span>&#034;<\/span> <span class=\"token operator\">&gt;&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$USER_FILE<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6ce8\u518c\u6210\u529f&#xff01;\u6b22\u8fce <span class=\"token variable\">$username<\/span>&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u767b\u5f55\u51fd\u6570<\/span><br \/>\n<span class=\"token function-name function\">login<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061; \u7528\u6237\u767b\u5f55 &#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u7528\u6237\u540d&#xff1a;&#034;<\/span> username<br \/>\n    <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-s<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u5bc6\u7801&#xff1a;&#034;<\/span> password<br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u9a8c\u8bc1<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-q<\/span> <span class=\"token string\">&#034;^<span class=\"token variable\">${username}<\/span>|<span class=\"token variable\">${password}<\/span>|&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$USER_FILE<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u767b\u5f55\u6210\u529f&#xff01;\u6b22\u8fce\u56de\u6765&#xff0c;<span class=\"token variable\">$username<\/span>&#034;<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u767b\u5f55\u5931\u8d25&#xff1a;\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef&#xff01;&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u4e3b\u83dc\u5355<\/span><br \/>\n<span class=\"token keyword\">while<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;   \u6b22\u8fce\u4f7f\u7528\u7528\u6237\u7cfb\u7edf&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;1. \u6ce8\u518c&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;2. \u767b\u5f55&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;3. \u67e5\u770b\u7528\u6237\u5217\u8868&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;4. \u9000\u51fa&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<p>    <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;\u8bf7\u9009\u62e9 [1-4]&#xff1a;&#034;<\/span> choice<\/p>\n<p>    <span class=\"token keyword\">case<\/span> <span class=\"token variable\">$choice<\/span> <span class=\"token keyword\">in<\/span><br \/>\n        <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> register <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> login <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5df2\u6ce8\u518c\u7528\u6237&#xff1a;&#034;<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-s<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$USER_FILE<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n                <span class=\"token function\">cut<\/span> -d<span class=\"token string\">&#039;|&#039;<\/span> <span class=\"token parameter variable\">-f1<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$USER_FILE<\/span>&#034;<\/span><br \/>\n            <span class=\"token keyword\">else<\/span><br \/>\n                <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u6682\u65e0\u7528\u6237&#034;<\/span><br \/>\n            <span class=\"token keyword\">fi<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u518d\u89c1&#xff01;&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token builtin class-name\">break<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        *<span class=\"token punctuation\">)<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u65e0\u6548\u9009\u62e9&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">esac<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<hr \/>\n<h3>7.12 \u811a\u672c\u8c03\u8bd5\u4e0e\u9519\u8bef\u5904\u7406<\/h3>\n<h4>7.12.1 \u5e38\u89c1\u9519\u8bef\u7c7b\u578b<\/h4>\n<p>\u5199Shell\u811a\u672c\u65f6&#xff0c;\u5e38\u89c1\u7684\u9519\u8bef\u6709&#xff1a;<\/p>\n<p>\u9519\u8bef\u4e00&#xff1a;\u8bed\u6cd5\u9519\u8bef<\/p>\n<p><span class=\"token comment\"># if\u540e\u9762\u5fd8\u4e86then<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$a<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token number\">10<\/span> <span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5927\u4e8e10&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token comment\"># \u62a5\u9519&#xff1a;syntax error near unexpected token &#096;fi&#039;<\/span><\/p>\n<p>\u9519\u8bef\u4e8c&#xff1a;\u53d8\u91cf\u672a\u5b9a\u4e49<\/p>\n<p><span class=\"token comment\"># \u53d8\u91cf\u540d\u6253\u9519\u4e86<\/span><br \/>\n<span class=\"token assign-left variable\">username<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$usernam<\/span>   <span class=\"token comment\"># \u5c11\u4e86\u4e2ae&#xff0c;\u8f93\u51fa\u4e3a\u7a7a<\/span><\/p>\n<p>\u9519\u8bef\u4e09&#xff1a;\u6743\u9650\u95ee\u9898<\/p>\n<p><span class=\"token comment\"># \u6ca1\u6709\u6267\u884c\u6743\u9650\u5c31\u8fd0\u884c<\/span><br \/>\n.\/script.sh<br \/>\n<span class=\"token comment\"># \u62a5\u9519&#xff1a;Permission denied<\/span><\/p>\n<p>\u9519\u8bef\u56db&#xff1a;\u8def\u5f84\u9519\u8bef<\/p>\n<p><span class=\"token comment\"># \u6587\u4ef6\u8def\u5f84\u4e0d\u5b58\u5728<\/span><br \/>\n<span class=\"token function\">cat<\/span> \/etc\/passwdd   <span class=\"token comment\"># \u591a\u4e86\u4e2ad<\/span><br \/>\n<span class=\"token comment\"># \u62a5\u9519&#xff1a;No such file or directory<\/span><\/p>\n<h4>7.12.2 \u8c03\u8bd5\u6a21\u5f0f -x<\/h4>\n<p>\u5728\u8fd0\u884c\u811a\u672c\u65f6\u52a0 -x \u53c2\u6570&#xff0c;\u53ef\u4ee5\u67e5\u770b\u6bcf\u4e00\u6b65\u6267\u884c\u4e86\u4ec0\u4e48&#xff1a;<\/p>\n<p><span class=\"token function\">bash<\/span> <span class=\"token parameter variable\">-x<\/span> script.sh<\/p>\n<p>\u6216\u8005\u5728\u811a\u672c\u5f00\u5934\u52a0\u4e0a&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash -x<\/span><\/p>\n<p>\u6548\u679c&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u8c03\u8bd5\u793a\u4f8b debug.sh<\/span><\/p>\n<p><span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">age<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">25<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$name<\/span> \u4eca\u5e74 <span class=\"token variable\">$age<\/span> \u5c81&#034;<\/span><\/p>\n<p>\u6b63\u5e38\u8fd0\u884c&#xff1a;<\/p>\n<p>\u5f20\u4e09 \u4eca\u5e74 25 \u5c81<\/p>\n<p>\u7528 -x \u8fd0\u884c bash -x debug.sh&#xff1a;<\/p>\n<p>&#043; name&#061;\u5f20\u4e09<br \/>\n&#043; age&#061;25<br \/>\n&#043; echo &#039;\u5f20\u4e09 \u4eca\u5e74 25 \u5c81&#039;<br \/>\n\u5f20\u4e09 \u4eca\u5e74 25 \u5c81<\/p>\n<p>\u6bcf\u884c\u524d\u9762\u7684 &#043; \u8868\u793a\u8fd9\u662fShell\u6267\u884c\u7684\u547d\u4ee4&#xff0c;\u4f60\u80fd\u6e05\u695a\u5730\u770b\u5230\u6bcf\u4e00\u6b65\u505a\u4e86\u4ec0\u4e48\u3002\u5f53\u811a\u672c\u6709bug\u65f6&#xff0c;\u7528\u8fd9\u4e2a\u65b9\u6cd5\u80fd\u5feb\u901f\u5b9a\u4f4d\u95ee\u9898\u3002<\/p>\n<h4>7.12.3 \u8c03\u8bd5\u6a21\u5f0f -v<\/h4>\n<p>-v \u6a21\u5f0f\u4f1a\u663e\u793a\u811a\u672c\u4e2d\u6bcf\u4e00\u884c\u7684\u539f\u59cb\u5185\u5bb9&#xff08;\u6267\u884c\u524d&#xff09;&#xff1a;<\/p>\n<p><span class=\"token function\">bash<\/span> <span class=\"token parameter variable\">-v<\/span> script.sh<\/p>\n<p>-v \u548c -x \u7684\u533a\u522b&#xff1a;<\/p>\n<ul>\n<li>-v&#xff1a;\u663e\u793a\u8981\u6267\u884c\u7684\u884c&#xff08;\u539f\u6587&#xff09;<\/li>\n<li>-x&#xff1a;\u663e\u793a\u6267\u884c\u540e\u7684\u547d\u4ee4&#xff08;\u53d8\u91cf\u5df2\u66ff\u6362&#xff09;<\/li>\n<\/ul>\n<p>\u901a\u5e38\u4e24\u4e2a\u4e00\u8d77\u7528&#xff1a;bash -vx script.sh<\/p>\n<h4>7.12.4 \u5728\u811a\u672c\u4e2d\u5c40\u90e8\u5f00\u542f\u8c03\u8bd5<\/h4>\n<p>\u4f60\u53ef\u4ee5\u5728\u811a\u672c\u7684\u67d0\u4e00\u90e8\u5206\u5f00\u542f\u8c03\u8bd5&#xff0c;\u4e0d\u9700\u8981\u5168\u7a0b\u5f00\u542f&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8fd9\u90e8\u5206\u4e0d\u8c03\u8bd5&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">set<\/span> <span class=\"token parameter variable\">-x<\/span>    <span class=\"token comment\"># \u5f00\u542f\u8c03\u8bd5<\/span><br \/>\n<span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5f20\u4e09&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">age<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">25<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$name<\/span> <span class=\"token variable\">$age<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">set<\/span> &#043;x    <span class=\"token comment\"># \u5173\u95ed\u8c03\u8bd5<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8fd9\u90e8\u5206\u4e5f\u4e0d\u8c03\u8bd5&#034;<\/span><\/p>\n<h4>7.12.5 set\u547d\u4ee4\u7684\u5e38\u7528\u9009\u9879<\/h4>\n<table>\n<tr>\u9009\u9879\u542b\u4e49\u4f5c\u7528<\/tr>\n<tbody>\n<tr>\n<td>set -e<\/td>\n<td>\u9047\u5230\u9519\u8bef\u5c31\u9000\u51fa<\/td>\n<td>\u4efb\u4f55\u547d\u4ee4\u8fd4\u56de\u975e0&#xff0c;\u811a\u672c\u7acb\u5373\u505c\u6b62<\/td>\n<\/tr>\n<tr>\n<td>set -u<\/td>\n<td>\u4f7f\u7528\u672a\u5b9a\u4e49\u53d8\u91cf\u5c31\u62a5\u9519<\/td>\n<td>\u9632\u6b62\u53d8\u91cf\u540d\u6253\u9519<\/td>\n<\/tr>\n<tr>\n<td>set -x<\/td>\n<td>\u6253\u5370\u6267\u884c\u7684\u547d\u4ee4<\/td>\n<td>\u8c03\u8bd5\u7528<\/td>\n<\/tr>\n<tr>\n<td>set -o pipefail<\/td>\n<td>\u7ba1\u9053\u4e2d\u4efb\u4e00\u547d\u4ee4\u5931\u8d25\u5c31\u5931\u8d25<\/td>\n<td>\u9ed8\u8ba4\u53ea\u770b\u7ba1\u9053\u6700\u540e\u547d\u4ee4\u7684\u8fd4\u56de\u503c<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u63a8\u8350\u5728\u811a\u672c\u5f00\u5934\u52a0\u4e0a&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token builtin class-name\">set<\/span> <span class=\"token parameter variable\">-euo<\/span> pipefail<\/p>\n<p>\u8fd9\u4e09\u4e2a\u9009\u9879\u80fd\u8ba9\u4f60\u7684\u811a\u672c\u66f4\u5065\u58ee&#xff1a;<\/p>\n<ul>\n<li>-e&#xff1a;\u51fa\u9519\u5c31\u505c&#xff0c;\u4e0d\u8ba9\u9519\u8bef\u8513\u5ef6<\/li>\n<li>-u&#xff1a;\u53d8\u91cf\u672a\u5b9a\u4e49\u5c31\u62a5\u9519&#xff0c;\u907f\u514d\u7a7a\u53d8\u91cf\u5bfc\u81f4\u7684bug<\/li>\n<li>-o pipefail&#xff1a;\u7ba1\u9053\u547d\u4ee4\u51fa\u9519\u4e5f\u80fd\u6355\u83b7<\/li>\n<\/ul>\n<h4>7.12.6 \u9519\u8bef\u5904\u7406&#xff1a;\u68c0\u67e5\u547d\u4ee4\u8fd4\u56de\u503c<\/h4>\n<p>\u6bcf\u6761\u547d\u4ee4\u6267\u884c\u540e\u90fd\u6709\u4e00\u4e2a\u8fd4\u56de\u503c&#xff08;\u9000\u51fa\u72b6\u6001\u7801 $?&#xff09;&#xff1a;<\/p>\n<ul>\n<li>0&#xff1a;\u6210\u529f<\/li>\n<li>\u975e0&#xff1a;\u5931\u8d25&#xff08;\u4e0d\u540c\u7684\u6570\u5b57\u4ee3\u8868\u4e0d\u540c\u7684\u9519\u8bef&#xff09;<\/li>\n<\/ul>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u68c0\u67e5\u547d\u4ee4\u662f\u5426\u6210\u529f check_cmd.sh<\/span><\/p>\n<p><span class=\"token function\">mkdir<\/span> \/tmp\/test_dir<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$?<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u76ee\u5f55\u521b\u5efa\u6210\u529f&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u76ee\u5f55\u521b\u5efa\u5931\u8d25&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>\u7b80\u5199\u5f62\u5f0f&#xff08;\u7528&amp;&amp;\u548c||&#xff09;&#xff1a;<\/p>\n<p><span class=\"token comment\"># \u6210\u529f\u65f6\u505aA&#xff0c;\u5931\u8d25\u65f6\u505aB<\/span><br \/>\n<span class=\"token function\">mkdir<\/span> \/tmp\/test_dir <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6210\u529f&#034;<\/span> <span class=\"token operator\">||<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5931\u8d25&#034;<\/span><\/p>\n<h4>7.12.7 trap\u547d\u4ee4&#xff1a;\u6355\u83b7\u4fe1\u53f7<\/h4>\n<p>trap \u53ef\u4ee5\u5728\u811a\u672c\u6536\u5230\u7279\u5b9a\u4fe1\u53f7\u65f6\u6267\u884c\u6307\u5b9a\u7684\u547d\u4ee4\u3002\u6700\u5e38\u7528\u7684\u573a\u666f\u662f&#xff1a;\u811a\u672c\u4e2d\u9014\u88abCtrl&#043;C\u4e2d\u65ad\u65f6&#xff0c;\u6e05\u7406\u4e34\u65f6\u6587\u4ef6\u3002<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># trap\u6f14\u793a trap.sh<\/span><\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u6e05\u7406\u51fd\u6570<\/span><br \/>\n<span class=\"token function-name function\">cleanup<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6b63\u5728\u6e05\u7406\u4e34\u65f6\u6587\u4ef6&#8230;&#034;<\/span><br \/>\n    <span class=\"token function\">rm<\/span> <span class=\"token parameter variable\">-f<\/span> \/tmp\/my_temp_*<br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6e05\u7406\u5b8c\u6210&#xff0c;\u518d\u89c1&#xff01;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">0<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u6355\u83b7Ctrl&#043;C&#xff08;SIGINT&#xff09;\u548c\u9000\u51fa\u4fe1\u53f7<\/span><br \/>\n<span class=\"token builtin class-name\">trap<\/span> cleanup SIGINT SIGTERM<\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u811a\u672c\u5f00\u59cb\u8fd0\u884c&#xff0c;\u6309Ctrl&#043;C\u53ef\u4ee5\u4e2d\u65ad&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6b63\u5728\u5904\u7406&#8230;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u6a21\u62df\u957f\u65f6\u95f4\u8fd0\u884c<\/span><br \/>\n<span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">i<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">..<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8fdb\u5ea6&#xff1a;<span class=\"token variable\">$i<\/span>%&#034;<\/span><br \/>\n    <span class=\"token function\">sleep<\/span> <span class=\"token number\">0.5<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5904\u7406\u5b8c\u6210&#xff01;&#034;<\/span><\/p>\n<p>\u5e38\u7528\u4fe1\u53f7&#xff1a;<\/p>\n<table>\n<tr>\u4fe1\u53f7\u7f16\u53f7\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>SIGINT<\/td>\n<td>2<\/td>\n<td>Ctrl&#043;C\u4e2d\u65ad<\/td>\n<\/tr>\n<tr>\n<td>SIGTERM<\/td>\n<td>15<\/td>\n<td>\u7ec8\u6b62\u4fe1\u53f7<\/td>\n<\/tr>\n<tr>\n<td>SIGKILL<\/td>\n<td>9<\/td>\n<td>\u5f3a\u5236\u6740\u6b7b&#xff08;\u4e0d\u80fd\u88abtrap\u6355\u83b7&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>EXIT<\/td>\n<td>0<\/td>\n<td>\u811a\u672c\u9000\u51fa<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>7.12.8 \u5b9e\u7528\u7684\u9519\u8bef\u5904\u7406\u6a21\u677f<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u5e26\u5b8c\u6574\u9519\u8bef\u5904\u7406\u7684\u811a\u672c\u6a21\u677f template.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">set<\/span> <span class=\"token parameter variable\">-euo<\/span> pipefail<\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u65e5\u5fd7\u51fd\u6570<\/span><br \/>\n<span class=\"token function-name function\">log_info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;[INFO]  <span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%H:%M:%S&#039;<\/span><span class=\"token variable\">)<\/span><\/span> <span class=\"token variable\">$*<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token function-name function\">log_warn<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;[WARN]  <span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%H:%M:%S&#039;<\/span><span class=\"token variable\">)<\/span><\/span> <span class=\"token variable\">$*<\/span>&#034;<\/span> <span class=\"token operator\">&gt;<\/span><span class=\"token file-descriptor important\">&amp;2<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token function-name function\">log_error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;[ERROR] <span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%H:%M:%S&#039;<\/span><span class=\"token variable\">)<\/span><\/span> <span class=\"token variable\">$*<\/span>&#034;<\/span> <span class=\"token operator\">&gt;<\/span><span class=\"token file-descriptor important\">&amp;2<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u9519\u8bef\u5904\u7406\u51fd\u6570<\/span><br \/>\n<span class=\"token function-name function\">on_error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    log_error <span class=\"token string\">&#034;\u811a\u672c\u5728\u884c <span class=\"token variable\">$1<\/span> \u53d1\u751f\u9519\u8bef&#034;<\/span><br \/>\n    <span class=\"token comment\"># \u8fd9\u91cc\u53ef\u4ee5\u505a\u4e00\u4e9b\u6e05\u7406\u5de5\u4f5c<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u8bbe\u7f6e\u9519\u8bef\u9677\u9631&#xff08;ERR\u4fe1\u53f7\u5e26\u884c\u53f7&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">trap<\/span> <span class=\"token string\">&#039;on_error $LINENO&#039;<\/span> ERR<\/p>\n<p><span class=\"token comment\"># \u5b9a\u4e49\u6e05\u7406\u51fd\u6570<\/span><br \/>\n<span class=\"token function-name function\">cleanup<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    log_info <span class=\"token string\">&#034;\u811a\u672c\u7ed3\u675f&#xff0c;\u6267\u884c\u6e05\u7406&#8230;&#034;<\/span><br \/>\n    <span class=\"token comment\"># rm -f \/tmp\/temp_*<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token builtin class-name\">trap<\/span> cleanup EXIT<\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u4e3b\u7a0b\u5e8f\u5f00\u59cb &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\nlog_info <span class=\"token string\">&#034;\u811a\u672c\u5f00\u59cb\u6267\u884c&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u68c0\u67e5\u5fc5\u8981\u7684\u76ee\u5f55<\/span><br \/>\n<span class=\"token assign-left variable\">DATA_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/tmp\/myapp_data&#034;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token operator\">!<\/span> <span class=\"token parameter variable\">-d<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$DATA_DIR<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    log_info <span class=\"token string\">&#034;\u521b\u5efa\u6570\u636e\u76ee\u5f55: <span class=\"token variable\">$DATA_DIR<\/span>&#034;<\/span><br \/>\n    <span class=\"token function\">mkdir<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$DATA_DIR<\/span>&#034;<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">{<\/span> log_error <span class=\"token string\">&#034;\u65e0\u6cd5\u521b\u5efa\u76ee\u5f55&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u68c0\u67e5\u5fc5\u8981\u7684\u6587\u4ef6<\/span><br \/>\n<span class=\"token assign-left variable\">CONFIG_FILE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">$DATA_DIR<\/span>\/config.txt&#034;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token operator\">!<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$CONFIG_FILE<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    log_warn <span class=\"token string\">&#034;\u914d\u7f6e\u6587\u4ef6\u4e0d\u5b58\u5728&#xff0c;\u521b\u5efa\u9ed8\u8ba4\u914d\u7f6e&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;default&#061;true&#034;<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$CONFIG_FILE<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p>log_info <span class=\"token string\">&#034;\u8bfb\u53d6\u914d\u7f6e&#8230;&#034;<\/span><br \/>\n<span class=\"token keyword\">while<\/span> <span class=\"token builtin class-name\">read<\/span> line<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    log_info <span class=\"token string\">&#034;\u914d\u7f6e\u9879: <span class=\"token variable\">$line<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">done<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$CONFIG_FILE<\/span>&#034;<\/span><\/p>\n<p>log_info <span class=\"token string\">&#034;\u6240\u6709\u64cd\u4f5c\u5b8c\u6210&#034;<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u4e3b\u7a0b\u5e8f\u7ed3\u675f &#061;&#061;&#061;&#061;&#061;<\/span><\/p>\n<p>\u8fd9\u4e2a\u6a21\u677f\u5305\u542b\u4e86&#xff1a;<\/p>\n<li>set -euo pipefail \u4e25\u683c\u6a21\u5f0f<\/li>\n<li>\u65e5\u5fd7\u51fd\u6570&#xff08;\u5e26\u65f6\u95f4\u6233\u548c\u7ea7\u522b&#xff09;<\/li>\n<li>\u9519\u8bef\u6355\u83b7&#xff08;\u8bb0\u5f55\u51fa\u9519\u884c\u53f7&#xff09;<\/li>\n<li>\u9000\u51fa\u6e05\u7406\u673a\u5236<\/li>\n<h4>7.12.9 \u8c03\u8bd5\u6280\u5de7\u603b\u7ed3<\/h4>\n<li>\u7528 bash -n \u68c0\u67e5\u8bed\u6cd5&#xff08;\u4e0d\u6267\u884c&#xff0c;\u53ea\u68c0\u67e5\u8bed\u6cd5\u5bf9\u4e0d\u5bf9&#xff09;&#xff1a;<\/li>\n<p><span class=\"token function\">bash<\/span> <span class=\"token parameter variable\">-n<\/span> script.sh<\/p>\n<li>\u7528 shellcheck \u5de5\u5177&#xff08;\u5982\u679c\u88c5\u4e86\u7684\u8bdd&#xff09;&#xff1a;<\/li>\n<p><span class=\"token function\">shellcheck<\/span> script.sh<\/p>\n<li>\u5728\u5173\u952e\u4f4d\u7f6e\u52a0echo&#xff0c;\u6253\u5370\u53d8\u91cf\u503c&#xff1a;<\/li>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;DEBUG: var_name &#061; <span class=\"token variable\">$var_name<\/span>&#034;<\/span><\/p>\n<li>\u7528 set -x \u5c40\u90e8\u8c03\u8bd5&#xff1a;<\/li>\n<p><span class=\"token builtin class-name\">set<\/span> <span class=\"token parameter variable\">-x<\/span><br \/>\n<span class=\"token comment\"># \u53ef\u80fd\u6709\u95ee\u9898\u7684\u4ee3\u7801<\/span><br \/>\n<span class=\"token builtin class-name\">set<\/span> &#043;x<\/p>\n<li>\u5206\u6bb5\u6d4b\u8bd5&#xff1a;\u5148\u5199\u4e00\u5c0f\u6bb5&#xff0c;\u6d4b\u8bd5\u6ca1\u95ee\u9898\u518d\u52a0\u4e0b\u4e00\u6bb5<\/li>\n<hr \/>\n<h3>7.13 \u5b9e\u6218\u811a\u672c\u7f16\u5199\u6848\u4f8b<\/h3>\n<h4>7.13.1 \u6848\u4f8b&#xff1a;\u81ea\u52a8\u5907\u4efd\u811a\u672c<\/h4>\n<p>\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u5b9e\u7528\u7684\u811a\u672c&#xff0c;\u81ea\u52a8\u5907\u4efd\u6307\u5b9a\u76ee\u5f55&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u81ea\u52a8\u5907\u4efd\u811a\u672c backup.sh<\/span><br \/>\n<span class=\"token comment\"># \u7528\u6cd5&#xff1a;.\/backup.sh \u6e90\u76ee\u5f55 \u5907\u4efd\u76ee\u5f55<\/span><\/p>\n<p><span class=\"token builtin class-name\">set<\/span> <span class=\"token parameter variable\">-euo<\/span> pipefail<\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u914d\u7f6e &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token assign-left variable\">SOURCE_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${1<span class=\"token operator\">:-<\/span><span class=\"token operator\">\/<\/span>home<span class=\"token operator\">\/<\/span>user<span class=\"token operator\">\/<\/span>data}<\/span>&#034;<\/span>    <span class=\"token comment\"># \u6e90\u76ee\u5f55&#xff0c;\u9ed8\u8ba4\/home\/user\/data<\/span><br \/>\n<span class=\"token assign-left variable\">BACKUP_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${2<span class=\"token operator\">:-<\/span><span class=\"token operator\">\/<\/span>backup}<\/span>&#034;<\/span>            <span class=\"token comment\"># \u5907\u4efd\u76ee\u5f55&#xff0c;\u9ed8\u8ba4\/backup<\/span><br \/>\n<span class=\"token assign-left variable\">KEEP_DAYS<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">7<\/span>                           <span class=\"token comment\"># \u4fdd\u7559\u51e0\u5929\u7684\u5907\u4efd<\/span><br \/>\n<span class=\"token assign-left variable\">DATE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%Y%m%d_%H%M%S&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token assign-left variable\">BACKUP_FILE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${BACKUP_DIR}<\/span>\/backup_<span class=\"token variable\">${DATE}<\/span>.tar.gz&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">LOG_FILE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${BACKUP_DIR}<\/span>\/backup.log&#034;<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u51fd\u6570\u5b9a\u4e49 &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token function-name function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;[<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%Y-%m-%d %H:%M:%S&#039;<\/span><span class=\"token variable\">)<\/span><\/span>] <span class=\"token variable\">$*<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">tee<\/span> <span class=\"token parameter variable\">-a<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token function-name function\">error_exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    log <span class=\"token string\">&#034;ERROR: <span class=\"token variable\">$1<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token function-name function\">cleanup_old_backups<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    log <span class=\"token string\">&#034;\u6e05\u7406 <span class=\"token variable\">${KEEP_DAYS}<\/span> \u5929\u524d\u7684\u65e7\u5907\u4efd&#8230;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">deleted<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">file<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${BACKUP_DIR}<\/span>&#034;<\/span>\/backup_*.tar.gz<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">file_date<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-o<\/span> <span class=\"token string\">&#039;[0-9]\\\\{8\\\\}&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n            <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">diff_days<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span> <span class=\"token punctuation\">(<\/span>$<span class=\"token punctuation\">(<\/span>date <span class=\"token operator\">&#043;<\/span><span class=\"token operator\">%<\/span>s<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> $<span class=\"token punctuation\">(<\/span>date <span class=\"token operator\">&#8211;<\/span>d &#034;$file_date&#034; <span class=\"token operator\">&#043;<\/span><span class=\"token operator\">%<\/span>s<span class=\"token variable\">))<\/span><\/span> \/ <span class=\"token number\">86400<\/span> <span class=\"token punctuation\">))<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$diff_days<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token variable\">$KEEP_DAYS<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n                <span class=\"token function\">rm<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span><br \/>\n                log <span class=\"token string\">&#034;\u5df2\u5220\u9664\u65e7\u5907\u4efd: <span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">basename<\/span> $file<span class=\"token variable\">)<\/span><\/span>&#034;<\/span><br \/>\n                <span class=\"token assign-left variable\">deleted<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>deleted <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n            <span class=\"token keyword\">fi<\/span><br \/>\n        <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token keyword\">done<\/span><br \/>\n    log <span class=\"token string\">&#034;\u5171\u5220\u9664 <span class=\"token variable\">$deleted<\/span> \u4e2a\u65e7\u5907\u4efd&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token function-name function\">show_summary<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">size<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">du<\/span> <span class=\"token parameter variable\">-h<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_FILE<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">cut<\/span> <span class=\"token parameter variable\">-f1<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">files<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">tar<\/span> <span class=\"token parameter variable\">-tzf<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_FILE<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">wc<\/span> <span class=\"token parameter variable\">-l<\/span><span class=\"token variable\">)<\/span><\/span><\/p>\n<p>    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u5907\u4efd\u62a5\u544a &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5907\u4efd\u65f6\u95f4&#xff1a;<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%Y-%m-%d %H:%M:%S&#039;<\/span><span class=\"token variable\">)<\/span><\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6e90\u76ee\u5f55&#xff1a;  <span class=\"token variable\">$SOURCE_DIR<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5907\u4efd\u5230&#xff1a;  <span class=\"token variable\">$BACKUP_FILE<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6587\u4ef6\u5927\u5c0f&#xff1a;<span class=\"token variable\">$size<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6587\u4ef6\u6570\u91cf&#xff1a;<span class=\"token variable\">$files<\/span> \u4e2a&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u4e3b\u7a0b\u5e8f &#061;&#061;&#061;&#061;&#061;<\/span><\/p>\n<p><span class=\"token comment\"># \u68c0\u67e5\u6e90\u76ee\u5f55<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token operator\">!<\/span> <span class=\"token parameter variable\">-d<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$SOURCE_DIR<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    error_exit <span class=\"token string\">&#034;\u6e90\u76ee\u5f55\u4e0d\u5b58\u5728: <span class=\"token variable\">$SOURCE_DIR<\/span>&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u521b\u5efa\u5907\u4efd\u76ee\u5f55<\/span><br \/>\n<span class=\"token function\">mkdir<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_DIR<\/span>&#034;<\/span> <span class=\"token operator\">||<\/span> error_exit <span class=\"token string\">&#034;\u65e0\u6cd5\u521b\u5efa\u5907\u4efd\u76ee\u5f55&#034;<\/span><\/p>\n<p>log <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u5f00\u59cb\u5907\u4efd &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\nlog <span class=\"token string\">&#034;\u6e90\u76ee\u5f55: <span class=\"token variable\">$SOURCE_DIR<\/span>&#034;<\/span><br \/>\nlog <span class=\"token string\">&#034;\u5907\u4efd\u5230: <span class=\"token variable\">$BACKUP_FILE<\/span>&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u6267\u884c\u5907\u4efd<\/span><br \/>\nlog <span class=\"token string\">&#034;\u6b63\u5728\u538b\u7f29\u6253\u5305&#8230;&#034;<\/span><br \/>\n<span class=\"token function\">tar<\/span> <span class=\"token parameter variable\">-czf<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$BACKUP_FILE<\/span>&#034;<\/span> <span class=\"token parameter variable\">-C<\/span> <span class=\"token string\">&#034;<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">dirname<\/span> $SOURCE_DIR<span class=\"token variable\">)<\/span><\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">basename<\/span> $SOURCE_DIR<span class=\"token variable\">)<\/span><\/span>&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n    error_exit <span class=\"token string\">&#034;\u5907\u4efd\u5931\u8d25&#034;<\/span><\/p>\n<p>log <span class=\"token string\">&#034;\u5907\u4efd\u5b8c\u6210&#xff01;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u6e05\u7406\u65e7\u5907\u4efd<\/span><br \/>\ncleanup_old_backups<\/p>\n<p><span class=\"token comment\"># \u663e\u793a\u6458\u8981<\/span><br \/>\nshow_summary<\/p>\n<p>log <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u5907\u4efd\u7ed3\u675f &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<h4>7.13.2 \u6848\u4f8b&#xff1a;\u7cfb\u7edf\u76d1\u63a7\u811a\u672c<\/h4>\n<p>\u76d1\u63a7\u7cfb\u7edf\u72b6\u6001&#xff0c;\u5f02\u5e38\u65f6\u62a5\u8b66&#xff1a;<\/p>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u7cfb\u7edf\u76d1\u63a7\u811a\u672c monitor.sh<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u9608\u503c\u914d\u7f6e &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token assign-left variable\">CPU_WARN<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">80<\/span>        <span class=\"token comment\"># CPU\u4f7f\u7528\u7387\u8b66\u544a\u9608\u503c(%)<\/span><br \/>\n<span class=\"token assign-left variable\">MEM_WARN<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">80<\/span>        <span class=\"token comment\"># \u5185\u5b58\u4f7f\u7528\u7387\u8b66\u544a\u9608\u503c(%)<\/span><br \/>\n<span class=\"token assign-left variable\">DISK_WARN<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">90<\/span>       <span class=\"token comment\"># \u78c1\u76d8\u4f7f\u7528\u7387\u8b66\u544a\u9608\u503c(%)<\/span><br \/>\n<span class=\"token assign-left variable\">CHECK_INTERVAL<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">60<\/span>  <span class=\"token comment\"># \u68c0\u67e5\u95f4\u9694(\u79d2)<\/span><br \/>\n<span class=\"token assign-left variable\">LOG_FILE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/var\/log\/sys_monitor.log&#034;<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u51fd\u6570 &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token function-name function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;[<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%Y-%m-%d %H:%M:%S&#039;<\/span><span class=\"token variable\">)<\/span><\/span>] <span class=\"token variable\">$*<\/span>&#034;<\/span> <span class=\"token operator\">&gt;&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token function-name function\">alert<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">msg<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;[ALERT] <span class=\"token variable\">$1<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$msg<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">tee<\/span> <span class=\"token parameter variable\">-a<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span><br \/>\n    <span class=\"token comment\"># \u8fd9\u91cc\u53ef\u4ee5\u52a0\u53d1\u90ae\u4ef6\u3001\u53d1\u77ed\u4fe1\u7b49\u901a\u77e5\u903b\u8f91<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token function-name function\">get_cpu_usage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\"># \u83b7\u53d6CPU\u4f7f\u7528\u7387<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">idle<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">top<\/span> <span class=\"token parameter variable\">-bn1<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token string\">&#034;Cpu(s)&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $8}&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">usage<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;100 &#8211; <span class=\"token variable\">$idle<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">bc<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$usage<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">cut<\/span> <span class=\"token parameter variable\">-d<\/span><span class=\"token string\">&#039;.&#039;<\/span> <span class=\"token parameter variable\">-f1<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token function-name function\">get_mem_usage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">total<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">free<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> Mem <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $2}&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">used<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">free<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> Mem <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $3}&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\"><span class=\"token variable\">$((<\/span>used <span class=\"token operator\">*<\/span> <span class=\"token number\">100<\/span> <span class=\"token operator\">\/<\/span> total<span class=\"token variable\">))<\/span><\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token function-name function\">check_disk<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">alerts<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token function\">df<\/span> <span class=\"token parameter variable\">-h<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;NR&gt;1&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token keyword\">while<\/span> <span class=\"token builtin class-name\">read<\/span> line<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n        <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">partition<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> $line <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $1}&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n        <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">usage<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> $line <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $5}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">cut<\/span> -d<span class=\"token string\">&#039;%&#039;<\/span> <span class=\"token parameter variable\">-f1<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n        <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">mount<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> $line <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $6}&#039;<\/span><span class=\"token variable\">)<\/span><\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$usage<\/span>&#034;<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$DISK_WARN<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            alert <span class=\"token string\">&#034;\u78c1\u76d8 <span class=\"token variable\">$mount<\/span> (<span class=\"token variable\">$partition<\/span>) \u4f7f\u7528\u7387 <span class=\"token variable\">${usage}<\/span>%&#xff0c;\u8d85\u8fc7\u9608\u503c <span class=\"token variable\">${DISK_WARN}<\/span>%&#034;<\/span><br \/>\n        <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token keyword\">done<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token function-name function\">check_system<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    log <span class=\"token string\">&#034;&#8212; \u5f00\u59cb\u68c0\u67e5 &#8212;&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5CPU<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">cpu<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span>get_cpu_usage<span class=\"token variable\">)<\/span><\/span><br \/>\n    log <span class=\"token string\">&#034;CPU\u4f7f\u7528\u7387: <span class=\"token variable\">${cpu}<\/span>%&#034;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$cpu<\/span>&#034;<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$CPU_WARN<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        alert <span class=\"token string\">&#034;CPU\u4f7f\u7528\u7387 <span class=\"token variable\">${cpu}<\/span>%&#xff0c;\u8d85\u8fc7\u9608\u503c <span class=\"token variable\">${CPU_WARN}<\/span>%&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5\u5185\u5b58<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">mem<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span>get_mem_usage<span class=\"token variable\">)<\/span><\/span><br \/>\n    log <span class=\"token string\">&#034;\u5185\u5b58\u4f7f\u7528\u7387: <span class=\"token variable\">${mem}<\/span>%&#034;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$mem<\/span>&#034;<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$MEM_WARN<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        alert <span class=\"token string\">&#034;\u5185\u5b58\u4f7f\u7528\u7387 <span class=\"token variable\">${mem}<\/span>%&#xff0c;\u8d85\u8fc7\u9608\u503c <span class=\"token variable\">${MEM_WARN}<\/span>%&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5\u78c1\u76d8<\/span><br \/>\n    check_disk<\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5\u50f5\u5c38\u8fdb\u7a0b<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">zombies<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">ps<\/span> aux <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $8}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-c<\/span> Z<span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$zombies<\/span>&#034;<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        alert <span class=\"token string\">&#034;\u53d1\u73b0 <span class=\"token variable\">$zombies<\/span> \u4e2a\u50f5\u5c38\u8fdb\u7a0b&#xff01;&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5\u8d1f\u8f7d<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">load<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">uptime<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> -F<span class=\"token string\">&#039;load average:&#039;<\/span> <span class=\"token string\">&#039;{print $2}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $1}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">cut<\/span> -d<span class=\"token string\">&#039;,&#039;<\/span> <span class=\"token parameter variable\">-f1<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">cores<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span>nproc<span class=\"token variable\">)<\/span><\/span><br \/>\n    log <span class=\"token string\">&#034;\u7cfb\u7edf\u8d1f\u8f7d: <span class=\"token variable\">${load}<\/span> (\u6838\u5fc3\u6570: <span class=\"token variable\">${cores}<\/span>)&#034;<\/span><\/p>\n<p>    log <span class=\"token string\">&#034;&#8212; \u68c0\u67e5\u7ed3\u675f &#8212;&#034;<\/span><br \/>\n    log <span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u4e3b\u7a0b\u5e8f &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7cfb\u7edf\u76d1\u63a7\u811a\u672c\u542f\u52a8&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u68c0\u67e5\u95f4\u9694: <span class=\"token variable\">${CHECK_INTERVAL}<\/span>\u79d2&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;CPU\u9608\u503c: <span class=\"token variable\">${CPU_WARN}<\/span>%  \u5185\u5b58\u9608\u503c: <span class=\"token variable\">${MEM_WARN}<\/span>%  \u78c1\u76d8\u9608\u503c: <span class=\"token variable\">${DISK_WARN}<\/span>%&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u65e5\u5fd7\u6587\u4ef6: <span class=\"token variable\">${LOG_FILE}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6309Ctrl&#043;C\u505c\u6b62&#8230;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token keyword\">while<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    check_system<br \/>\n    <span class=\"token function\">sleep<\/span> <span class=\"token variable\">$CHECK_INTERVAL<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<h4>7.13.3 \u6848\u4f8b&#xff1a;\u6279\u91cf\u91cd\u547d\u540d\u6587\u4ef6<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u6279\u91cf\u91cd\u547d\u540d\u6587\u4ef6 rename.sh<\/span><\/p>\n<p><span class=\"token function-name function\">show_help<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7528\u6cd5&#xff1a;<span class=\"token variable\">$0<\/span> &lt;\u76ee\u5f55&gt; &lt;\u6a21\u5f0f&gt;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6a21\u5f0f&#xff1a;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  upper     &#8211; \u6587\u4ef6\u540d\u8f6c\u5927\u5199&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  lower     &#8211; \u6587\u4ef6\u540d\u8f6c\u5c0f\u5199&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  prefix:X  &#8211; \u6dfb\u52a0\u524d\u7f00X&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  suffix:X  &#8211; \u6dfb\u52a0\u540e\u7f00X&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  replace:OLD:NEW &#8211; \u66ff\u6362\u6587\u4ef6\u540d\u4e2d\u7684OLD\u4e3aNEW&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  number    &#8211; \u6309\u5e8f\u53f7\u91cd\u547d\u540d&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u793a\u4f8b&#xff1a;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  <span class=\"token variable\">$0<\/span> .\/photos lower&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  <span class=\"token variable\">$0<\/span> .\/docs prefix:2024_&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  <span class=\"token variable\">$0<\/span> .\/files replace:IMG:photo&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$#<\/span> <span class=\"token parameter variable\">-lt<\/span> <span class=\"token number\">2<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    show_help<br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token assign-left variable\">TARGET_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">$1<\/span>&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">MODE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">$2<\/span>&#034;<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token operator\">!<\/span> <span class=\"token parameter variable\">-d<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$TARGET_DIR<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u9519\u8bef&#xff1a;\u76ee\u5f55 <span class=\"token variable\">$TARGET_DIR<\/span> \u4e0d\u5b58\u5728&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token assign-left variable\">count<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><br \/>\n<span class=\"token builtin class-name\">cd<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$TARGET_DIR<\/span>&#034;<\/span> <span class=\"token operator\">||<\/span> <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><\/p>\n<p><span class=\"token keyword\">for<\/span> <span class=\"token for-or-select variable\">file<\/span> <span class=\"token keyword\">in<\/span> *<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token comment\"># \u8df3\u8fc7\u76ee\u5f55<\/span><br \/>\n    <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token builtin class-name\">continue<\/span><\/p>\n<p>    <span class=\"token comment\"># \u83b7\u53d6\u6587\u4ef6\u540d\u548c\u6269\u5c55\u540d<\/span><br \/>\n    <span class=\"token assign-left variable\">filename<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${file<span class=\"token operator\">%<\/span>.*}<\/span>&#034;<\/span><br \/>\n    <span class=\"token assign-left variable\">extension<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${file<span class=\"token operator\">##<\/span>*.}<\/span>&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u5982\u679c\u6ca1\u6709\u6269\u5c55\u540d<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$filename<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token assign-left variable\">extension<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token assign-left variable\">extension<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;.<span class=\"token variable\">$extension<\/span>&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token assign-left variable\">newname<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">case<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$MODE<\/span>&#034;<\/span> <span class=\"token keyword\">in<\/span><br \/>\n        upper<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token assign-left variable\">newname<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$filename<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">tr<\/span> <span class=\"token string\">&#039;a-z&#039;<\/span> <span class=\"token string\">&#039;A-Z&#039;<\/span><span class=\"token variable\">)<\/span><\/span><span class=\"token string\">&#034;<span class=\"token variable\">$extension<\/span>&#034;<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        lower<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token assign-left variable\">newname<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$filename<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">tr<\/span> <span class=\"token string\">&#039;A-Z&#039;<\/span> <span class=\"token string\">&#039;a-z&#039;<\/span><span class=\"token variable\">)<\/span><\/span><span class=\"token string\">&#034;<span class=\"token variable\">$extension<\/span>&#034;<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        prefix:*<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token assign-left variable\">prefix<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${MODE<span class=\"token operator\">#<\/span>prefix<span class=\"token operator\">:<\/span>}<\/span>&#034;<\/span><br \/>\n            <span class=\"token assign-left variable\">newname<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${prefix}<\/span><span class=\"token variable\">${filename}<\/span><span class=\"token variable\">${extension}<\/span>&#034;<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        suffix:*<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token assign-left variable\">suffix<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${MODE<span class=\"token operator\">#<\/span>suffix<span class=\"token operator\">:<\/span>}<\/span>&#034;<\/span><br \/>\n            <span class=\"token assign-left variable\">newname<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${filename}<\/span><span class=\"token variable\">${suffix}<\/span><span class=\"token variable\">${extension}<\/span>&#034;<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        replace:*<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token assign-left variable\">OLD<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${MODE<span class=\"token operator\">#<\/span>replace<span class=\"token operator\">:<\/span>}<\/span>&#034;<\/span><br \/>\n            <span class=\"token assign-left variable\">OLD<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${OLD<span class=\"token operator\">%%<\/span><span class=\"token operator\">:<\/span>*}<\/span>&#034;<\/span><br \/>\n            <span class=\"token assign-left variable\">NEW<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${MODE<span class=\"token operator\">#<\/span>*<span class=\"token operator\">:<\/span>}<\/span>&#034;<\/span><br \/>\n            <span class=\"token assign-left variable\">NEW<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${NEW<span class=\"token operator\">#<\/span>*<span class=\"token operator\">:<\/span>}<\/span>&#034;<\/span><br \/>\n            <span class=\"token assign-left variable\">newname<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$filename<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sed<\/span> <span class=\"token string\">&#034;s\/<span class=\"token variable\">$OLD<\/span>\/<span class=\"token variable\">$NEW<\/span>\/g&#034;<\/span><span class=\"token variable\">)<\/span><\/span><span class=\"token string\">&#034;<span class=\"token variable\">$extension<\/span>&#034;<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        number<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token assign-left variable\">count<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>count <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n            <span class=\"token assign-left variable\">newname<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">printf<\/span> <span class=\"token string\">&#034;%03d%s&#034;<\/span> $count <span class=\"token string\">&#034;<span class=\"token variable\">$extension<\/span>&#034;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        *<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u672a\u77e5\u6a21\u5f0f: <span class=\"token variable\">$MODE<\/span>&#034;<\/span><br \/>\n            show_help<br \/>\n            <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n            <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">esac<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$newname<\/span>&#034;<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-n<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$newname<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token function\">mv<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$file<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$newname<\/span>&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null<br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$?<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u91cd\u547d\u540d: <span class=\"token variable\">$file<\/span> -&gt; <span class=\"token variable\">$newname<\/span>&#034;<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><br \/>\n            <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5931\u8d25: <span class=\"token variable\">$file<\/span> -&gt; <span class=\"token variable\">$newname<\/span> (\u53ef\u80fd\u5df2\u5b58\u5728)&#034;<\/span><br \/>\n        <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token keyword\">done<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5b8c\u6210&#xff01;&#034;<\/span><\/p>\n<h4>7.13.4 \u6848\u4f8b&#xff1a;\u4e00\u952e\u90e8\u7f72Web\u73af\u5883<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u4e00\u952e\u90e8\u7f72LNMP\u73af\u5883 deploy_lnmp.sh<\/span><\/p>\n<p><span class=\"token builtin class-name\">set<\/span> <span class=\"token parameter variable\">-euo<\/span> pipefail<\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u989c\u8272\u5b9a\u4e49 &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token assign-left variable\">RED<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[31m&#039;<\/span><br \/>\n<span class=\"token assign-left variable\">GREEN<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[32m&#039;<\/span><br \/>\n<span class=\"token assign-left variable\">YELLOW<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[33m&#039;<\/span><br \/>\n<span class=\"token assign-left variable\">BLUE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[34m&#039;<\/span><br \/>\n<span class=\"token assign-left variable\">NC<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[0m&#039;<\/span>  <span class=\"token comment\"># \u6062\u590d\u9ed8\u8ba4\u989c\u8272<\/span><\/p>\n<p><span class=\"token function-name function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${GREEN}<\/span>[INFO]<span class=\"token variable\">${NC}<\/span>  <span class=\"token variable\">$*<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token function-name function\">warn<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>  <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${YELLOW}<\/span>[WARN]<span class=\"token variable\">${NC}<\/span>  <span class=\"token variable\">$*<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token function-name function\">error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${RED}<\/span>[ERROR]<span class=\"token variable\">${NC}<\/span> <span class=\"token variable\">$*<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u914d\u7f6e &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token assign-left variable\">WEB_ROOT<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/var\/www\/html&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">MYSQL_ROOT_PASSWORD<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;MySecure&#064;Pass123&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">PHP_VERSION<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;8.1&#034;<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u68c0\u67e5root\u6743\u9650 &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token function-name function\">check_root<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">id<\/span> <span class=\"token parameter variable\">-u<\/span><span class=\"token variable\">)<\/span><\/span>&#034;<\/span> <span class=\"token parameter variable\">-ne<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        error <span class=\"token string\">&#034;\u8bf7\u4f7f\u7528root\u7528\u6237\u8fd0\u884c\u6b64\u811a\u672c&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u68c0\u6d4b\u7cfb\u7edf\u7c7b\u578b &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token function-name function\">detect_os<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-f<\/span> \/etc\/os-release <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">.<\/span> \/etc\/os-release<br \/>\n        <span class=\"token assign-left variable\">OS<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$ID<\/span><br \/>\n        info <span class=\"token string\">&#034;\u68c0\u6d4b\u5230\u7cfb\u7edf: <span class=\"token variable\">$NAME<\/span> <span class=\"token variable\">$VERSION<\/span>&#034;<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        error <span class=\"token string\">&#034;\u65e0\u6cd5\u68c0\u6d4b\u7cfb\u7edf\u7c7b\u578b&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u5b89\u88c5Nginx &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token function-name function\">install_nginx<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    info <span class=\"token string\">&#034;\u5f00\u59cb\u5b89\u88c5 Nginx&#8230;&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;ubuntu&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;debian&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token function\">apt-get<\/span> update <span class=\"token parameter variable\">-y<\/span><br \/>\n        <span class=\"token function\">apt-get<\/span> <span class=\"token function\">install<\/span> <span class=\"token parameter variable\">-y<\/span> nginx<br \/>\n    <span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;centos&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;rhel&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;rocky&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        yum <span class=\"token function\">install<\/span> <span class=\"token parameter variable\">-y<\/span> nginx<br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    systemctl start nginx<br \/>\n    systemctl <span class=\"token builtin class-name\">enable<\/span> nginx<\/p>\n<p>    info <span class=\"token string\">&#034;Nginx \u5b89\u88c5\u5b8c\u6210&#034;<\/span><br \/>\n    nginx <span class=\"token parameter variable\">-v<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u5b89\u88c5MySQL &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token function-name function\">install_mysql<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    info <span class=\"token string\">&#034;\u5f00\u59cb\u5b89\u88c5 MySQL&#8230;&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;ubuntu&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;debian&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token function\">apt-get<\/span> <span class=\"token function\">install<\/span> <span class=\"token parameter variable\">-y<\/span> mysql-server<br \/>\n    <span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;centos&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;rhel&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        yum <span class=\"token function\">install<\/span> <span class=\"token parameter variable\">-y<\/span> mariadb-server<br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    systemctl start mysqld <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> systemctl start mysql <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> systemctl start mariadb<br \/>\n    systemctl <span class=\"token builtin class-name\">enable<\/span> mysqld <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> systemctl <span class=\"token builtin class-name\">enable<\/span> mysql <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> systemctl <span class=\"token builtin class-name\">enable<\/span> mariadb<\/p>\n<p>    info <span class=\"token string\">&#034;\u8bbe\u7f6eMySQL root\u5bc6\u7801&#8230;&#034;<\/span><br \/>\n    mysql <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;ALTER USER &#039;root&#039;&#064;&#039;localhost&#039; IDENTIFIED BY &#039;<span class=\"token variable\">${MYSQL_ROOT_PASSWORD}<\/span>&#039;;&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> <span class=\"token boolean\">true<\/span><\/p>\n<p>    info <span class=\"token string\">&#034;MySQL \u5b89\u88c5\u5b8c\u6210&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u5b89\u88c5PHP &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token function-name function\">install_php<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    info <span class=\"token string\">&#034;\u5f00\u59cb\u5b89\u88c5 PHP&#8230;&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;ubuntu&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;debian&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token function\">apt-get<\/span> <span class=\"token function\">install<\/span> <span class=\"token parameter variable\">-y<\/span> php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml<br \/>\n    <span class=\"token keyword\">elif<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;centos&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$OS<\/span>&#034;<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;rhel&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        yum <span class=\"token function\">install<\/span> <span class=\"token parameter variable\">-y<\/span> php-fpm php-mysqlnd php-cli php-curl php-gd php-mbstring php-xml<br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    systemctl start php-fpm <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> systemctl start php<span class=\"token variable\">${PHP_VERSION}<\/span>-fpm<br \/>\n    systemctl <span class=\"token builtin class-name\">enable<\/span> php-fpm <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> systemctl <span class=\"token builtin class-name\">enable<\/span> php<span class=\"token variable\">${PHP_VERSION}<\/span>-fpm<\/p>\n<p>    info <span class=\"token string\">&#034;PHP \u5b89\u88c5\u5b8c\u6210&#034;<\/span><br \/>\n    php <span class=\"token parameter variable\">-v<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u914d\u7f6eNginx\u652f\u6301PHP &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token function-name function\">config_nginx_php<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    info <span class=\"token string\">&#034;\u914d\u7f6eNginx\u652f\u6301PHP&#8230;&#034;<\/span><\/p>\n<p>    <span class=\"token function\">mkdir<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$WEB_ROOT<\/span>&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u521b\u5efa\u6d4b\u8bd5\u9875\u9762<\/span><br \/>\n    <span class=\"token function\">cat<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$WEB_ROOT<\/span>\/index.php&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">EOF<br \/>\n&lt;?php<br \/>\nphpinfo();<br \/>\n?&gt;<br \/>\nEOF<\/span><\/p>\n<p>    <span class=\"token comment\"># \u914d\u7f6eNginx<\/span><br \/>\n    <span class=\"token function\">cat<\/span> <span class=\"token operator\">&gt;<\/span> \/etc\/nginx\/conf.d\/default.conf <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#039;EOF&#039;<br \/>\nserver {<br \/>\n    listen 80;<br \/>\n    server_name localhost;<br \/>\n    root \/var\/www\/html;<br \/>\n    index index.php index.html;<\/p>\n<p>    location \/ {<br \/>\n        try_files \\\\$uri \\\\$uri\/ &#061;404;<br \/>\n    }<\/p>\n<p>    location ~ \\\\.php$ {<br \/>\n        fastcgi_pass unix:\/run\/php\/php-fpm.sock;<br \/>\n        fastcgi_index index.php;<br \/>\n        fastcgi_param SCRIPT_FILENAME \\\\$document_root\\\\$fastcgi_script_name;<br \/>\n        include fastcgi_params;<br \/>\n    }<br \/>\n}<br \/>\nEOF<\/span><\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5\u914d\u7f6e\u5e76\u91cd\u542f<\/span><br \/>\n    nginx <span class=\"token parameter variable\">-t<\/span> <span class=\"token operator\">&amp;&amp;<\/span> systemctl restart nginx<\/p>\n<p>    info <span class=\"token string\">&#034;Nginx\u914d\u7f6e\u5b8c\u6210&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u914d\u7f6e\u9632\u706b\u5899 &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token function-name function\">config_firewall<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    info <span class=\"token string\">&#034;\u914d\u7f6e\u9632\u706b\u5899&#8230;&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token builtin class-name\">command<\/span> <span class=\"token parameter variable\">-v<\/span> ufw <span class=\"token operator\">&amp;&gt;<\/span>\/dev\/null<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        ufw allow <span class=\"token number\">80<\/span>\/tcp<br \/>\n        ufw allow <span class=\"token number\">443<\/span>\/tcp<br \/>\n        ufw allow <span class=\"token number\">3306<\/span>\/tcp<br \/>\n        info <span class=\"token string\">&#034;ufw\u9632\u706b\u5899\u5df2\u914d\u7f6e&#034;<\/span><br \/>\n    <span class=\"token keyword\">elif<\/span> <span class=\"token builtin class-name\">command<\/span> <span class=\"token parameter variable\">-v<\/span> firewall-cmd <span class=\"token operator\">&amp;&gt;<\/span>\/dev\/null<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        firewall-cmd <span class=\"token parameter variable\">&#8211;permanent<\/span> &#8211;add-service<span class=\"token operator\">&#061;<\/span>http<br \/>\n        firewall-cmd <span class=\"token parameter variable\">&#8211;permanent<\/span> &#8211;add-service<span class=\"token operator\">&#061;<\/span>https<br \/>\n        firewall-cmd <span class=\"token parameter variable\">&#8211;permanent<\/span> &#8211;add-port<span class=\"token operator\">&#061;<\/span><span class=\"token number\">3306<\/span>\/tcp<br \/>\n        firewall-cmd <span class=\"token parameter variable\">&#8211;reload<\/span><br \/>\n        info <span class=\"token string\">&#034;firewalld\u5df2\u914d\u7f6e&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u663e\u793a\u5b89\u88c5\u7ed3\u679c &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token function-name function\">show_result<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${GREEN}<\/span>&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<span class=\"token variable\">${NC}<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${GREEN}<\/span>       LNMP\u73af\u5883\u90e8\u7f72\u5b8c\u6210&#xff01;<span class=\"token variable\">${NC}<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${GREEN}<\/span>&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<span class=\"token variable\">${NC}<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  Nginx:  \u5df2\u542f\u52a8&#xff0c;\u7aef\u53e380&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  MySQL:  \u5df2\u542f\u52a8&#xff0c;\u7aef\u53e33306&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;    root\u5bc6\u7801: <span class=\"token variable\">$MYSQL_ROOT_PASSWORD<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  PHP:    \u5df2\u542f\u52a8&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u7f51\u7ad9\u6839\u76ee\u5f55: <span class=\"token variable\">$WEB_ROOT<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u6d4b\u8bd5\u9875\u9762: http:\/\/localhost\/index.php&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${YELLOW}<\/span>  \u8bf7\u53ca\u65f6\u4fee\u6539MySQL\u5bc6\u7801\u5e76\u5220\u9664\u6d4b\u8bd5\u9875\u9762&#xff01;<span class=\"token variable\">${NC}<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061; \u4e3b\u7a0b\u5e8f &#061;&#061;&#061;&#061;&#061;<\/span><br \/>\ninfo <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061; LNMP\u4e00\u952e\u90e8\u7f72\u811a\u672c &#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>check_root<br \/>\ndetect_os<\/p>\n<p>install_nginx<br \/>\ninstall_mysql<br \/>\ninstall_php<br \/>\nconfig_nginx_php<br \/>\nconfig_firewall<\/p>\n<p>show_result<\/p>\n<p>info <span class=\"token string\">&#034;\u90e8\u7f72\u5b8c\u6210&#xff01;&#034;<\/span><\/p>\n<h4>7.13.5 \u6848\u4f8b&#xff1a;\u65e5\u5fd7\u5206\u6790\u811a\u672c<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># Nginx\u65e5\u5fd7\u5206\u6790\u811a\u672c log_analyze.sh<\/span><\/p>\n<p><span class=\"token assign-left variable\">LOG_FILE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${1<span class=\"token operator\">:-<\/span><span class=\"token operator\">\/<\/span>var<span class=\"token operator\">\/<\/span>log<span class=\"token operator\">\/<\/span>nginx<span class=\"token operator\">\/<\/span>access.log}<\/span>&#034;<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token operator\">!<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u9519\u8bef&#xff1a;\u65e5\u5fd7\u6587\u4ef6 <span class=\"token variable\">$LOG_FILE<\/span> \u4e0d\u5b58\u5728&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;           Nginx\u8bbf\u95ee\u65e5\u5fd7\u5206\u6790\u62a5\u544a&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;           \u65e5\u5fd7\u6587\u4ef6: <span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;           \u5206\u6790\u65f6\u95f4: <span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%Y-%m-%d %H:%M:%S&#039;<\/span><span class=\"token variable\">)<\/span><\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u603b\u8bf7\u6c42\u6570<\/span><br \/>\n<span class=\"token assign-left variable\">total<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">wc<\/span> <span class=\"token parameter variable\">-l<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u603b\u8bf7\u6c42\u6570\u3011&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  <span class=\"token variable\">$total<\/span> \u6761&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u4eca\u65e5\u8bf7\u6c42\u6570<\/span><br \/>\n<span class=\"token assign-left variable\">today<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">date<\/span> <span class=\"token string\">&#039;&#043;%d\/%b\/%Y&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token assign-left variable\">today_count<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">grep<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$today<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">wc<\/span> <span class=\"token parameter variable\">-l<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u4eca\u65e5\u8bf7\u6c42\u6570\u3011&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  <span class=\"token variable\">$today_count<\/span> \u6761&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u72ec\u7acbIP\u6570&#xff08;Top 10&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u8bbf\u95ee\u91cfTop 10 IP\u3011&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u6392\u540d    IP\u5730\u5740          \u8bbf\u95ee\u6b21\u6570&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  &#8212;-    &#8212;&#8212;&#8212;&#8212;&#8211;  &#8212;&#8212;&#8211;&#034;<\/span><br \/>\n<span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $1}&#039;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token parameter variable\">-rn<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">head<\/span> <span class=\"token parameter variable\">-10<\/span> <span class=\"token operator\">|<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n<span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{printf(&#034;  %-6s  %-15s  %d\\\\n&#034;, NR&#034;.&#034;, $2, $1)}&#039;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u88ab\u8bbf\u95ee\u6700\u591a\u7684\u9875\u9762&#xff08;Top 10&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u88ab\u8bbf\u95ee\u6700\u591a\u7684\u9875\u9762 Top 10\u3011&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u6392\u540d    \u8bbf\u95ee\u6b21\u6570  \u9875\u9762&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  &#8212;-    &#8212;&#8212;&#8211;  &#8212;-&#034;<\/span><br \/>\n<span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $7}&#039;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token parameter variable\">-rn<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">head<\/span> <span class=\"token parameter variable\">-10<\/span> <span class=\"token operator\">|<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n<span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{printf(&#034;  %-6s  %-8d  %s\\\\n&#034;, NR&#034;.&#034;, $1, $2)}&#039;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># HTTP\u72b6\u6001\u7801\u7edf\u8ba1<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010HTTP\u72b6\u6001\u7801\u7edf\u8ba1\u3011&#034;<\/span><br \/>\n<span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $9}&#039;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token parameter variable\">-rn<\/span> <span class=\"token operator\">|<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n<span class=\"token keyword\">while<\/span> <span class=\"token builtin class-name\">read<\/span> count code<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token keyword\">case<\/span> <span class=\"token variable\">$code<\/span> <span class=\"token keyword\">in<\/span><br \/>\n        <span class=\"token number\">200<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">desc<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;OK \u6210\u529f&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">301<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">desc<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6c38\u4e45\u91cd\u5b9a\u5411&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">302<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">desc<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4e34\u65f6\u91cd\u5b9a\u5411&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">304<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">desc<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u672a\u4fee\u6539&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">403<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">desc<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7981\u6b62\u8bbf\u95ee&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">404<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">desc<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u672a\u627e\u5230&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">500<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">desc<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u670d\u52a1\u5668\u5185\u90e8\u9519\u8bef&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">502<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">desc<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7f51\u5173\u9519\u8bef&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token number\">503<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token assign-left variable\">desc<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u670d\u52a1\u4e0d\u53ef\u7528&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        *<span class=\"token punctuation\">)<\/span>   <span class=\"token assign-left variable\">desc<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5176\u4ed6&#034;<\/span> <span class=\"token punctuation\">;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">esac<\/span><br \/>\n    printf<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;  %s  %d \u6b21  (%s)<span class=\"token entity\" title=\"\\\\n\">\\\\n<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$code<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$count<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$desc<\/span>&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">done<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># 404\u9519\u8bef\u7edf\u8ba1<\/span><br \/>\n<span class=\"token assign-left variable\">not_found<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">grep<\/span> <span class=\"token string\">&#039; 404 &#039;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">wc<\/span> <span class=\"token parameter variable\">-l<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010404\u9519\u8bef\u3011&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u603b\u8ba1: <span class=\"token variable\">$not_found<\/span> \u6b21&#034;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$not_found<\/span> <span class=\"token parameter variable\">-gt<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u7f3a\u5931\u9875\u9762Top 5&#xff1a;&#034;<\/span><br \/>\n    <span class=\"token function\">grep<\/span> <span class=\"token string\">&#039; 404 &#039;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $7}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token parameter variable\">-rn<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">head<\/span> <span class=\"token parameter variable\">-5<\/span> <span class=\"token operator\">|<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n    <span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{printf(&#034;    %d\u6b21  %s\\\\n&#034;, $1, $2)}&#039;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u8bbf\u95ee\u65f6\u95f4\u5206\u5e03&#xff08;\u6309\u5c0f\u65f6&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u8bbf\u95ee\u65f6\u95f4\u5206\u5e03&#xff08;\u6309\u5c0f\u65f6&#xff09;\u3011&#034;<\/span><br \/>\n<span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{print $4}&#039;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">cut<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token number\">14<\/span>-15 <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token operator\">|<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n<span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{<br \/>\n    bar&#061;&#034;&#034;<br \/>\n    for(i&#061;0; i&lt;int($1\/total*50); i&#043;&#043;) bar&#061;bar&#034;\u2588&#034;<br \/>\n    printf(&#034;  %s\u65f6  %5d  %s\\\\n&#034;, $2, $1, bar)<br \/>\n}&#039;<\/span> <span class=\"token assign-left variable\">total<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">wc<\/span> <span class=\"token parameter variable\">-l<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span><span class=\"token variable\">)<\/span><\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token parameter variable\">-t<\/span><span class=\"token string\">&#039;\u65f6&#039;<\/span> <span class=\"token parameter variable\">-k1<\/span> <span class=\"token parameter variable\">-n<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u6765\u6e90\u7edf\u8ba1<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u6765\u6e90\u7edf\u8ba1 Top 5\u3011&#034;<\/span><br \/>\n<span class=\"token function\">awk<\/span> -F<span class=\"token string\">&#039;&#034;&#039;<\/span> <span class=\"token string\">&#039;{print $6}&#039;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">uniq<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">sort<\/span> <span class=\"token parameter variable\">-rn<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">head<\/span> <span class=\"token parameter variable\">-5<\/span> <span class=\"token operator\">|<\/span> <span class=\"token punctuation\">\\\\<\/span><br \/>\n<span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{printf(&#034;  %d\u6b21  %s\\\\n&#034;, $1, substr($0, index($0,$2)))}&#039;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u6d41\u91cf\u7edf\u8ba1<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u3010\u6d41\u91cf\u7edf\u8ba1\u3011&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">total_size<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">awk<\/span> <span class=\"token string\">&#039;{sum&#043;&#061;$10} END {printf(&#034;%.2f&#034;, sum\/1024\/1024)}&#039;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_FILE<\/span>&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null<span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u603b\u4f20\u8f93\u6d41\u91cf: <span class=\"token variable\">${total_size}<\/span> MB&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;           \u5206\u6790\u62a5\u544a\u7ed3\u675f&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<h4>7.13.6 \u6848\u4f8b&#xff1a;\u6279\u91cf\u521b\u5efa\u7528\u6237<\/h4>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># \u6279\u91cf\u521b\u5efa\u7528\u6237\u811a\u672c batch_user.sh<\/span><\/p>\n<p><span class=\"token comment\"># \u7528\u6237\u5217\u8868\u6587\u4ef6\u683c\u5f0f&#xff1a;\u7528\u6237\u540d:\u5bc6\u7801:\u5907\u6ce8<\/span><br \/>\n<span class=\"token comment\"># \u793a\u4f8b&#xff1a;<\/span><br \/>\n<span class=\"token comment\"># zhangsan:Pass&#064;123:\u7814\u53d1\u90e8<\/span><br \/>\n<span class=\"token comment\"># lisi:Pass&#064;456:\u6d4b\u8bd5\u90e8<\/span><\/p>\n<p><span class=\"token assign-left variable\">USER_LIST<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">${1<span class=\"token operator\">:-<\/span>users.txt}<\/span>&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">DEFAULT_PASSWORD<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Default&#064;123&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">DEFAULT_SHELL<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/bin\/bash&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u68c0\u67e5\u662f\u5426root<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">id<\/span> <span class=\"token parameter variable\">-u<\/span><span class=\"token variable\">)<\/span><\/span>&#034;<\/span> <span class=\"token parameter variable\">-ne<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u9519\u8bef&#xff1a;\u8bf7\u4f7f\u7528root\u7528\u6237\u8fd0\u884c&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u68c0\u67e5\u7528\u6237\u5217\u8868\u6587\u4ef6<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token operator\">!<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$USER_LIST<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u7528\u6237\u5217\u8868\u6587\u4ef6 <span class=\"token variable\">$USER_LIST<\/span> \u4e0d\u5b58\u5728&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u6b63\u5728\u521b\u5efa\u793a\u4f8b\u6587\u4ef6&#8230;&#034;<\/span><br \/>\n    <span class=\"token function\">cat<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$USER_LIST<\/span>&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">EOF<br \/>\nzhangsan:Zhang&#064;123:\u7814\u53d1\u90e8<br \/>\nlisi:Li&#064;456:\u6d4b\u8bd5\u90e8<br \/>\nwangwu:Wang&#064;789:\u8fd0\u7ef4\u90e8<br \/>\nEOF<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u5df2\u521b\u5efa <span class=\"token variable\">$USER_LIST<\/span>&#xff0c;\u8bf7\u4fee\u6539\u540e\u91cd\u65b0\u8fd0\u884c&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">0<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># \u7edf\u8ba1<\/span><br \/>\n<span class=\"token assign-left variable\">success<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><br \/>\n<span class=\"token assign-left variable\">fail<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><br \/>\n<span class=\"token assign-left variable\">exist<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u6279\u91cf\u521b\u5efa\u7528\u6237\u811a\u672c&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u7528\u6237\u5217\u8868: <span class=\"token variable\">$USER_LIST<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u8bfb\u53d6\u7528\u6237\u5217\u8868<\/span><br \/>\n<span class=\"token keyword\">while<\/span> <span class=\"token assign-left variable\"><span class=\"token environment constant\">IFS<\/span><\/span><span class=\"token operator\">&#061;<\/span>: <span class=\"token builtin class-name\">read<\/span> <span class=\"token parameter variable\">-r<\/span> username password comment<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">do<\/span><br \/>\n    <span class=\"token comment\"># \u8df3\u8fc7\u7a7a\u884c\u548c\u6ce8\u91ca<\/span><br \/>\n    <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-z<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$username<\/span>&#034;<\/span> <span class=\"token operator\">||<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$username<\/span>&#034;<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token punctuation\">\\\\<\/span>#* <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token builtin class-name\">continue<\/span><\/p>\n<p>    <span class=\"token comment\"># \u8bbe\u7f6e\u9ed8\u8ba4\u5bc6\u7801<\/span><br \/>\n    <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-z<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$password<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token assign-left variable\">password<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">$DEFAULT_PASSWORD<\/span>&#034;<\/span><br \/>\n    <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-z<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$comment<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token assign-left variable\">comment<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6279\u91cf\u521b\u5efa\u7528\u6237&#034;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u68c0\u67e5\u7528\u6237\u662f\u5426\u5df2\u5b58\u5728<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token function\">id<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$username<\/span>&#034;<\/span> <span class=\"token operator\">&amp;&gt;<\/span>\/dev\/null<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;[\u8df3\u8fc7] \u7528\u6237 <span class=\"token variable\">$username<\/span> \u5df2\u5b58\u5728 (<span class=\"token variable\">$comment<\/span>)&#034;<\/span><br \/>\n        <span class=\"token assign-left variable\">exist<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>exist <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n        <span class=\"token builtin class-name\">continue<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><\/p>\n<p>    <span class=\"token comment\"># \u521b\u5efa\u7528\u6237<\/span><br \/>\n    <span class=\"token function\">useradd<\/span> <span class=\"token parameter variable\">-m<\/span> <span class=\"token parameter variable\">-s<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$DEFAULT_SHELL<\/span>&#034;<\/span> <span class=\"token parameter variable\">-c<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$comment<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$username<\/span>&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token variable\">$?<\/span> <span class=\"token parameter variable\">-eq<\/span> <span class=\"token number\">0<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token comment\"># \u8bbe\u7f6e\u5bc6\u7801<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$username<\/span>:<span class=\"token variable\">$password<\/span>&#034;<\/span> <span class=\"token operator\">|<\/span> chpasswd<\/p>\n<p>        <span class=\"token comment\"># \u5f3a\u5236\u9996\u6b21\u767b\u5f55\u4fee\u6539\u5bc6\u7801<\/span><br \/>\n        chage <span class=\"token parameter variable\">-d<\/span> <span class=\"token number\">0<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$username<\/span>&#034;<\/span><\/p>\n<p>        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;[\u6210\u529f] \u521b\u5efa\u7528\u6237 <span class=\"token variable\">$username<\/span> (<span class=\"token variable\">$comment<\/span>) \u5bc6\u7801: <span class=\"token variable\">$password<\/span>&#034;<\/span><br \/>\n        <span class=\"token assign-left variable\">success<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>success <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;[\u5931\u8d25] \u521b\u5efa\u7528\u6237 <span class=\"token variable\">$username<\/span> \u5931\u8d25&#034;<\/span><br \/>\n        <span class=\"token assign-left variable\">fail<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$((<\/span>fail <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token variable\">))<\/span><\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token keyword\">done<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$USER_LIST<\/span>&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u6267\u884c\u7ed3\u679c\u7edf\u8ba1&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u6210\u529f\u521b\u5efa: <span class=\"token variable\">$success<\/span> \u4e2a&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u5df2\u5b58\u5728:  <span class=\"token variable\">$exist<\/span> \u4e2a&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;  \u5931\u8d25:    <span class=\"token variable\">$fail<\/span> \u4e2a&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<h4>7.13.7 \u5b66\u4e60\u5efa\u8bae<\/h4>\n<p>\u606d\u559c\u4f60\u770b\u5b8c\u4e86\u8fd9\u4e00\u6574\u7ae0&#xff01;Shell\u811a\u672c\u7f16\u7a0b\u5185\u5bb9\u5f88\u591a&#xff0c;\u4e0d\u8981\u671f\u671b\u4e00\u6b21\u5c31\u5168\u90e8\u8bb0\u4f4f\u3002\u7ed9\u4f60\u51e0\u4e2a\u5b66\u4e60\u5efa\u8bae&#xff1a;<\/p>\n<li>\u4e0d\u8981\u6b7b\u8bb0\u786c\u80cc&#xff1a;\u8bed\u6cd5\u8bb0\u4e0d\u4f4f\u5f88\u6b63\u5e38&#xff0c;\u9700\u8981\u7528\u7684\u65f6\u5019\u67e5\u6587\u6863\u5c31\u884c<\/li>\n<li>\u591a\u52a8\u624b\u5b9e\u8df5&#xff1a;\u628a\u672c\u7ae0\u7684\u6bcf\u4e2a\u793a\u4f8b\u90fd\u81ea\u5df1\u8fd0\u884c\u4e00\u904d&#xff0c;\u6539\u6539\u53c2\u6570\u770b\u770b\u6548\u679c<\/li>\n<li>\u4ece\u7b80\u5355\u5f00\u59cb&#xff1a;\u5148\u5199\u7b80\u5355\u7684\u811a\u672c&#xff08;\u51e0\u884c\u4ee3\u7801&#xff09;&#xff0c;\u518d\u6162\u6162\u5199\u590d\u6742\u7684<\/li>\n<li>\u8bfb\u522b\u4eba\u7684\u811a\u672c&#xff1a;\u7f51\u4e0a\u6709\u5f88\u591a\u4f18\u79c0\u7684Shell\u811a\u672c&#xff0c;\u591a\u8bfb\u591a\u5b66<\/li>\n<li>\u5584\u7528 man \u548c &#8211;help&#xff1a;\u6bcf\u4e2a\u547d\u4ee4\u90fd\u6709\u8be6\u7ec6\u6587\u6863&#xff0c;\u517b\u6210\u67e5\u6587\u6863\u7684\u4e60\u60ef<\/li>\n<li>\u9047\u5230\u62a5\u9519\u522b\u614c&#xff1a;\u770b\u9519\u8bef\u4fe1\u606f&#xff0c;\u7528 bash -x \u8c03\u8bd5&#xff0c;\u4e00\u6b65\u6b65\u6392\u67e5<\/li>\n<p>Shell\u811a\u672c\u662fLinux\u8fd0\u7ef4\u7684\u5fc5\u5907\u6280\u80fd&#xff0c;\u638c\u63e1\u5b83&#xff0c;\u4f60\u7684\u5de5\u4f5c\u6548\u7387\u4f1a\u5927\u5e45\u63d0\u5347\u3002\u4ece\u4eca\u5929\u5f00\u59cb&#xff0c;\u8bd5\u7740\u628a\u65e5\u5e38\u91cd\u590d\u7684\u64cd\u4f5c\u5199\u6210\u811a\u672c\u5427&#xff01;<\/p>\n<hr \/>\n<p>\u672c\u7ae0\u603b\u7ed3<\/p>\n<table>\n<tr>\u77e5\u8bc6\u70b9\u6838\u5fc3\u5185\u5bb9<\/tr>\n<tbody>\n<tr>\n<td>Shell\u6982\u5ff5<\/td>\n<td>\u547d\u4ee4\u89e3\u91ca\u5668&#xff0c;\u7528\u6237\u4e0e\u5185\u6838\u7684\u6865\u6881<\/td>\n<\/tr>\n<tr>\n<td>\u811a\u672c\u57fa\u7840<\/td>\n<td>Shebang\u3001\u6ce8\u91ca\u3001\u6267\u884c\u65b9\u5f0f<\/td>\n<\/tr>\n<tr>\n<td>\u53d8\u91cf<\/td>\n<td>\u5b9a\u4e49\u4e0d\u7528<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\">&#xff0c;\u4f7f\u7528\u8981\u52a0&#xff0c;\u4f7f\u7528\u8981\u52a0<\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord cjk_fallback\">&#xff0c;\u4f7f\u7528\u8981\u52a0<\/span><\/span><\/span><\/span><\/span>&#xff0c;\u7b49\u53f7\u4e0d\u7a7a\u683c<\/td>\n<\/tr>\n<tr>\n<td>\u73af\u5883\u53d8\u91cf<\/td>\n<td>export\u5bfc\u51fa&#xff0c;\u5b50\u8fdb\u7a0b\u53ef\u89c1<\/td>\n<\/tr>\n<tr>\n<td>\u4f4d\u7f6e\u53c2\u6570<\/td>\n<td>$1 $2 $&#064; $# \u7b49<\/td>\n<\/tr>\n<tr>\n<td>\u5b57\u7b26\u4e32\u64cd\u4f5c<\/td>\n<td>\u957f\u5ea6\u3001\u622a\u53d6\u3001\u66ff\u6362<\/td>\n<\/tr>\n<tr>\n<td>\u6570\u7ec4<\/td>\n<td>\u666e\u901a\u6570\u7ec4\u548c\u5173\u8054\u6570\u7ec4<\/td>\n<\/tr>\n<tr>\n<td>\u7b97\u672f\u8fd0\u7b97<\/td>\n<td>$(( )) \u6700\u65b9\u4fbf&#xff0c;bc\u652f\u6301\u5c0f\u6570<\/td>\n<\/tr>\n<tr>\n<td>\u6761\u4ef6\u5224\u65ad<\/td>\n<td>if-elif-else\u3001test\u3001[ ]\u3001[[ ]]<\/td>\n<\/tr>\n<tr>\n<td>\u5faa\u73af<\/td>\n<td>for\u3001while\u3001until\u3001break\u3001continue<\/td>\n<\/tr>\n<tr>\n<td>case<\/td>\n<td>\u591a\u5206\u652f\u9009\u62e9&#xff0c;\u652f\u6301\u6a21\u5f0f\u5339\u914d<\/td>\n<\/tr>\n<tr>\n<td>\u51fd\u6570<\/td>\n<td>\u5c01\u88c5\u4ee3\u7801&#xff0c;\u53c2\u6570\u7528$1 $2&#xff0c;\u8fd4\u56de\u7528echo<\/td>\n<\/tr>\n<tr>\n<td>\u8f93\u5165\u8f93\u51fa<\/td>\n<td>echo\u3001printf\u3001read\u3001\u91cd\u5b9a\u5411\u3001\u7ba1\u9053<\/td>\n<\/tr>\n<tr>\n<td>\u8c03\u8bd5<\/td>\n<td>bash -x\u3001set -euo pipefail\u3001trap<\/td>\n<\/tr>\n<tr>\n<td>\u5b9e\u6218\u6848\u4f8b<\/td>\n<td>\u5907\u4efd\u3001\u76d1\u63a7\u3001\u91cd\u547d\u540d\u3001\u90e8\u7f72\u3001\u65e5\u5fd7\u5206\u6790<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4e0b\u4e00\u7ae0\u6211\u4eec\u5c06\u5b66\u4e60\u66f4\u591aLinux\u8fdb\u9636\u77e5\u8bc6&#xff0c;\u7ee7\u7eed\u52a0\u6cb9&#xff01;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7b2c07\u7ae0 Shell\u811a\u672c\u7f16\u7a0b\u672c\u7ae0\u662fLinux\u5b66\u4e60\u7684\u91cd\u8981\u8f6c\u6298\u70b9\u3002\u524d\u9762\u51e0\u7ae0\u4f60\u5b66\u7684\u90fd\u662f\\&#8221;\u624b\u52a8\u64cd\u4f5c\\&#8221;\u2014\u2014\u4e00\u884c\u4e00\u884c\u6572\u547d\u4ee4&#xff0c;\u5c31\u50cf\u7528\u7b77\u5b50\u4e00\u53e3\u4e00\u53e3\u5403\u996d\u3002\u800c\u8fd9\u4e00\u7ae0&#xff0c;\u4f60\u8981\u5b66\u7684\u662f\\&#8221;\u81ea\u52a8\u5316\\&#8221;\u2014\u2014\u5199\u4e00\u4e2a\u811a\u672c&#xff0c;\u8ba9\u7535\u8111\u81ea\u5df1\u5e72\u6d3b&#xff0c;\u5c31\u50cf\u7ed9\u53a8\u5e08\u4e00\u4efd\u83dc\u8c31&#xff0c;\u4ed6\u7167\u7740\u505a\u5c31\u884c\u3002<br \/>\n\u5b66\u5b8c\u672c\u7ae0&#xff0c;\u4f60\u5c31\u80fd\u8ba9Linux\u66ff\u4f60\u5b8c\u6210\u91cd\u590d\u6027\u7684\u5de5\u4f5c&#xff0c;\u4ece\u6b64\u544a\u522b\u673a\u68b0\u52b3\u52a8&#xff0c;\u771f\u6b63\u4f53\u9a8c\u5230\\&#8221;\u61d2\u4eba\u6539\u53d8\u4e16\u754c\\&#8221;\u7684\u4e50\u8da3\u30027.1 \u4ec0\u4e48\u662f Shell<br \/>\n7.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[58,371,305,44],"topic":[],"class_list":["post-87227","post","type-post","status-publish","format-standard","hentry","category-server","tag-linux","tag-371","tag-305","tag-44"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u7b2c\u4e03\u7ae0 Shell\u811a\u672c\u7f16\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/87227.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u7b2c\u4e03\u7ae0 Shell\u811a\u672c\u7f16\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u7b2c07\u7ae0 Shell\u811a\u672c\u7f16\u7a0b\u672c\u7ae0\u662fLinux\u5b66\u4e60\u7684\u91cd\u8981\u8f6c\u6298\u70b9\u3002\u524d\u9762\u51e0\u7ae0\u4f60\u5b66\u7684\u90fd\u662f&quot;\u624b\u52a8\u64cd\u4f5c&quot;\u2014\u2014\u4e00\u884c\u4e00\u884c\u6572\u547d\u4ee4&#xff0c;\u5c31\u50cf\u7528\u7b77\u5b50\u4e00\u53e3\u4e00\u53e3\u5403\u996d\u3002\u800c\u8fd9\u4e00\u7ae0&#xff0c;\u4f60\u8981\u5b66\u7684\u662f&quot;\u81ea\u52a8\u5316&quot;\u2014\u2014\u5199\u4e00\u4e2a\u811a\u672c&#xff0c;\u8ba9\u7535\u8111\u81ea\u5df1\u5e72\u6d3b&#xff0c;\u5c31\u50cf\u7ed9\u53a8\u5e08\u4e00\u4efd\u83dc\u8c31&#xff0c;\u4ed6\u7167\u7740\u505a\u5c31\u884c\u3002 \u5b66\u5b8c\u672c\u7ae0&#xff0c;\u4f60\u5c31\u80fd\u8ba9Linux\u66ff\u4f60\u5b8c\u6210\u91cd\u590d\u6027\u7684\u5de5\u4f5c&#xff0c;\u4ece\u6b64\u544a\u522b\u673a\u68b0\u52b3\u52a8&#xff0c;\u771f\u6b63\u4f53\u9a8c\u5230&quot;\u61d2\u4eba\u6539\u53d8\u4e16\u754c&quot;\u7684\u4e50\u8da3\u30027.1 \u4ec0\u4e48\u662f Shell 7.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/87227.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-29T19:32:27+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"37 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/87227.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/87227.html\",\"name\":\"\u7b2c\u4e03\u7ae0 Shell\u811a\u672c\u7f16\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-07-29T19:32:27+00:00\",\"dateModified\":\"2026-07-29T19:32:27+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/87227.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/87227.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/87227.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u7b2c\u4e03\u7ae0 Shell\u811a\u672c\u7f16\u7a0b\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u7b2c\u4e03\u7ae0 Shell\u811a\u672c\u7f16\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/87227.html","og_locale":"zh_CN","og_type":"article","og_title":"\u7b2c\u4e03\u7ae0 Shell\u811a\u672c\u7f16\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u7b2c07\u7ae0 Shell\u811a\u672c\u7f16\u7a0b\u672c\u7ae0\u662fLinux\u5b66\u4e60\u7684\u91cd\u8981\u8f6c\u6298\u70b9\u3002\u524d\u9762\u51e0\u7ae0\u4f60\u5b66\u7684\u90fd\u662f\"\u624b\u52a8\u64cd\u4f5c\"\u2014\u2014\u4e00\u884c\u4e00\u884c\u6572\u547d\u4ee4&#xff0c;\u5c31\u50cf\u7528\u7b77\u5b50\u4e00\u53e3\u4e00\u53e3\u5403\u996d\u3002\u800c\u8fd9\u4e00\u7ae0&#xff0c;\u4f60\u8981\u5b66\u7684\u662f\"\u81ea\u52a8\u5316\"\u2014\u2014\u5199\u4e00\u4e2a\u811a\u672c&#xff0c;\u8ba9\u7535\u8111\u81ea\u5df1\u5e72\u6d3b&#xff0c;\u5c31\u50cf\u7ed9\u53a8\u5e08\u4e00\u4efd\u83dc\u8c31&#xff0c;\u4ed6\u7167\u7740\u505a\u5c31\u884c\u3002 \u5b66\u5b8c\u672c\u7ae0&#xff0c;\u4f60\u5c31\u80fd\u8ba9Linux\u66ff\u4f60\u5b8c\u6210\u91cd\u590d\u6027\u7684\u5de5\u4f5c&#xff0c;\u4ece\u6b64\u544a\u522b\u673a\u68b0\u52b3\u52a8&#xff0c;\u771f\u6b63\u4f53\u9a8c\u5230\"\u61d2\u4eba\u6539\u53d8\u4e16\u754c\"\u7684\u4e50\u8da3\u30027.1 \u4ec0\u4e48\u662f Shell 7.","og_url":"https:\/\/www.wsisp.com\/helps\/87227.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-07-29T19:32:27+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"37 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/87227.html","url":"https:\/\/www.wsisp.com\/helps\/87227.html","name":"\u7b2c\u4e03\u7ae0 Shell\u811a\u672c\u7f16\u7a0b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-07-29T19:32:27+00:00","dateModified":"2026-07-29T19:32:27+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/87227.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/87227.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/87227.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u7b2c\u4e03\u7ae0 Shell\u811a\u672c\u7f16\u7a0b"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/87227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=87227"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/87227\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=87227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=87227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=87227"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=87227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}