Shell exit流程控制語句及用法

2020-07-16 10:04:35
系統中是有 exit 命令的,用於退出當前使用者的登入狀態。但是在 Shell 指令碼中,exit 語句是用來退出當前指令碼的。也就是說,在 Shell 指令碼中,只要碰到了 exit 語句,後續的程式就不再執行,而直接退出指令碼。exit 的語法如下:

exit [返回值]

如果在 exit 之後定義了返回值,那麼這個指令碼執行之後的返回值就是我們自己定義的返回值。可以通過查詢 $? 這個變數來査看返回值。如果 exit 之後沒有定義返回值,則指令碼執行之後的返回值是執行 exit 語句之前最後執行的一條命令的返回值。寫一個 exit 語句的例子:

[[email protected] ~]#vi sh/exit.sh
#!/bin/bash
#演示exit的作用
read -p "Please input a number:" -t 30 num
#接收使用者的輸入,並把輸入賦予變數num
y=$(echo $num|sed's/[0-9]//g')
#如果變數num的值是數位,則把num的值替換為空;否則不替換
#把替換之後的值賦予變數y
[-n "$y" ] && echo "Error! Please input a number!" && exit 18
#判斷變數y的值,如果不為空,則輸出報錯資訊,退出指令碼,退出返回值為18
echo The number is: $num"
#如果沒有退出指令碼,則列印變數num中的數位

在這個指令碼中,大家需要思考,如果輸入的不是數位,那麼"echo"The number is:$num""這條命令是否會執行?當然不會,因為如果輸入的不是數位,那麼"[-n"$y"]&&echo"Error! Please input a number!"&&exit 18"這條命令就會執行,exit 一旦執行,指令碼就會中止。執行一下這個指令碼:

[[email protected] ~]# chmod 755 sh/exit.sh
#給指令碼賦予執行許可權
[[email protected] ~]# sh/exit.sh
#執行指令碼
Please input a number: test
#輸入值不是數位,而是test
Error! Please input a number!
輸出報錯資訊,而不會輸出test
[[email protected] ~]# echo $?
#檢視一下返回值
18
#返回值居然是18
[[email protected] ~]# sh/exit.sh
Please input a number: 10
#輸入數位10
The number is: 10
#輸出數位10