條件判斷if和循環(huán)語句

過程式編程語言:順序執(zhí)行,選擇執(zhí)行,循環(huán)執(zhí)行

1.if語句:條件選擇

(1) 執(zhí)行機制:逐條件進行判斷,第一次遇為“真”條件時,執(zhí)行其分支,而后結(jié)束整個if語句
- && 代表and
- || 代表or
(2)單分支

if 判斷條件;then
條件為真的分支代碼
fi

(3)雙分支

if 判斷條件; then
條件為真的分支代碼
else
條件為假的分支代碼
fi

(4)多分支

if 判斷條件1; then
條件為真的分支代碼
elif 判斷條件2; then
條件為真的分支代碼
elif 判斷條件3; then
條件為真的分支代碼
else
以上條件都為假的分支代碼
fi

(5)If示例

 根據(jù)命令的退出狀態(tài)來執(zhí)行命令
if ping -c1 -W2 station1 &> /dev/null; then
echo 'Station1 is UP'
elif grep "station1" ~/maintenance.txt &> /dev/null
then
echo 'Station1 is undergoing maintenance‘
else
echo 'Station1 is unexpectedly DOWN!'
exit 1
fi

2.case語句:條件判斷

case 變量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默認分支
;;
esac
eg:打印棋盤
#!/bin/bash
for i in $(seq 16);do
     let m=$i%4
     case $m in
     1|2)
         for j in $(seq 4);do
              echo -ne "\033[42m    \033[0m"
              echo -ne "\033[46m    \033[0m"
          done
          ;;
     3|0)
         for j in $(seq 4);do
               echo -ne "\033[46m    \033[0m"
               echo -ne "\033[42m    \033[0m"
         done
         ;;
      esac
      echo
done

運行結(jié)果:

Paste_Image.png

3.for循環(huán)

(1) 執(zhí)行機制:
依次將列表中的元素賦值給“變量名”; 每次賦值后即執(zhí)
行一次循環(huán)體; 直到列表中的元素耗盡,循環(huán)結(jié)束

for 變量名 in 列表;do
循環(huán)體
done

(2)列表生成方式:

(1) 直接給出列表
(2) 整數(shù)列表:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使用glob,如:*.sh
(5) 變量引用;
$@, $*

(3)for循環(huán)的特殊格式:

  • 雙小括號方法,即((…))格式,也可以用于算術(shù)運算
  • 雙小括號方法也可以使bash Shell實現(xiàn)C語言風格的變量操作I=10((I++))
for ((控制變量初始化;條件判斷表達式;控制變量的修正表達
式))
do
循環(huán)體
done

? 控制變量初始化:僅在運行到循環(huán)代碼段時執(zhí)行一次
? 控制變量的修正表達式:每輪循環(huán)結(jié)束會先進行控制變量修正運算,而后再做條件判斷

eg:打印99乘法表

#!/bin/bash
 for i in {1..9};do
          for j in `seq $i`;do
               let n=i*j
             echo -en "$j*$i=$n\t"
           done
    echo
  done

運行結(jié)果:


