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

2022-03-23 12:22:12 字數 1913 閱讀 6119

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