shell程式設計 》流程控制之for迴圈

2021-10-25 13:32:37 字數 4493 閱讀 8185

#**********=》shell風格語法

for 變數名 [

in 取值列表 ]

do 迴圈體

done

#**********=》c語言風格語法

for(

(初值;條件;步長)

)do

迴圈體done

shell風格的for,常用in列表方式

for i in12

3for i in

for i in

for i in

for i in

for i in

for i in

for i in $(命令)

# 例如:for i in $(head -10 /etc/passwd);do echo $i|cut -d: -f1,2;done

for i in $(find ...

)

continue與for

continue:預設退出本次迴圈

break:預設退出本層迴圈

案例1:shell風格的for

for i in

do echo $i

done

案例2:c語言風格的for

for

((i=

1;i<=

10;i++)

)doecho $i

done

案例3:檢查內網存活的ip,使用&符號提公升指令碼的執行效率

#!/bin/bash

for i in

do (ping -w 1

-c 1

192.168

.12.$i &

>

/dev/null &

& echo 192.168

.12.$i)

&done

案例4:編寫檔案型別測試指令碼,支援多個引數

[root@egon /

]# cat file.sh

#!/bin/bash

for i in $@

do if[[

-d $i ]

];then

echo "$i is directory."

elif[[

-b $i ]

];then

echo "$i is block device."

elif[[

-f $i ]

];then

echo "$i is a regular file."

else

echo "unknow."

fidone

[root@egon /

]# chmod +x file.sh

[root@egon /]#

[root@egon /

]# ./file.sh a.txt /etc /root /abc

a.txt is a regular file

./etc is directory.

/root is directory.

unknow.

案例5:可以直接在命令列編寫for迴圈

[root@egon /

]# for i in ;do [ $i -eq 5 ] && continue || echo $i;done

[root@egon /

]# for i in ;do [ $i -eq 5 ] && break || echo $i;done

案例6:統計dev下每種檔案型別的數量

#!/bin/bash

dir=

'/dev'

for i in `ls $dir`

do if

[-b $dir

/$i ]

;then

((block++)

)# 或者 let block++,下同

elif

[-f $dir

/$i ]

;then

((file++

))elif

[-d $dir

/$i ]

;then

((directory++)

)else

((unkown++)

) fi

done

echo 'block' $block

echo 'regular file' $file

echo 'directory' $directory

echo 'unkown' $unkown

案例7:向指令碼傳遞乙個使用者名稱,驗證這個使用者是否存在.

[root@egon ~

]# cat testuser.sh

#!/bin/bash

id $1

&>

/dev/null

if[ $? -eq 0

];then

echo "使用者$1存在"

else

echo "使用者$1不存在"

fi[root@egon ~

]# ./testuser.sh root

使用者root存在

案例8:新增30個使用者,再將它們刪除

for i in;do

useradd user$i&

&echo "user$i create successful"

done

for i in;do

userdel -r user$i&

&echo "user$i delete successful"

done

案例9:輸入賬號資訊,輸入個數,批量建立使用者user01、user02、user03…,密碼預設123456

[root@egon shell]

# cat adduser.sh

#!/bin/bash

read -p "請輸入建立的使用者名稱資訊: " name

read -p "請輸入建立的使用者數量: " count

for i in `seq -w $count`

do echo $name$i

useradd $name$i &

>

/dev/null

echo 123456

| passwd -

-stdin $name$i &

>

/dev/null

id $name$i &

>

/dev/null

[ $? -eq 0]&

& echo "$name$i create is ok"

|| echo "$name$i create is failed"

done

案例10:巢狀多層for迴圈,結合break與continue,(了解即可)

#1、使用break:

break 預設引數是 1

所以寫 break 等於 break

1意義:退出當前迴圈層

break

2 則向上退出2層迴圈 當前迴圈也計算在退出層次裡

# 示例

for i in

do echo -e "第一層迴圈:loop$i"

for j in

doecho -e "\t第二層迴圈:loop$j"

for n in

doecho -e "\t\t第三層迴圈:loop$n:$i$j$n"if(

(n==2)

);then

break

3 fi

done

done

done

#2、使用continue

continue

=continue

1在當次迴圈中忽略continue後續的**

就是:立即結束當前迴圈中的當次迴圈,而轉入當前迴圈的下一次迴圈

continue

2 等同於 break

1continue

3 等同於 break

2總結:continue n 等同於 break n-

1for i in

do echo -e "第一層迴圈:loop$i"

for j in

doecho -e "\t第二層迴圈:loop$j"

for n in

doecho -e "\t\t第三層迴圈:loop$n:$i$j$n"if(

(n==2)

);then

continue

3 fi

done

done

done

Shell 程式設計(五)Shell流程控制

if condition1 then command1 elif condition2 then command2 else commandn fi方式一 for n in12 3doecho ndone 或for n in12 3 do echo n done 或for n in do echo ...

Shell程式設計的流程控制

和其他高階程式語言一樣,shell提供了用來控制程式執行流程的命令,包括條件分支和迴圈結構,使用者可以用這些命令建立非常複雜的程式。與傳統語言不同的是,shell用於指定條件值的不是布林表示式,而是命令和字串。1 測試命令 test命令用於檢查某個條件是否成立,它可以進行數值 字元和檔案3個方面的測...

Shell程式設計的流程控制

和其他高階程式語言一樣,shell提供了用來控制程式執行流程的命令,包括條件分支和迴圈結構,使用者可以用這些命令建立非常複雜的程式。與傳統語言不同的是,shell用於指定條件值的不是布林表示式,而是命令和字串。1 測試命令 test命令用於檢查某個條件是否成立,它可以進行數值 字元和檔案3個方面的測...