一循環語句
1.1 帶列表的for循環語句shell
for variable in{list}express
do數組
statement1bash
done命令行
(list爲一個列表,for循環的執行次數與list中元數個數相關,shell將in關鍵字後面的list列表的第一個元素值賦給變量variabel,而後執行循環體,list元素都被訪問完後,程序執行done語句後面的其餘語句。)字符串
例子:it
#! /bin/bashio
#for循環開始for循環
for var in 1 2 3 45 6 7 8變量
do
#依次輸出列表中的數字
echo "the number is $var"
done
結果:
the number is 1
the number is 2
the number is 3
the number is 4
the number is 5
the number is 6
the number is 7
the number is 8
另外,shell容許指定for語句的步長,基本語法爲:
for variable in{start..end..step}
用字符串做爲元素,可省略外面的大括號,如:
for day in mon tuewed thu
能夠用ls命令的輸出結果做爲for循環的執行條件。如:
#! /bin/bash
#使用ls命令的執行結果做爲列表
for file in $(ls)
do
#輸出每一個文件名
echo "$file"
done
($()的做用就是講其中的字符串做爲命令執行,可用`ls`替代。)
上面例子能夠等價於
#! /bin/bash
#使用通配符做爲列表條件,列出當前目錄全部文件
for file in *
do
echo "$file"
done
列表for循環另外一個比較重要的用途是處理腳本參數。可經過$*一次獲取全部參數。用戶能夠經過將該系統變量獲取的參數值做爲for循環的條件列表。從而一次處理各個參數。
例子
#!/bin/bash
#輸出全部的參數
echo"$*"
#將參數列表做爲條件
for arg in $*
do
#依次輸出各個參數值
echo "${arg}"
done
執行:./ex5.sh a b c d
結果:a b c d
a
b
c
d
1.2 不帶列表的for循環
for variable
do
statement1
done
(沒有條件列表,shell從命令行獲取條件列表)
等價於
for variable in $@
do
statement1
done
($@也是獲取全部參數)
等價於
for variable in $*
do
statement1
done
例子:
#! /bin/bash
#! /bin/bash
#不帶條件列表
for arg
do
#輸出每一個參數
echo "$arg"
done
for語句處理數組
for variable in${array[*]}
1.3 until語句
until expression
do
statement1
done
(expression不爲0執行statement1,執行完後繼續判斷expression,不爲0,繼續執行,爲0則退出)
用until批量增長用戶:
#! /bin/bash
#定義變量i
i=1
#一直循環到變量i的值爲21
until ["$i" -eq 21 ]
do
#執行useradd命令添加用戶
useradd user$i
#修改用戶密碼
echo "password" | passwd --stdinuser$i > /dev/null
#循環變量自增
let "i++"
done
until循環刪除系統用戶:
#! /bin/bash
i=1
until ["$i" -eq 21 ]
do
#依次刪除用戶
userdel -r user$i
let "i++"
done
1.4 whlie循環語句
while expression
do
statement1
done
(expression 爲0執行循環體(即爲真執行))
例子:
#! /bin/bash
#定義循環變量
i=1
#while循環開始
while [["$i" -lt 10 ]] //小於10,爲真,即0,執行循環體
do
#計算平方
let "square=i*i"
#輸出平方
echo "$i*$i=$square"
#循環變量自增
let "i=i+1"
done
用戶可在程序中設置一個特殊的標記值,當該標記值出現時,終止while循環。
例子:
#! /bin/bash
#提示用戶輸入數字
echo "Pleaseenter a number between 1 and 10.Enter 0 to exit."
#讀取用戶輸入的數字
read var
#while循環開始
while [["$var" != 0 ]]
do
#提示用戶輸入數字過小
if [ "$var" -lt 5 ]
then
echo "Too small. Try again."
read var
#提示用戶輸入數字太大
elif [ "$var" -gt 5 ]
then
echo "Too big. Try again."
read var;
else
echo "Congratulation! You areright."
exit 0;
fi
(上面變量var是結束標記,爲0或5時,退出循環)
1.5 嵌套循環:
例子1:九九乘法表:
#! /bin/bash
#外層循環
for((i=1;i<=9;i++))
do
#內層循環
for ((j=1;j<=i;j++))
do
#計算2個數的乘積
let "product=i*j"
#輸出乘積
printf "$i*$j=$product"
#輸出空格分隔符
if [[ "$product" -gt 9 ]]
then
printf " "
else
printf " "
fi
done
echo
done
1.6 break語句控制循環
break當即跳出某個循環,執行循環體後面的語句。
默認狀況下,break退出一層循環,可在後面增長一個數字做爲參數,指定要退出的循環參數。如:break2退出兩層循環。
1.7 continue語句控制循環
continue跳過當前循環體中該語句後面的語句,從新從循環語句開始的位置執行。
例子:
#! /bin/bash
for var in {1..10}
do
#若是當前數字爲奇數,從新循環
if [[ "$var%2" -eq 1 ]]
then
#跳事後面的語句
continue
fi
echo "$var"
done
結果:輸出10之內的偶數
注意:continue與break的本質區別是continue沒有跳出循環結構