#**********=》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個方面的測...