Bash退出命令和退出代碼
通常,在編寫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
命令。
重擊 exit
命令#
的 exit
命令以以下狀態退出外殼 N
。 它具有以下語法:
exit N
如果 N
如果沒有給出,則退出狀態代碼是最後執行的命令的退出狀態代碼。
在shell腳本中使用時,該值作為參數提供給 exit
命令作為退出代碼返回到外殼。
例子 #
命令的退出狀態可用於條件命令,例如 if
。 在下面的例子中 grep
如果在以下位置找到“搜索字符串”,則將以零退出(這在shell腳本中為true)。 filename
:
if grep -q "search-string" filename then
echo "String found."
else
echo "String not found."
fi
運行命令列表時,用 &&
(AND)或 ||
(OR),命令的退出狀態確定是否將執行列表中的下一個命令。 在這裡 mkdir
僅在以下情況下執行命令 cd
返回零:
cd /opt/code && mkdir project
如果腳本以 exit
在不指定參數的情況下,腳本退出代碼是腳本中最後執行的命令的退出代碼。
〜/ script.sh
#!/bin/bash
echo "doing stuff..."
exit
僅使用 exit
是相同的 exit $?
或省略 exit
。
這是顯示非腳本用戶調用腳本時如何終止腳本的示例:
#!/bin/bash
if [[ "$(whoami)" != root ]]; then
echo "Only user root can run this script."
exit 1
fi
echo "doing stuff..."
exit 0
如果您以root用戶身份運行腳本,則退出代碼將為零。 否則,腳本將以狀態退出 1
。
結論#
每個shell命令終止時都會返回退出代碼。 的 exit
命令用於退出具有給定狀態的Shell。
如果您有任何疑問或反饋,請隨時發表評論。
bash終端