shell腳本--循環結構


  shell的循環結構有while和for兩種

for循環

#!/bin/bash
#文件名:test.sh

i=4

for i in 2 4 6 8 10
do
    echo $i
done

echo $i

  運行:

ubuntu@ubuntu:~$ ./test.sh
2
4
6
8
10
10
ubuntu@ubuntu:~$ 

  注意最后一次輸出是10,而不是其他語言中輸出4,這一點和JavaScript很類似。

  for循環要循環的內容就是跟在in后面,然后以空格分隔,可能要循環的內容特別多,那么就可以將要循環的內容保存在一個文件中,然后讀出來即可。比如下面:

#!/bin/bash
#文件名:test.sh

for i in `cat test.txt`
do
    echo $i
done
    echo $i

  往test.txt中添加一點內容:

ubuntu@ubuntu:~$ echo 1 3 5 7 9 > test.txt
ubuntu@ubuntu:~$ ./test.sh
1
3
5
7
9
9
ubuntu@ubuntu:~$ 

  shell默認會將空格、制表符(\t)、換行看做是分隔符,所以:

  1、無論內容是以換行或者制表符分隔,for循環都會將其看作是空格分隔,效果上是一樣的。

  同時要注意,如果for循環中,集合中的某一項中間包含空格,那么請使用引號將其括起來,因為for循環是以空格分隔的。

  前面講for循環和其他語言的for循環形式上的差別很大,但是呢,其實shell中for循環也可以向其他語言那樣是用for,例子如下:

#!/bin/bash
#文件名:test.sh

for ((i=0;i<4;i++))
do
    echo $i
done

  運行:

ubuntu@ubuntu:~$ ./test.sh
0
1
2
3
ubuntu@ubuntu:~$ 

  一定要注意着一種for循環中,使用的是兩對括號,在括號中使用像其他語言的三個表達式的格式。其實着一種for循環的do和done可以換成{  和  } 。僅限於for循環,其他循環和判斷結構不適用。

 

自定義分隔符

  上面已經說了,shell默認是以空格、制表符、換行進行分隔,那么如果需要強制分隔符是什么時,可以修改IFS這個環境變量。

#!/bin/bash
#文件名:test.sh

IFS='x'  #以x為分隔
#IFS=':' #以:為分隔
#IFS=$'\n'  #如果是特殊字符,需要在前面加上$
v="aaaaxbbbbbxcccccxddddd"
#其實$v此時的內容是aaaa bbbbb ccccc dddd
for s in $v
do
    echo $s
done

  運行:

ubuntu@ubuntu:~$ ./test.sh
aaaa
bbbbb
ccccc
ddddd

  

  

while循環

  while后面跟着判斷條件,判斷條件可以為多個,但是每一個判斷條件都要是用單獨的 [  ]括起來,然后多個判斷之間使用 &&、||來表示含義。

  例子:

#!/bin/bash
#文件名:test.sh

tot=0
num=10
while [ $num -gt 0 ]
do
    tot=$[ $tot + $num ]
    num=$[ $num - 1 ]
done

echo "總和為"$tot

  運行結果如下:

ubuntu@ubuntu:~$ ./test.sh
總和為55
ubuntu@ubuntu:~$ 

  

until循環

  until循環和while循環剛好相反

  對於while,如果條件成立,則進入循環,否則條件不成立時,就結束循環。

  until則是相反的,如果條件不成立,則進入循環;如果條件成立,則結束循環。

  用until改寫上面的例子:

#!/bin/bash
#文件名:test.sh

tot=0
num=10
#num小於或等於0時,結束循環,否則進入循環
until [ $num -le 0 ]
do
    tot=$[ $tot + $num ]
    num=$[ $num - 1 ]
done

echo "總和為"$tot

  運行測試結果和上面一樣。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM