天天看點

Shell程式設計之流程控制

目錄

一、shell概述

二、流程控制

2.1  if判斷

2.2  case語句

2.3  for循環

2.4  while循環

一、shell概述

Shell是一個指令行解釋器,可以接收應用程式和使用者的指令,然後調用作業系統的核心。

Shell還是一個功能相當強大的程式設計語言,易編寫、易調試、靈活性強。

Shell程式設計之流程控制

二、流程控制

2.1  if判斷

基本文法

if [ 條件判斷式 ];then
    程式
fi
           

或者

if [ 條件判斷式 ]
    then
        程式
elif [ 條件判斷式 ]
    then
        程式
else
    程式
fi
           

(1)[ 條件判斷式 ] 中括号和條件判斷式之間必須有空格

(2)if後要有空格

實操

(1)輸入一個數字,如果是1,則輸出 zhangsan,如果是2,則輸出 lisi,如果是其它,都輸出 shayebushi。

// 建立一個文本if.sh
[[email protected] datas]# touch if.sh
// 編輯if.sh文本
[[email protected] datas]# vim if.sh
#!/bin/bash

if [ $1 -eq "1" ]
        then
                echo "zhangsan"
elif [ $1 -eq "2" ]
        then
                echo "lisi"
else
        echo "sha ye bu shi"
fi

// 執行if.sh腳本
[[email protected] datas]# bash if.sh 1
zhangsan
[[email protected] datas]# bash if.sh 2
lisi
[[email protected] datas]# bash if.sh 4
sha ye bu shi
           

2.2  case語句

基本文法

case $變量名 in 
  "值1")
    如果變量的值等于值1,則執行程式1 
    ;; 
  "值2")
    如果變量的值等于值2,則執行程式2 
    ;; 
  …省略其他分支… 
  *)
    如果變量的值都不是以上的值,則執行此程式 
    ;; 
esac
           

(1)case行尾必須為單詞“in”,每一個模式比對必須以右括号“)”結束

(2)雙分号“;;”表示指令序列結束,相當于java中的break

(3)最後的“*)”表示預設模式,相當于java中的default

實操

(1)輸入一個數字,如果是1,則輸出 zhangsan,如果是2,則輸出 lisi,如果是其它,輸出 hello shell。

// 建立一個文本case.sh
[[email protected] datas]# touch case.sh
// 編輯case.sh文本
[[email protected] datas]# vim case.sh

#!/bin/bash

case $1 in
"1")
        echo "zhangsan"
;;

"2")
        echo "lisi"
;;
*)
        echo "hello shell"
;;
esac

// 運作case.sh腳本
[[email protected] datas]# bash case.sh 1
zhangsan
[[email protected] datas]# bash case.sh 2
lisi
[[email protected] datas]# bash case.sh 5
hello shell
           

2.3  for循環

基本文法 1

for ((初始值;循環控制條件;變量變化)) 
  do 
    程式 
  done
           

實操

(1)從1加到100。

// 建立一個文本for1.sh
[[email protected] datas]# touch for1.sh
// 編輯for1.sh
[[email protected] datas]# vim for1.sh

#!/bin/bash

s=0
for((i=0;i<=100;i++))
do
        s=$[$s+$i]
done

// 執行for1.sh腳本
[[email protected] datas]# bash for1.sh
5050
           

基本文法 2

for 變量 in 值1 值2 值3… 
  do 
    程式 
  done
           

實操

(1)列印所有輸入參數。

// 建立一個文本for2.sh
[[email protected] datas]# touch for2.sh
// 編輯for2.sh文本
[[email protected] datas]# vim for2.sh

#!/bin/bash
#列印數字

for i in $*
        do
                echo "zhangsan love $i"
        done

for j in $@
        do      
                echo "lisi love $j"
        done

// 執行for2.sh腳本
[[email protected] datas]# bash for2.sh honghong luelue baibai
zhangsan love honghong
zhangsan love luelue
zhangsan love baibai
lisi love honghong
lisi love luelue
lisi love baibai
           

$*和$@都表示傳遞給函數或腳本的所有參數,不被雙引号“”包含時,都以$1 $2 …$n的形式輸出所有參數。

// 建立一個文本for3.sh
[[email protected] datas]# touch for3.sh
// 編輯for3.sh文本
[[email protected] datas]# vim for3.sh

#!/bin/bash
#列印數字

for i in "$*"    // "honghong luelue baibai"
        do
                echo "zhangsan love $i"
        done

for j in $@    // "honghong" "luelue" "baibai"
        do      
                echo "lisi love $j"
        done

// 執行for3.sh腳本
[[email protected] datas]# bash for3.sh honghong luelue baibai
zhangsan love honghong luelue baibai
lisi love honghong
lisi love luelue
lisi love baibai
           

當它們被雙引号“”包含時,“$*”會将所有的參數作為一個整體,以“$1 $2 …$n”的形式輸出所有參數;“$@”會将各個參數分開,以“$1” “$2”…”$n”的形式輸出所有參數。

2.4  while循環

基本文法

while [ 條件判斷式 ] 
  do 
    程式
  done
           

實操

(1)從1加到100。

// 建立一個文本while.sh
[[email protected] datas]# touch while.sh
// 編輯文本while.sh
[[email protected] datas]# vim while.sh

#!/bin/bash

s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done

echo $s

// 執行while.sh腳本
[[email protected] datas]# bash while.sh
5050