Paste_Image.png
eg:打印等腰三角形
#!/bin/bash
if [ $# -eq 0 ];then # $#代表所有參數(shù)個數(shù)
       read -p "please input lines:" lines; #提示輸入?yún)?shù)
else  
       lines=$1 #把第一個參數(shù)賦值給lines
fi

if [[ $lines =~ ^[0-9]+$ ]] ;then #判斷是不是輸入的數(shù)字
       [ $lines -eq 0 ] && { echo lines can not is zero;exit 1; }
else 
             echo lines must is digit
             exit 2
fi

for i in `seq $lines`;do 
       for space in `seq $[lines-i]`;do
               echo -n " "   
       done 

       for star in `seq $[2*i-1]`;do
              declare -i N=$(($RANDOM%7+30))
                if [[ $N -gt 31 && $N -lt 37 ]];then
                        echo -e "\033[1;${N};5m*\c\0mm"
                 else 
                        echo -e "\033[31;5m*\c\0mm"
                 
                  fi
       done
   echo
done

運行結(jié)果:

Paste_Image.png

4.while循環(huán)

 while CONDITION; do
循環(huán)體
done
CONDITION:循環(huán)控制條件;進入循環(huán)之前,先做一次判斷;每一次循環(huán)之后會再次做判斷;條件為“true”,
則執(zhí)行一次循環(huán);直到條件測試狀態(tài)為“false”終止循環(huán)因此:CONDTION一般應(yīng)該有循環(huán)控制變量;而此變
量的值會在循環(huán)體不斷地被修正
                               進入條件:CONDITION為true
                               退出條件:CONDITION為false

while循環(huán)的特殊用法(遍歷文件的每一行):
while read line; do
循環(huán)體
done < /PATH/FROM/SOMEFILE
? 依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line
eg:打印棋盤
#!/bin/bash
i=0
while [ $i -lt 8 ];do
        j=0
        while [ $j -lt 8 ];do
                let  flags=(i+j)%2
                if [ $flags -eq 0 ];then
                         echo -en "\033[42m  \033[0m"
                else 
                         echo -en "\033[46m  \033[0m"
                fi
                let j++
         done
         echo
          let i++
done

運行結(jié)果:

Paste_Image.png
#!/bin/bash
i=0
while [ $i -lt 8 ];do
      let a=$i%2
          if [ $a -eq 0 ];then
                     j=0
                     while [ $j -lt 8 ];do
                            echo -en "\033[46m    \033[0m"
                            echo -en "\033[42m    \033[0m"
                            [ $j -eq 3 ] && echo
                            [ $j -eq 7 ] && echo
                          let j++
                        done     
          else
                  j=0
                    while [ $j -lt 8 ];do
                             echo -en "\033[42m    \033[0m"
                             echo -en "\033[46m    \033[0m" 
                             [ $j -eq  3 ] && echo 
                             [ $j -eq  7 ] && echo  
                            let j++
                     done
           fi
          
          let i++
done

運行結(jié)果:

Paste_Image.png

5.until循環(huán)

until CONDITION; do
循環(huán)體
done

進入條件: CONDITION 為false
出條件: CONDITION 為true

6.循環(huán)控制語句continue

  • 用于循環(huán)體中
  • continue [N]:提前結(jié)束第N層的本輪循環(huán),而直接進入下一
    輪判斷;最內(nèi)層為第1層
    eg:
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
continue
fi
CMDn
...
done

7.循環(huán)控制語句break

? 用于循環(huán)體中
? break [N]:提前結(jié)束第N層循環(huán),最內(nèi)層為第1層
eg:

while CONDTIITON1; do
CMD1
...
if CONDITION2; then
break
fi
CMDn
...
done

8.循環(huán)控制shift命令

  • shift [n]
? 用于將參量列表 list 左移指定次數(shù),缺省為左移一次。
? 參量列表 list 一旦被移動,最左端的那個參數(shù)就從列表中刪除。while 循環(huán)遍歷位置參量列表時,常用到 shift

eg:

? ./doit.sh a b c d e f g h
? ./shfit.sh a b c d e f g h
doit.sh
#!/bin/bash
# Name: doit.sh
# Purpose: shift through command line arguments
# Usage: doit.sh [args]
while [ $# -gt 0 ] # or (( $# > 0 ))
do
echo $*
shift
done
shift.sh
#!/bin/bash
#step through all the positional parameters
until [ -z "$1" ]
do
echo "$1"
shift
done
echo
eg:創(chuàng)建用戶
#!/bin/bash
while [ $# -gt 0 ] #or (( $# > 0 ))
do 
    id $1 &>/dev/null && continue
    useradd $1 && echo $1 is create
    shift
done

9.創(chuàng)建無限循環(huán)

 while true; do
循環(huán)體
done
until false; do
循環(huán)體
    Done
Paste_Image.png

10.select循環(huán)與菜單

select variable in list
do
循環(huán)體命令
done
select 循環(huán)主要用于創(chuàng)建菜單,按數(shù)字順序排列的菜單項將顯示在標準錯誤上,并顯示 PS3 提示符,等待用戶輸入
? 用戶輸入菜單列表中的某個數(shù)字,執(zhí)行相應(yīng)的命令
? 用戶輸入被保存在內(nèi)置變量 REPLY 中

select與case

(1)select 是個無限循環(huán),因此要記住用 break 命令退出循環(huán),或用 exit 命令終止腳本。也可以按 ctrl+c退出循環(huán)
(2)select 經(jīng)常和 case 聯(lián)合使用
(3)與 for 循環(huán)類似,可以省略 in list,此時使用位置參量
#!/bin/bash
PS3="Please choose your menu:"
select menu in lamian humian yangroutang;do
          case $REPLY in
             1)
                    echo "The price is \$5"
                     ;;
             2)
                    echo "The price is \$6"
                     ;;
             3)
                    echo "The price is \$8"
                     ;;
             *) 
                    echo "we haven't"
                    break
                      ;;
             esac
done

運行結(jié)果:

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 概述 編寫shell腳本,一般離不開條件選擇,條件判斷以及循環(huán)語句。掌握這三個語法,將大大提高腳本的編寫效率,...
    ghbsunny閱讀 1,693評論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,823評論 18 399
  • 性格,耐心和求知欲的重要性。 你必須有濃厚的興趣去弄明白正在發(fā)生的事情背后的原因。并且能夠長期保持這種心態(tài)。
    幸福的眼淚_52da閱讀 120評論 0 0
  • 卸妝油消除脂肪粒方法 部分眼霜和卸妝油是可以消除脂肪粒的,去除眼部脂肪粒,要使用著哩狀的眼霜,卸妝油主要使用臉部鼻...
    LHo閱讀 264評論 0 0
  • 一場大雨趕走了布谷鳥的叫喚,悶沉沉的天氣分不清季節(jié)。 潮濕得令人抑郁。 去年這個時候,早已是艷陽高照,街頭潮人紛紛...
    會飛的呆瓜閱讀 285評論 0 1

友情鏈接更多精彩內(nèi)容