亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shell退出狀態碼的方法

發布時間:2021-03-16 17:10:57 來源:億速云 閱讀:233 作者:TREX 欄目:開發技術

這篇文章主要講解了“Shell退出狀態碼的方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Shell退出狀態碼的方法”吧!

Shell 中運行的命令會使用0-255之間的整數值,作為退出狀態碼,并以此來告知shell該命令執行的狀態。通常情況下,約定0代表命令成功結束,非0代表程序非正常退出。

典型退出狀態碼及其含義

退出狀態碼

含義

0

命令運行成功

1

通知未知錯誤

2

誤用shell命令

126

命令不可執行

127

沒有找到命令

128

無效退出參數

128+x

linux信號x的嚴重錯誤

130

命令通過Ctrl+C終止

255

退出狀態碼越界

一、退出狀態碼的小實驗

小實驗1

未指定函數返回值,且函數最后一條命令執行成功

#!/bin/bash
function hello(){
  #echo "Hello World";
  ech "Hello World";
  return 3
  # return 260
}
hello
echo $?

執行結果

****@****:/******$ bash test.sh
Hello World
0

說明:由于此時未指定返回值,所以以函數最后一條被執行的命令echo "Hello World";的執行狀態作為函數的退出狀態。此時 echo "Hello World";執行成功,所以返回0作為退出狀態碼。

小實驗2

未指定函數返回值,且函數最后一條命令執行失敗(以無效指令為例)

#!/bin/bash
function hello(){
  #echo "Hello World";
  ech "Hello World";
  #return 3
  # return 260
}
hello
echo $?

執行結果

****@****:/******$ bash test.sh
test.sh: line 4: ech: command not found
127

說明:此時未指定返回值,所以函數以ech "Hello World";的執行狀態作為hello函數的退出狀態。執行失敗,且未約定特定的返回值用于標識無效指令返回值,所以此時默認以127作為退出狀態返回值。

小實驗3

指定函數返回值,且函數返回值在約定范圍內

#!/bin/bash
function hello(){
  echo "Hello World";
  #ech "Hello World";
  return 3
  # return 260
}
hello
echo $?

運行結果

****@****:/******$ bash test.sh
Hello World
3

說明:hello函數指定了返回值為3,由于3在約定的0~255范圍內,所以hello函數的退出狀態值碼從0變更為3(可對比小實驗1)。

小實驗4

指定函數返回值,且函數返回值在約定范圍外

#!/bin/bash
function hello(){
  echo "Hello World";
  #ech "Hello World";
  #return 3
  return 260
}
hello
echo $?

返回結果

****@****:/******$ bash test.sh
Hello World
4

說明:hello函數指定了函數返回值為260,由于260超出了0~255,所以需要對指定的返回值進行一次取模運算,所以退出狀態碼由260變更為4。

小實驗5

指定函數返回值,但返回值前發生命令報錯

#!/bin/bash
function hello(){
  #echo "Hello World";
  ech "Hello World";
  return 3
  #return 260
}
hello
echo $?

執行結果

****@****:/******$ bash test.sh
test.sh: line 4: ech: command not found
3

說明:hello函數中一條命令執行報錯并會影響后續代碼的執行,此時hello的函數返回值為指定的3。

小實驗6

在小實驗5的代碼運行以后再次輸入echo $?得到的還會是3么?

代碼與運行結果

****@****:/******$ cat test.sh
#!/bin/bash
function hello(){
  #echo "Hello World";
  ech "Hello World";
  return 3
  #return 260
}
hello
echo $?


#exit 270

****@****:/******$ bash test.sh
test.sh: line 4: ech: command not found
3
****@****:/******$ echo $?
0

說明:由于hello函數指定了退出狀態碼,所以第一次輸出的退出狀態碼為指定的整數3;第二次退出狀態碼則取腳本中最后一條命令echo $?命令的執行狀態,由于腳本中的echo $?成功執行,所以第二次讀取的退出狀態碼為0。

二、利用退出狀態碼實現命令的重試

思路:

1、 利用退出狀態碼,可以判斷命令是否成功執行

2、 利用循環語句,可以實現命令的重試

3、 如果只設置退出狀態碼為0作為唯一的循環退出條件,可能出現死循環,所以最好增加最大重試次數的控制邏輯

4、$?是一個即使變化的值,如果需要多次使用,最好賦值給一個變量

代碼

#! /bin/sh
count=0   #記錄重試次數
while [ 0 -eq 0 ]
do
  echo ".................. job begin ..................."
#  date
  dat
  flag=$?
  echo "\$?"=${flag}
  if [ ${flag} -eq 0 ]; then
    echo "--------------- job complete ---------------"
    break;
  else
    count=$[ ${count}+1 ]
    if [ ${count} -eq 6 ];then
      echo "--------------- job failed ---------------"
      break;
    fi
    echo "...............error occur, retry in 60 seconds,count=${count} .........."
#    sleep 60
  fi
done

運行結果

****@****:/******$ bash test_while.sh
.................. job begin  ...................
test_while.sh: line 7: dat: command not found
$?=127
...............error occur, retry in 60 seconds,count=1 ..........
.................. job begin  ...................
test_while.sh: line 7: dat: command not found
$?=127
...............error occur, retry in 60 seconds,count=2 ..........
.................. job begin  ...................
test_while.sh: line 7: dat: command not found
$?=127
...............error occur, retry in 60 seconds,count=3 ..........
.................. job begin  ...................
test_while.sh: line 7: dat: command not found
$?=127
...............error occur, retry in 60 seconds,count=4 ..........
.................. job begin  ...................
test_while.sh: line 7: dat: command not found
$?=127
...............error occur, retry in 60 seconds,count=5 ..........
.................. job begin  ...................
test_while.sh: line 7: dat: command not found
$?=127
--------------- job failed ---------------

說明:當退出狀態碼非0時,代碼中“[ 0 -eq 0 ]”和“[${flag}-eq 0 ]”部分實現了重試功能;“[${count}-eq 6 ]”部分實現了對重試邏輯不得超過6次的控制。

三、總結

Shell退出狀態碼:

1、 假如沒有指定返回值,那么會用腳本的最后一個命令的執行狀態,作為退出的狀態碼,支持用exit命令指定退出碼。退出的狀態碼范圍是0~255,如果自定義的退出碼不在范圍內,會對其執行取模運算;

2、 假如執行的是一個有返回值的函數或者程序,那么執行結束的返回值會被當做當前函數或程序的退出狀態值。

感謝各位的閱讀,以上就是“Shell退出狀態碼的方法”的內容了,經過本文的學習后,相信大家對Shell退出狀態碼的方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东光县| 女性| 和田县| 高唐县| 汉寿县| 仁化县| 十堰市| 博兴县| 东乡族自治县| 嘉善县| 乡宁县| 扶风县| 称多县| 无为县| 裕民县| 台前县| 天全县| 杭州市| 赤壁市| 法库县| 大冶市| 筠连县| 山丹县| 通辽市| 辽阳县| 兰溪市| 莱西市| 栖霞市| 平邑县| 庆元县| 新郑市| 浦东新区| 鸡东县| 娄底市| 乌兰察布市| 唐河县| 徐汇区| 哈巴河县| 盐津县| 太仓市| 华亭县|