Bash退出命令和退出代碼

通常,在編寫Bash腳本時,您需要在滿足特定條件時終止腳本,或者根據命令的退出代碼採取措施。

在本文中,我們將介紹Bash exit 內置命令和已執行命令的退出狀態。

退出狀態編號

每個shell命令成功終止都會失敗時返回退出代碼。

按照慣例,退出代碼為零表示命令已成功完成,而非零則表示遇到錯誤。

特殊變量 $? 返回最後執行的命令的退出狀態:

date &> /dev/nullecho $?

date 命令成功完成,並且退出代碼為零:

0

如果您嘗試跑步 ls 在不存在的目錄上,退出代碼將為非零:

ls /nonexisting_dir &> /dev/nullecho $?
2

狀態代碼可用於找出命令失敗的原因。 每個命令的手冊頁都包含有關退出代碼的信息。

當執行多命令管道時,管道的退出狀態為最後一條命令的退出狀態:

sudo tcpdump -n -l | tee file.outecho $?

在上面的例子中 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終端

Sidebar