for 變數 in 取值列表do 各種操作
done
還有罕見
的寫法就是都寫作一行裡:
for 變數 in 取值列表 ;do 各種操作 ;
done
取值列表大致可以分成列舉和迭代兩類
取值列表為空格或回車符分割的字串
foriin'meat'
'sleep'
'woman'
doecho i like $i
done
在終端執行該指令碼for.sh。執行結果
命令替換即` `和$( )兩種操作符的使用。命令替換配合for迴圈很常見。jelly@x:~$ bash for.sh
i like meat
i like sleep
i like woman
比如我系統的使用者叫做jelly,現在我新建了乙個叫做guodong的使用者。 但是guodong使用者缺少很多組許可權。我想讓guodong擁有jelly所在的全部組。
那麼我可以這樣:
forvarin
`groups jelly`
doecho
$var
#列印組名
gpasswd -a guodong $var
done
請用root執行該指令碼,這樣就完成了乙個給使用者guodong批量新增組的任務。
來計算一下1加到100的和
#!/bin/bashans=0
fori
in do
let ans+=$i
done
echo
$ans
結果是5050.
花括號的迭代還可以指定指定增量,格式如下:
來我們計算一下1到100以內的所有奇數的和:
foriin
doecho
$idone
需要配合命令替換使用。seq命令的格式為:
seq 首數 [增量] 末數
請注意增量的位置在中間,這與前面提到的花括號不同。
來看乙個例子(改編自《shell scripting expert recipes for linux,bash,and more》p114)
用指令碼來ping一下區域網內的主機:
#!/bin/bashprefix=192.168.1.
fori
in`seq 100 110`
doecho -n "$$i
" ping -c5 $$
>/dev/null 2>&1
if [ "$?"
-eq 0 ];
then
echo
"ok"
else
echo
"failed"
fidone
當然了for迴圈也可以寫作for i in
終端執行的結果
bash還支援c語言風格的for迴圈,這個很好理解,我們直接來看例子,去計算一下1到100的和。jelly@x:~$ bash ping.sh
192.168.1.100 failed
192.168.1.101 failed
192.168.1.102 ok
192.168.1.103 ok
192.168.1.104 ok
192.168.1.105 ok
192.168.1.106 failed
192.168.1.107 failed
192.168.1.108 failed
192.168.1.109 failed
192.168.1.110 failed
#!/bin/bashans=0
for((i=
1;i<=
100;i++
))do
let ans+=$i
done
echo
$ans
注意!!!這裡的for迴圈要有兩層括號。
玩轉Bash指令碼 迴圈結構之for迴圈
for迴圈 for 變數 in 取值列表 do 各種操作 done還有罕見的寫法就是都寫作一行裡 for 變數 in 取值列表 do 各種操作 done取值列表大致可以分成列舉和迭代兩類 取值列表為空格或回車符分割的字串 for i in apple meat sleep woman do echo...
玩轉Bash指令碼 選擇結構之if
幾乎所有的程式語言中都有流程控制的概念,即順序結構 選擇結構和迴圈結構。選擇結構也稱分支結構,比如c類語言中的if和switch語句。前面我已經講過了test表示式及其簡化版 運算子的使用,這些判斷的語句即可作為if結構的條件。bash shell中我們可以使用的任何能夠有真假判斷功能的命令 無論是...
玩轉Bash指令碼 選擇結構之if
差點兒全部的程式語言中都有流程控制的概念。即順序結構 選擇結構和迴圈結構。選擇結構也稱分支結構,比方c類語言中的if和switch語句。前面我已經講過了test表示式及其簡化版 運算子的使用,這些推斷的語句就可以作為if結構的條件。bash shell中我們能夠使用的不論什麼能夠有真假推斷功能的命令...