for,while,until循環

循環是爲了執行重複的動作


for

while

until


1、for循環

語法:

   for 變量 in 變量列表

   do

循環體;

   done


    # cat for1.sh 

#!/bin/bash

for i in `seq 5`

do

echo $i

done

 in後面接列表  

   for i in 1 2 3 4 5 `seq 10`

   for i in {1..10}

 

 插曲 

---------------------------------------

seq 10   //打印1到10

seq 5 10 //打印5到10

seq 1 2 10    //打印奇數

  # seq 開始值 步長 結束值


---------------------------------------

"$*"   "$@"   變量的列表

# vim for2.sh

#!/bin/bash

echo "----\$*----"

for i in "$*"

do

 echo $i

done


echo "----\$@----"

for i in "$@"

do

 echo $i

done

# chmod +x for2.sh 

# ./for2.sh 1 2 3 4 5 6 7 8 9

----$*----

1 2 3 4 5 6 7 8 9

----$@----

1

2

3

4

5

6

7

8

9

練習:1)批量添加10個用戶,用戶名爲u1~u10

      並且爲他們設置密碼,pass1~pass10

     # cat for3.sh

#!/bin/bash

for i in `seq 10`

do

 useradd u$i

 echo "user u$i added."

 echo pass$i | passwd --stdin u$i &> /dev/null

 echo "set user u$i password."

done


      2)計算1+2+3+...+100

       # cat for4.sh

#!/bin/bash

for i in {1..100}

do

    #let sum=sum+$i;

        #sum=$((sum+$i))  //這三種任選其一即可

        let sum+=$i;

done

echo  "sum=" $sum


      3)計算10的階乘 10!=1*2*3*4*5*6*7*8*9*10

         改編:用戶輸入數,你就求那個數的階乘

      4)打印99乘法表

語法

  while 命令或者條件表達式

  do

     循環體; //注意:循環體部分要有變量更新

  done

 

  當命令或條件表達式爲真,執行循環體的內容。直到條件爲假時,退出循環


while :   死循環

1、打印1到5

# cat while1.sh 

#!/bin/bash

i=1

while [ $i -le 5 ]

do

  echo $i;

  let i++;

done

2、添加用戶,用戶信息來自於文件。

  其實就是循環中從文件讀取內容,使用輸入重定向(<)

   # vim user.txt

     tom:2000:tommao

     cat:2001:catmao

   # vim while2.sh

      #!/bin/bash

while read line

do

 username=`echo $line | awk -F: '{print $1}'`

 password=`echo $line | cut -d: -f3`

 uid=`echo $line | awk -F: '{print $2}'`

 useradd -u $uid $username

 echo $password | passwd --stdin $username

done < /root/shelldoc/user.txt   //變量line的值來自於文件

   # sh while2.sh 

Changing password for user tom.

passwd: all authentication tokens updated successfully.

Changing password for user cat.

passwd: all authentication tokens updated successfully.

   # tail -2 /etc/passwd

tom:x:2000:2000::/home/tom:/bin/bash

cat:x:2001:2001::/home/cat:/bin/bash

 

捕捉信號  trap

   # kill -l

   # cat trap.sh 

#!/bin/bash

trap "echo you can not kill me,haha." 15

while :

do

 echo hello;

 sleep 2;     //延遲2秒

done

  第一個標籤:

   # sh trap.sh

  第二個標籤:

   # ps -ef | grep trap

root     31955 26274  0 15:45 pts/6    00:00:00 sh trap.sh

   # kill -15 31955

  第一個標籤:

   看輸出中會有對信號15的處理 you can not kill me,haha.

 

語法

  until 命令或條件表達式

  do

    循環體

  done


當條件爲真,退出循環。與while相反。

    # cat until.sh 

#!/bin/bash

i=1

until [ $i -gt 5 ]

do

 echo $i;

 let i++;

done


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