shell學習筆記---(語法篇二)

· case命令
· for循環
· while循環
· until循環
· 死循環
· 命令行循環

# case命令 類比c的switch/case語句 esac表示語句塊的結束
# c中的switch/case只能匹配整型或字符型常量表達式
# 而shell中的case可以匹配字符串和Wildcard
# 每個匹配分支可以有若干條命令,末尾必須以;;(兩個分號)結束
# 執行時找到第一個匹配的分支並執行相應的命令
# 然後直接跳到esac之後,不用像c一樣用break跳出
 case $1 in  # $1是一個特殊變量執行腳本時自動取值爲第一個命令行參數
     'start' )
         echo "start...done"
         ;;
     'stop' )
         echo "stop...done"
         ;;
     * )
         echo "default"
         ;;
 esac
# 假如有兩種情況需要走同一段邏輯如何處理
 case $1 in
     'start' | -s )
         echo "start...done"
         ;;
     'stop' | -p )
         echo "stop...done"
         ;;
     * )
         echo "default"
         ;;
 esac
# 支持通配符的情況
 case $1 in
     [sS]tart | -s )
         echo "start...done"
         ;;
     [sS]top | -p )
         echo "stop...done"
         ;;
     * )
         echo "default"
         ;;
 esac

# for循環語句
# 方式1
# 在(())結構中所有的運算和C是一樣的
 for ((i = 0;i <= 5;i++ ))
 do
     echo "hello $i"
 done
# 方式2
 for i in {0..5}
 do
     echo "hello $i"
 done
# for in這樣的循環的獨到之處就是遍歷字符等
 for i in {a..e}
 do
     echo "hello $i"
 done
# 也可以組合
 for i in {a..c}{1..3}
 do
     echo "hello $i"
 done
# 或者這樣組合
 for i in {a..c} {1..3}
 do
     echo "hello $i"
 done

# while循環
 i=0
 while [ $i -le 5 ]
 do
     echo "hello $i"
     (( i++ )) #該句也可以使用let i++,二者等價
 done
 until循環,shell特有
 i=0
 until [ $i -ge 5 ]
 do
     echo "hello $i"
     let i++
 done
# 總結一下:
# while循環是當條件爲真時執行後面緊跟的do後面的語句
# until循環是條件爲假時才執行

# 死循環
# 方式1
 for (( ; ; ))
 do
     echo "hello"
 done
# 方式2
 while :   # 或者while true
 do
     echo "hello"
 done
# 方式3
 until false
 do
     echo "hello"
 done

# 命令行循環
# 命令行循環與上面我們寫過的循環並無不同
# 只是在命令行上寫時每一條語句的後面都需要加上分號

# 練習1:求1~100的和
# 方式1:for循環
 sum=0
 for i in {1..100}
 do
     ((sum=sum+$i))
 done
 echo "sum=$sum"
# 方式2:while循環
 i=1
 sum=0
 while [ $i -le 100 ]
 do
     let sum+=i
     let i++
 done
 echo "sum="$sum
# 練習2:求1~100的和並打印執行過程
 sum=0
 string=''
 for i in {1..100}
 do
     let sum+=i
     if [ -z "$string" ];then  # 判斷是否爲一個空字符串
         string=$i
     else
         string=$string'+'$i # 字符串拼接
     fi
     let i++
 done
發佈了110 篇原創文章 · 獲贊 47 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章