天天看點

萬字Linux shell詳細教程,包教包會,學不會找我!(二)

八、Shell echo指令

你可以直接在終端輸入這樣的單行指令來測試學習,不用一直建立新的檔案。

1)顯示普通字元串

echo "hello world"      

這裡的雙引号完全可以省略,以下指令與上面執行個體效果一緻:

echo hello world      

完整示範如下:

萬字Linux shell詳細教程,包教包會,學不會找我!(二)

2)顯示轉義字元

echo "\"hello world\""      

示範如下:

萬字Linux shell詳細教程,包教包會,學不會找我!(二)

3)顯示換行

使用\n換行:

echo -e "hello\n"      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

4)顯示不換行

echo -e "chuan! \c" # -e 開啟轉義 \c 不換行      

示範:

萬字Linux shell詳細教程,包教包會,學不會找我!(二)

5)顯示結果重定向至檔案

定向至test7.sh檔案:

echo "hello world" >test7.sh      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

6)顯示執行時間

echo `date`      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

這裡又到了最後了,補充一下printf跟echo指令是一樣的作用,是以我就不示範了,統一用echo來輸出。

九、Shell test 指令

1)數值測試

參數和說明如下:

-eq 等于則為真
-ne 不等于則為真
-gt 大于則為真
-ge 大于等于則為真
-lt 小于則為真
-le 小于等于則為真      

示範一個參數如下:

num1=200
num2=200
if test $[num1] -eq $[num2]
then
    echo '兩個數相等!'
else
    echo '兩個數不相等!'
fi        

即:

萬字Linux shell詳細教程,包教包會,學不會找我!(二)
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

到這裡我先把前面建立的檔案删了:

rm -rf test1.sh test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh       
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

代碼中的 [] 執行基本的算數運算,例如:

a=10
b=10

result=$[a+b] # 注意等号兩邊不能有空格
echo "result結果為: $result"      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

完整示範如下(我建立了一個檔案夾,免得打亂了):

萬字Linux shell詳細教程,包教包會,學不會找我!(二)

我僅僅示範了加法,你也可以去嘗試一些别的計算。

2)字元串測試

參數如下:

=   等于則為真
!=  不相等則為真
-z 字元串  字元串的長度為零則為真
-n 字元串  字元串的長度不為零則為真      

示範一個如下:

num1="chuan"
num2="chuan"
if test $num1 = $num2
then
    echo '兩個字元串相等!'
else
    echo '兩個字元串不相等!'
fi      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

3)檔案測試

參數:

-e 檔案名  如果檔案存在則為真
-r 檔案名  如果檔案存在且可讀則為真
-w 檔案名  如果檔案存在且可寫則為真
-x 檔案名  如果檔案存在且可執行則為真
-s 檔案名  如果檔案存在且至少有一個字元則為真
-d 檔案名  如果檔案存在且為目錄則為真
-f 檔案名  如果檔案存在且為普通檔案則為真
-c 檔案名  如果檔案存在且為字元型特殊檔案則為真
-b 檔案名  如果檔案存在且為塊特殊檔案則為真      

舉一個例子:

if test -e ./test1.sh
then
    echo '檔案已存在!'
else
    echo '檔案不存在!'
fi      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

其它參數可以自行測試。

十、shell 控制流

1)if判斷流

if else

fi

文法格式如下:

if condition
then
    command1 
    command2
    ...
    commandN 
fi      

舉個例子:

-gt 大于則為真      

測試代碼如下:

a=5
b=6
if test [$a -gt]
then
        echo '大於'
else    
        echo '小於'
fi      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

再來進階測試代碼如下:

a=5
b=6
if test [$a==$b]
then
        echo '等於'
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "沒有符合的條件"
fi      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

2)for 循環

文法:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done      

寫成一行則是:

for var in item1 item2 ... itemN; do command1; command2… done;      

舉例子如下:順序輸出目前清單中的數字

for a in 1 2 3 4 5
do
    echo "值依次爲: $a"
done      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

我們再來個進階:列印任意數的乘法表

echo "輸入一個數:"
read num
for ((  i=1;i<=$num;i++  ))
do
   for ((  j=1;j<=$num;j++  ))
   do
      [  $j  -le  $i  ]  &&  echo -n "${i}*${j}=$((i*j))      "    #判斷j是否小于i,當
j大于i時不輸出,輸出不換行,末尾加一個制表符
   done
   echo ""           #輸出一個換行符                
done
      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

3)while循環

文法格式:

while condition
do
    command
done      

舉例為:依次輸出1到6

int=1
while(( $int<=6 ))
do
    echo $int
    let "int++"
done      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

4)until 循環

until 循環執行一系列指令直至條件為 true 時停止。until 循環與 while 循環在處理方式上剛好相反。

文法為:

until condition
do
    command
done      

condition 一般為條件表達式,如果傳回值為 false,則繼續執行循環體内的語句,否則跳出循環。

舉個例子:使用 until 指令來輸出 0 ~ 6 的數字

a=0

until [ ! $a -lt 6 ]
do
   echo $a
   a=`expr $a + 1`
done      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

5)case … esac

case … esac 為多選擇語句,與C語言中的 switch … case 類似,每個 case 分支用右圓括号開始,用兩個分号 ;; 表示 break,即執行結束.

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac      

舉例:提示輸入 1 到 4,與每一種模式進行比對

echo '輸入 1 到 4 之間的數字:'
echo '你輸入的數字為:'
read a
case $a in
    1)  echo '你選擇了 1'
    ;;
    2)  echo '你選擇了 2'
    ;;
    3)  echo '你選擇了 3'
    ;;
    4)  echo '你選擇了 4'
    ;;
    *)  echo '你沒有輸入 1 到 4 之間的數字'
    ;;
esac      

6)跳出循環

break

break指令允許跳出所有循環(終止執行後面的所有循環)。

do
    echo -n "輸入 1 到 5 之間的數字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你輸入的數字為 $aNum!"
        ;;
        *) echo "你輸入的數字不是 1 到 5 之間的! 遊戲結束"
            b      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

continue

continue指令與break指令類似,隻有一點差别,它不會跳出所有循環,僅僅跳出目前循環。

測試代碼為:

while :
do
    echo -n "輸入 1 到 5 之間的數字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你輸入的數字為 $aNum!"
        ;;
        *) echo "你輸入的數字不是 1 到 5 之間的!"
            continue
            echo "遊戲結束"
        ;;
    esac
done      
萬字Linux shell詳細教程,包教包會,學不會找我!(二)

是不是有人想問我怎麼結束呢?ctrl+c強制結束即可。

繼續閱讀