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