擴展
select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html
for循環
vim for.sh #! /bin/bash for i in 'seq 1 5'; do echo $i done
腳本中的seq1 5表示從1到5的一個序列。
[root@aminglinux-128 ~]# sh for.sh seq 1 5
for循環的基本結構格式:
for 變量名 in 循環的條件;do
command
done
這裏的“循環的條件”可以是一組數字或者字符串(用一個或者多個空格隔開),也可以是一條命令的執行結果。
[root@aminglinux-128 ~]# for i in 1 2 3 a b; do echo $i; done 1 2 3 a b
‘’循環的條件‘’還可以引用系統命令的執行結果(如seq 1 5),但必須用反引號括起來。
[root@aminglinux-128 ~]# for file in 'ls';do echo $file; done ls
while循環
while用來編寫死循環的腳本,用來監控某項服務。
while 條件;do
command
done
示例如下
vim while.sh #! /bin/bash a=5 while [ $a -ge 1 ]; do echo $a a=$[$a-1] done
腳本執行結果
[root@aminglinux-128 ~]# sh while.sh 5 4 3 2 1
可以用冒號代替循環條件,這樣可以做到死循環。
while :;do
command
done
shell腳本中的函數
shell腳本中的函數就是先把一段代碼整理到一個小單元中,並給這個小單元命名,當用到這段代碼時直接調用這個小單元名字即可。有時腳本中的某段代碼總是重複使用,如果寫成函數,每次用到時直接用函數名代替即可。
寫一個帶有函數功能的shell腳本。
vim func.sh #! /bin/bash function sum() { sum=$[$1+$2] echo $sum } sum $1 $2
該腳本的執行結果
[root@aminglinux-128 ~]# sh func.sh 1 2 3
func.sh中的sum()爲自定義的函數。在shell腳本中函數的格式如下:
function 函數名()
{
command1
command2
}
在shell腳本中,函數一定要寫在最前面,不能出現在中間或者最後。因爲函數是要被調用的,如果還沒有出現就被調用,肯定會出錯。
shell腳本的中斷和繼續
break
break用在循環中,不管是for或者while都可以。在腳本中使用它,表示退出該層循環。它的上層循環不受影響。
[root@aminglinux-128 ~]# vim break.sh
#! /bin/bash for i in 'seq 1 5' do echo $i if [$i ==3 ] then break fi echo $i done echo aaaaaaa
腳本中,本意是要把1·5數值賦予i,當i等於3時,會跳出循環,後面的4和5都不會再執行。腳本執行結果:
[root@aminglinux-128 ~]# sh break.sh seq 1 5 break.sh:行5: [seq: 未找到命令 seq 1 5 aaaaaaa
continue
continue也是使用在循環中的,當在shell腳本中遇到continue時,結束的不是整個循環,而是本次循環。
[root@aminglinux-128 ~]# vim continue.sh
#! /bin/bash for i in 'seq 1 5' do echao $i if [$i ==3] then continue fi echo $i done echo $i
腳本執行結果
[root@aminglinux-128 ~]# sh continue.sh continue.sh:行4: echao: 未找到命令 continue.sh:行5: [seq: 未找到命令 seq 1 5 seq 1 5
當i大於3時,出現了continue,所以結束本次循環,continue後面的語句不再執行,繼續下一次循環。
exit
exit直接退出整個shell腳本
[root@aminglinux-128 ~]# vim exit.sh
#! /bin/bash for i in 'seq 1 5' do echo $i if [ $i == 3 ] then exit fi echo $i done echo aaaaaaa
腳本執行結果
[root@aminglinux-128 ~]# sh exit.sh seq 1 5 exit.sh:行5: [seq: 未找到命令 seq 1 5 aaaaaaa