Shell腳本的參考書從基礎到進階可以找幾百本出來,豆子這裡過為了整個學習筆記的完整性,還是厚顔把最最基本的文法回顧一遍。最基本包括變量,比較,運算符,條件語句,循環語句。
變量分為本地變量,環境變量,位置變量
首先看看本地變量, 變量名=值的方式指派,不過隻在目前的shell裡面有效
比如,子shell裡面就無法識别了
<a href="http://s3.51cto.com/wyfs02/M01/59/6F/wKiom1TS2-LBiMuOAACnDDyQ0_s513.jpg" target="_blank"></a>
可以通過export的方式配置環境變量,這樣子shell裡面也可以識别
<a href="http://s3.51cto.com/wyfs02/M02/59/6C/wKioL1TS3M7wPUJjAACUzkDW6OQ153.jpg" target="_blank"></a>
不過上面的配置隻是臨時生效,重新開機就沒了
<a href="http://s3.51cto.com/wyfs02/M02/59/6F/wKiom1TS2-Oh5QqdAABUdG3YZLk742.jpg" target="_blank"></a>
可以通過修改配置檔案的方式永久生效。登入家目錄的時候,會自動加載家目錄下的這些隐藏檔案。
<a href="http://s3.51cto.com/wyfs02/M00/59/6C/wKioL1TS3M_joWvrAADJBcYZH-o396.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/59/6F/wKiom1TS2-Tg1y2nAAA9mcNdcYo969.jpg" target="_blank"></a>
上面隻是對目前使用者生效,如果對所有使用者都生效,可以修改/etc/bashrc 檔案。
這些檔案的加載的順序如下所示。
<a href="http://s3.51cto.com/wyfs02/M01/59/6C/wKioL1TS3NDjvGV1AAMsw3OzJJk592.jpg" target="_blank"></a>
Shell裡面已經有預先配置的環境變量了,比如
<a href="http://s3.51cto.com/wyfs02/M01/59/6F/wKiom1TS2-WhKT-qAACB2nTbV6Y611.jpg" target="_blank"></a>
可以根據需要修改,比如我需要提示符前面顯示整個路徑,可以修改$PS1 變量
<a href="http://s3.51cto.com/wyfs02/M02/59/6C/wKioL1TS3NHwrtjvAABpXtUt7RM407.jpg" target="_blank"></a>
此外,還有針對位置的變量,比如$1,$2分别代表第一個位置和第二個位置的變量。如果是10要括弧起來
我還可以用 $# 統計所有的變量數目,$* 輸出所有變量
<a href="http://s3.51cto.com/wyfs02/M02/59/6F/wKiom1TS2-WS0xnXAAB2YGYAynw423.jpg" target="_blank"></a>
例如:輸出第一個位置值(程式本身名字) 第二個位置的值(其實是第一個參數)
<a href="http://s3.51cto.com/wyfs02/M00/59/6C/wKioL1TS3NLzV4TPAAC8_0cBWM4738.jpg" target="_blank"></a>
輸出的時候注意差別,單引号,雙引号和反引号
<a href="http://s3.51cto.com/wyfs02/M00/59/6F/wKiom1TS2-fzRTYuAAEUTeXDcqw513.jpg" target="_blank"></a>
還有一些預定義的變量有特殊意義, $?表示上一次的指令的傳回值,0表示成功,其他數字表示失敗
<a href="http://s3.51cto.com/wyfs02/M01/59/6C/wKioL1TS3NSARB__AAB2q0twcos364.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M01/59/6F/wKiom1TS2-mwO_uCAAA8QIXi2_A543.jpg" target="_blank"></a>
比較主要可以對數值,字元比較;注意這個和其他很多語言是反的,-eq ,-gt之類的比較的是數字;==,< 反而比較的是字元。
<a href="http://s3.51cto.com/wyfs02/M02/59/6C/wKioL1TS3NaSYrWAAAB5W25KxZ4599.jpg" target="_blank"></a>
除此還可以判斷檔案,目錄是否存在。
<a href="http://s3.51cto.com/wyfs02/M02/59/6C/wKioL1TS3NeTq3EoAAB-ELVub64970.jpg" target="_blank"></a>
對于數值運算,可以通過declare,(()),let和bc來操作。但是隻有bc可以進行浮點運算,其他都是整數運算。
<a href="http://s3.51cto.com/wyfs02/M02/59/6F/wKiom1TS2-zDs_n-AACKoMGHOUE000.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/59/6C/wKioL1TS3NnQX0WYAAArV9fpyJ0043.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/59/6F/wKiom1TS2-6yyLXvAABqTRARW5Q867.jpg" target="_blank"></a>
條件判斷語句一般有兩種 if ..else 或者 case 的形式。
比如判斷一個使用者名是否存在
<a href="http://s3.51cto.com/wyfs02/M01/59/6C/wKioL1TS3N_D9t6ZAAEeMEHX8Ds780.jpg" target="_blank"></a>
根據case 判斷
<a href="http://s3.51cto.com/wyfs02/M01/59/6F/wKiom1TS2_qh4sWmAACZe15oGzA396.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M02/59/6C/wKioL1TS3OjilTBGAAC3bFxhrqA471.jpg" target="_blank"></a>
循環比較常用 while 和 for
比如從1加到10
<a href="http://s3.51cto.com/wyfs02/M02/59/6F/wKiom1TS2_2ChZYZAABzO38UpAM853.jpg" target="_blank"></a>
可以通過read讀取檔案或者螢幕輸入
比如 輸出 passwd的内容
<a href="http://s3.51cto.com/wyfs02/M00/59/6C/wKioL1TS3OrymwXQAACReBeoAnE907.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/59/6F/wKiom1TS3APBqg16AAGC5Ec1Lgk104.jpg" target="_blank"></a>
類似的,讀取test.txt的内容,建立使用者
<a href="http://s3.51cto.com/wyfs02/M01/59/6F/wKiom1TS3AuybWFoAAHiIxFqWBI985.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M02/59/6C/wKioL1TS3PiQPbUqAAA5qdixPuY450.jpg" target="_blank"></a>
如果想中斷循環,可以用break;
<a href="http://s3.51cto.com/wyfs02/M02/59/6F/wKiom1TS3A7BEU1lAAB4Yv8-qa0670.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M02/59/6F/wKiom1TS3A-z2yaQAAAl2ue_0YU804.jpg" target="_blank"></a>
for 循環也很簡單,比如輸出一個乘法表
<a href="http://s3.51cto.com/wyfs02/M00/59/6C/wKioL1TS3PuxF2E_AABRo5mGPIY400.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/59/6F/wKiom1TS3BHDLdK5AACkjz8pI5E750.jpg" target="_blank"></a>
本文轉自 beanxyz 51CTO部落格,原文連結:http://blog.51cto.com/beanxyz/1611830,如需轉載請自行聯系原作者