1. 程式人生 > >shell腳本(四)case流程控制和exit命令

shell腳本(四)case流程控制和exit命令

系統/運維 Linux

exit命令

exit用來控制程序和表達式的流程,一般的編程語言中都會有一個exit函數,在Linuxshell中也屬存在的.

exit 0

exit status

status 用0-255之間的數字表示,返回狀態值的同時伴隨著腳本的退出(其實就是退出).

就是$? 的值可以使用echo 進行查詢

exit命令 在腳本中和在終端上是不一樣的.

實驗1-判斷從鍵盤輸入的值是否為空


1,進入一個子shell,編輯一個文件.(預防執行exit的時候退出終端,所以先執行一個子shell)

[root@Cent65 ~]# bash
[root@Cent65 ~]# vim exit.sh

#!/bin/bash
echo "please enter a string :"

? read str1
if [ -z $str1 ]
then
???? echo "what you enter is null"
?? exit 1
fi

驗證腳本

我們先輸入一個值,可以看到我的退出狀態為0 (腳本的變量值輸入不為空),不會執行then中的語句

輸入一個空的字符串 則執行then後面的命令 同時退出 狀態為1

技術分享圖片

繼續驗證:

將exit.sh腳本中的值改成255

技術分享圖片

技術分享圖片

在編寫腳本時可以自己設置退出的狀態值,不過特定的值都是有特定的意義的,不要亂用.


case語句結構

case語句為多選擇語句。可以用case語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令。

case語句主要適用於,某個變量存在多種取值,需要對其中的每一種取值分別執行不同的命令序列

case分支語句的語法結構

case 變量名 in

???????? 模式1)

???????????????????? 命令序列

????????? 模式二)

???????????????????? 命令序列

;;

????????????? ……

???????????????? *

?????????????????? 默認命令序列

exit

esac

註意事項:

取值後面必須為單詞?? in;

每一模式必須以右括號結束。

取值可以為變量或常數。

這個esac 就是case的結束,像if...fi 一樣的,
註意commands? ;; 中的“;;”不能少掉。

匹配發現取值符合某一模式後,其間所有命令開始執行直至 ;;。

取值將檢測匹配的每一個模式。一旦模式匹配,則執行完匹配模式相應命令後不再繼續其他模式。

如果無一匹配模式,使用星號 * 捕獲該值,再執行後面的命令。


技術分享圖片


實驗

編寫一個名為untar.sh的腳本,用來解壓.tar.gz 和 .tar.bz2格式的歸檔文件

vim untar.sh

case $1 in
????? *.tar.gz)
????????????? tar zxf $1
;;
????? *.tar.bz2)
????????????? tar jxf $1
;;
????? *)
???????? echo "error"
;;
esac

測試:

創建一個測試的.tar.gz文件

技術分享圖片

技術分享圖片

技術分享圖片











shell腳本(四)case流程控制和exit命令