循環命令用於將一個命令或一組命令執行指定的次數,或者一直執行直到滿足某個條件爲止。在Bash shell中常用的循環語句有,for循環,while循環,until循環
一、For循環語句
1、For循環的語法
for var in list
do
commands
done
2、For循環的流程圖
3、For循環舉例
1)、輸入一個文件,判斷文件是directory還是file
[root@localhost test]# cat 3.sh #!/bin/sh for file in $1 do if [ -d "$file" ] then echo "$file is a directory" elif [ -f "$file" ] then echo "$file is a file" fi done [root@localhost test]# sh 3.sh /etc/passwd /etc/passwd is a file [root@localhost test]# sh 3.sh /etc /etc is a directory [root@localhost test]#
說明:
行3:調用了位置變量$1
行5-11:使用if語句判斷$1是文件還是目錄
2)、計算一個目錄中有多少個文件
[root@localhost test]# cat 4.sh #!/bin/bash # Count=0 for File in /tmp/*; do file $File Count=$[$Count+1] done echo "Total files: $Count."
說明:
行7:每循環一次Count的值+1
二、While循環語句
while命令允許定義要測試的命令,然後只要定義的測試命令返回0狀態值,則執行while循環中的語句,否則直接退出
1)、while循環的語法
while test command
do
oter command
done
2)、while循環的流程圖
3)、while循環舉例
計算100以內整數的和
[root@localhost test]# cat 6.sh #!/bin/sh Sum=0 Count=1 while [ $Count -le 100 ]; do let Sum+=$Count let Count++ done echo $Sum
如果用戶的ID號爲偶數,則顯示其名稱和shell;對所有用戶執行此操作;
[root@localhost test]# cat 5.sh #!/bin/sh while read LINE; do Uid=`echo $LINE | cut -d: -f3` if [ $[$Uid%2] -eq 0 ]; then echo $LINE | cut -d: -f1,7 fi done < /etc/passwd
說明:
行3,8:將passwd中的每一行給變量LINE賦值(由於while能讀到 $LINE的值,所以判斷爲 真,狀態返回值爲0)
行4,5,6:取出$LINE中用戶的UID並判斷UID是否是偶數,如果是偶數則顯示其用戶名和 shell
三、Until循環語句
Until命令允許定義要測試的命令,然後只要定義的測試命令返回非0狀態值,則執行unitl循環中的語句,否則直接退出(unitl和while剛好相反)
1)、Until循環語句的語法
until test command
do
oter command
done
2)、Until循環的流程圖
3)Until循環舉例
計算100以內整數的和
[root@localhost test]# cat 6.sh #!/bin/sh Sum=0 Count=1 until [ $Count -gt 100 ]; do let Sum+=$Count let Count++ done echo $Sum
每隔5秒查看hadoop用戶是否登錄,如果登錄,顯示其登錄並退出;否則,顯示當前時間,並說 明hadoop尚未登錄:
who | grep "^TOM" &> /dev/null RetVal=$? until [ $RetVal -eq 0 ]; do date sleep 5 who | grep "^TOM" &> /dev/null RetVal=$? done echo "TOM is here."
說明:
行1,2:查看TOM用戶是否登錄,然後輸出狀態碼
行3:如果狀態返回值等於0則不執行下面的腳本。
行4,5:顯示時間並設置sleep 5秒
行6,7:再次檢查用戶TOM是否登陸