引言
通常,在編寫Bash腳本時,需要在滿足特定條件時終止腳本,或者根據命令的退出代碼采取措施。
在本文中,我們將介紹Bash exit內置命令和已執行命令的退出狀態。
退出狀態
每個shell命令在成功終止時都會返回退出代碼。
按照慣例,退出代碼為零表示命令已成功完成,非退出代碼為零表示遇到錯誤。
特殊變量$?返回最後執行的命令的退出狀態:
date &> /dev/null
echo $?
該 date 命令成功完成,並且退出代碼為 0。
如果嘗試ls在不存在的目錄上運行,則退出代碼將為非零:
ls /nonexisting_dir &> /dev/null
echo $?
結果輸出 2。
狀態代碼可用於找出命令失敗的原因。每個命令的手冊頁,都包含有關退出代碼的信息。
當執行多命令管道時,管道的退出狀態為最後一條命令的退出狀態:
sudo tcpdump -n -l | tee file.out
echo $?
在上面的示例中,echo $?將列印 tee 命令的退出代碼。
Bash exit 指令
該exit命令以 N 狀態退出 shell 程序。它具有以下語法:
exit N
如果N未給出,則退出狀態代碼是最後執行的命令的退出狀態代碼。
在shell腳本中使用時,作為exit命令參數提供的值將作為退出代碼返回給shell。
舉例說明
命令的退出狀態可用於條件判斷語句。在以下示例中,如果在文件 filename 內使用grep找到字元串“search-string”,則將以 0 退出(這在shell腳本中為true):
運行以&&(AND)或||(OR)分隔的命令列表時,命令的退出狀態確定是否將執行列表中的下一個命令。此處,mkdir 僅在cd返回 0 時才執行命令:
cd /opt/code && mkdir project
如果腳本結尾exit沒有指定參數,則腳本退出代碼是腳本中最後執行的命令的退出代碼。
#!/bin/bash
echo "doing stuff..."
exit
僅僅使用 exit,相當於調用 exit $?。或者你也可以省略 exit。
下面是顯示非腳本用戶調用腳本時如何終止腳本的示例:
如果您以root用戶身份運行腳本,則退出代碼將為零。否則,腳本將以status退出1。
寫在最後
每個 shell 命令終止時,都會返回退出碼,在 bash 腳本中你可以靈活地使用,並控制程序流程。
Happy coding :_)
我是 @程序員小助手 ,持續分享編程知識,歡迎關注。