Shell腳本中經常使用的循環語句

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

相關文章
相關標籤/搜索