循環結構
循環需要有進入條件和退出條件,如果沒有退出條件,則就會一直循環下去 for 變量 in 列表;do 循環體 done
生成列表及示例
{1..100}:生成1到100的整數列表 `command`:使用命令生成列表 Example1: #!/bin/bash for i in /data/*;do echo "$i" done for循環可以對目錄下的文件列表進行循環;如果目錄下有三個文件,則執行三次循環;如果/data/下有文件f1.txt,則i的值就為/data/f1.txt Example2: #!/bin/bash # declare -i SUM=0 #指明SUM變量是一個整數型變量;變量的值為整數;指定求和變量的初始值為0 for I in {1..100};do let SUM=$[$SUM+$I] #指定SUM變量是一個整數型變量 done echo "the sum number is: $SUM" 把列表里面的1賦值給變量I,SUM變量的初始值為0,所以SUM變量的值為$SUM+$I,SUM=0+1=1;當I=2時,SUM的值為$SUM+$I=1+2=3,以此類推,退出循環的條件為I為100時,列表已經沒有元素,退出循環,最后打印SUM的值,從1+2+3..100 Example3: #!/bin/bash declare -i SUM=0 declare -i SUMS=0 for i in {1..10};do NUM=$[$i%2] if [ $NUM -eq 0 ];then let SUM=$[$SUM+$i] else let SUMS=$[$SUMS+$i] fi done echo "even is: $SUM" echo "odd is: $SUMS" 計算100以內的奇數和偶數的和各是多少 Example4: #!/bin/bash declare -i SUM=0 for I in {1..100};do SUMS=$[$I%3] if [ $SUMS -eq 0 ];then SUM=$[$SUM+$I] fi done echo "$SUM" 計算100以內,3的倍數的數相加的和 Example5: #!/bin/bash if [ $# -lt 1 ];then echo "Parameters not empty" exit 8 #必須指定exit,如果不添加exit,執行完這個判斷之后還會繼續執行下面的判斷 fi if [ $1 == '--add' ];then for i in {1..10};do if ! id user$i &>/dev/null;then useradd user$i echo "user$i" | passwd --stdin user$i &>/dev/null echo "add user$i finished" else echo "user$i exists" fi done elif [ $1 == '--del' ];then for i in {1..10};do if id user$i &>/dev/null;then userdel -r user$i echo "Delete user$i finished" else echo "no such user" fi done else echo "Input error" exit 10 fi 循環添加10個用戶或者刪除10個用戶 Example6: #!/bin/bash if [ $1 == '--add' ];then for i in `echo "$2" | sed -n 's/,/ /gp'`;do #sed后面必須加g選項,否則只搜索替代第一個,加上g是全局搜索替代 if id $i &>/dev/null;then echo "$i exists" else useradd $i echo "$i" | passwd --stdin $i &>/dev/null echo "add $i finished" fi done elif [ $1 == '--del' ];then for i in `echo "$2" | sed -n 's/,/ /gp'`;do if id $i &>/dev/null;then userdel -r $i echo "delete $i" else echo "$i not exists" fi done else echo "unknow options" fi 通過--add xxx,xxx,xxx進行自定義添加和刪除用戶
組合條件測試
-a:與關系 -o:或關系 !:非關系 Example: [ $# -gt 1 -a $# -le 3 ] [ $# -gt 1 ] && [ $# -le 3 ]
德·摩根定律

非(A 且 B) = (非 A) 或 (非 B) 非(A 或 B) = (非 A) 且 (非 B) Example: #!/bin/bash declare -i MAX=0 declare -i MIN=0 for i in {1..10};do MYRAND=$RANDOM #需要把RANDOM變量生成的隨機數保存到另一個變量中,如果不保存,最下面的判斷成立,會給MAX、MIN賦值一個新的隨機數 [ $i -eq 1 ] && MIN=$MYRAND #MIN只需要參與一次循環,如果不加限制條件,MIN會參與10次循環,這樣隨機數會一直等於MIN,而不會小於 if [ $i -le 9 ];then echo -n "$MYRAND," #-n表示取消換行符 else echo "$MYRAND" fi [ $MYRAND -gt $MAX ] && MAX=$MYRAND #添加判斷條件;如果MYRAND的值大於MAX值,則MAX的值為MYRAND的值 [ $MYRAND -lt $MIN ] && MIN=$MYRAND #如果MYRAND的值小於MIN的值,則MIN的值為MYRAND的值 done echo "$MAX,$MIN" 循環10次,生成10個隨機數,取出其中的最大最小值