linux提供了乙個專門的變數$?來儲存上個已執行命令的退出狀態碼。對於需要進行檢查的命令,必須在其執行完畢後立刻檢視或使用$?變數。它的值會變成由shell所執行的最後一條命令的退出狀態碼:
[root@host1 test]# date2023年 07月 19日 星期三
16:32:51
cst[root@host1 test]#
echo $?
0
按照慣例,乙個成功結束的命令的退出狀態碼是0。如果乙個命令結束時有錯誤,退出狀態碼就是乙個正數值(1-255):
[root@host1 test]# qwert-bash: qwert: command not found
[root@host1 test]#
echo $?
127
linux退出狀態碼
狀 態 碼 描 述
0 命令成功結束
1 一般性未知錯誤
2 不適合的shell命令
126 命令不可執行
127 沒找到命令
128 無效的退出引數
128+x 與linux訊號x相關的嚴重錯誤
130 通過ctrl+c終止的命令
255 正常範圍之外的退出狀態碼
退出狀態碼126表明使用者沒有執行命令的正確許可權:
[root@host1 test]# ./expect.sh-bash: ./expect.sh
: 許可權不夠
[root@host1 test]#
echo $?
126
另乙個會碰到的常見錯誤是給某個命令提供了無效引數:
[root@host1 test]# cd %-bash: cd: %: 沒有那個檔案或目錄
[root@host1 test]#
echo $?
1
這會產生一般性的退出狀態碼1,表明在命令中發生了未知錯誤。
預設情況下,shell指令碼會以指令碼中的最後乙個命令的退出狀態碼退出:
[root@host1 test]# sh test.shthis is a test
file
[root@host1 test]#
echo $?
0
你可以改變這種預設行為,返回自己的退出狀態碼。exit命令允許你在指令碼結束時指定乙個退出狀態碼:
[root@host1 test]# cat test.sh#!/bin/bash
a=10
b=20
c=$[$a +$b]
echo
the number is $c
exit $c
[root@host1 test]#
sh test.sh
the number is
30[root@host1 test]#
echo $?
30
這裡直接使用了c的值為exit的退出值,也可以直接指定exit 30,這都是對的;但是你要注意這個功能,因為退出狀態碼最大只能是255。看下面例子中會怎樣:
[root@host1 test]# cat test.sh#!/bin/bash
a=10
b=30
c=$[$a *$b]
echo
the number is $c
exit $c
[root@host1 test]#
sh test.sh
the number is
300[root@host1 test]#
echo $?
44
退出狀態碼被縮減到了0~255的區間,shell通過模運算得到這個結果。乙個值的模就是被除後的餘數。最終的結果是指定的數值除以256後得到的餘數。在這個例子中,指定的值是300(返回值),餘數是44,因此這個餘數就成了最後的狀態退出碼。
linux 退出狀態碼
在linux狀態中,每當命令執行完成後,系統都會返回乙個退出狀態。該退出狀態用乙個整數值表示,用於判斷命令執行的正確與否。最後一次執行命令的退出狀態值被儲存在內建變數 中,所以,可以通過echo語句測試命令是否執行成功。一般來講,退出狀態 0 表示正常執行,沒有遭遇任何問題。其他非零的狀態碼均表示失...
shell退出狀態碼
shell中執行的命令使用退出狀態碼 exit status 告訴shell它已經執行完畢。退出狀態碼是乙個0 255的整數值,在命令結束時傳給shell。可以捕獲這個值並在指令碼中使用。按照慣例,乙個成功結束的命令的退出狀態碼是0。如果乙個命令結束時有錯誤,退出狀態碼就是乙個正數值。狀態碼及描述 ...
Linux 之exit 程序退出函式
標頭檔案 include include 原型 void exit int status void exit int status exit os立刻把管理記憶體的結構體 虛擬記憶體釋放掉。exit 不會馬上乾掉結構體,先看先看當前程序有沒有檔案快取區,若有則會先處理快取區中的資料,然後銷毀結構體。...