玩轉Bash指令碼 迴圈結構之for迴圈

2021-06-27 15:03:52 字數 2235 閱讀 9353

for 變數 in 取值列表

do 各種操作

done

還有罕見的寫法就是都寫作一行裡:

for 變數 in 取值列表 ;

do 各種操作 ;

done

取值列表大致可以分成列舉和迭代兩類

取值列表為空格或回車符分割的字串

foriin

'meat'

'sleep'

'woman'

doecho i like $i

done

在終端執行該指令碼for.sh。執行結果

jelly@x:~$ bash for.sh 

i like meat

i like sleep

i like woman

命令替換即` `和$( )兩種操作符的使用。命令替換配合for迴圈很常見。

比如我系統的使用者叫做jelly,現在我新建了乙個叫做guodong的使用者。 但是guodong使用者缺少很多組許可權。我想讓guodong擁有jelly所在的全部組。

那麼我可以這樣:

for

varin

`groups jelly`

doecho

$var

#列印組名

gpasswd -a guodong $var

done

請用root執行該指令碼,這樣就完成了乙個給使用者guodong批量新增組的任務。

來計算一下1加到100的和

#!/bin/bash

ans=0

fori

in do

let ans+=$i

done

echo

$ans

結果是5050.

花括號的迭代還可以指定指定增量,格式如下:

來我們計算一下1到100以內的所有奇數的和:

for

iin

doecho

$idone

需要配合命令替換使用。seq命令的格式為:

seq 首數 [增量] 末數
請注意增量的位置在中間,這與前面提到的花括號不同。

來看乙個例子(改編自《shell scripting expert recipes for linux,bash,and more》p114)

用指令碼來ping一下區域網內的主機:

#!/bin/bash

prefix=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

終端執行的結果

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

bash還支援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迴圈 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中我們能夠使用的不論什麼能夠有真假推斷功能的命令...