Shell腳本中常用的循環語句

  循環命令用於將一個命令或一組命令執行指定的次數,或者一直執行直到滿足某個條件爲止。在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是否登陸



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章