循環命令用於將一個命令或一組命令執行指定的次數,或者一直執行直到知足某個條件爲止。在Bash shell中經常使用的循環語句有,for循環,while循環,until循環shell
1、For循環語句bash
一、For循環的語法
ide
for var in listoop
do 測試
commands spa
doneblog
二、For循環的流程圖
hadoop
三、For循環舉例get
1)、輸入一個文件,判斷文件是directory仍是fileit
[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
2、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
3、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是否登錄