linux退出狀態碼及exit命令

2022-02-11 07:45:46 字數 2117 閱讀 5880

linux提供了乙個專門的變數$?來儲存上個已執行命令的退出狀態碼。對於需要進行檢查的命令,必須在其執行完畢後立刻檢視或使用$?變數。它的值會變成由shell所執行的最後一條命令的退出狀態碼:

[root@host1 test]# date

2023年 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.sh

this 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 不會馬上乾掉結構體,先看先看當前程序有沒有檔案快取區,若有則會先處理快取區中的資料,然後銷毀結構體。...