最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell退出狀態(tài)碼及其應(yīng)用詳解

 更新時(shí)間:2020年12月08日 09:57:50   作者:數(shù)據(jù)挖掘  
這篇文章主要介紹了Shell退出狀態(tài)碼及其應(yīng)用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

典型退出狀態(tài)碼及其含義

退出狀態(tài)碼

含義

0

命令運(yùn)行成功

1

通知未知錯誤

2

誤用shell命令

126

命令不可執(zhí)行

127

沒有找到命令

128

無效退出參數(shù)

128+x

linux信號x的嚴(yán)重錯誤

130

命令通過Ctrl+C終止

255

退出狀態(tài)碼越界

一、退出狀態(tài)碼的小實(shí)驗(yàn)

小實(shí)驗(yàn)1

未指定函數(shù)返回值,且函數(shù)最后一條命令執(zhí)行成功

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

執(zhí)行結(jié)果

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

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

小實(shí)驗(yàn)2

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

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

執(zhí)行結(jié)果

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

說明:此時(shí)未指定返回值,所以函數(shù)以ech "Hello World";的執(zhí)行狀態(tài)作為hello函數(shù)的退出狀態(tài)。執(zhí)行失敗,且未約定特定的返回值用于標(biāo)識無效指令返回值,所以此時(shí)默認(rèn)以127作為退出狀態(tài)返回值。

小實(shí)驗(yàn)3

指定函數(shù)返回值,且函數(shù)返回值在約定范圍內(nèi)

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

運(yùn)行結(jié)果

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

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

小實(shí)驗(yàn)4

指定函數(shù)返回值,且函數(shù)返回值在約定范圍外

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

返回結(jié)果

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

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

小實(shí)驗(yàn)5

指定函數(shù)返回值,但返回值前發(fā)生命令報(bào)錯

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

執(zhí)行結(jié)果

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

說明:hello函數(shù)中一條命令執(zhí)行報(bào)錯并會影響后續(xù)代碼的執(zhí)行,此時(shí)hello的函數(shù)返回值為指定的3。

小實(shí)驗(yàn)6

在小實(shí)驗(yàn)5的代碼運(yùn)行以后再次輸入echo $?得到的還會是3么?

代碼與運(yùn)行結(jié)果

****@****:/******$ 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函數(shù)指定了退出狀態(tài)碼,所以第一次輸出的退出狀態(tài)碼為指定的整數(shù)3;第二次退出狀態(tài)碼則取腳本中最后一條命令echo $?命令的執(zhí)行狀態(tài),由于腳本中的echo $?成功執(zhí)行,所以第二次讀取的退出狀態(tài)碼為0。

二、利用退出狀態(tài)碼實(shí)現(xiàn)命令的重試

思路:

1、 利用退出狀態(tài)碼,可以判斷命令是否成功執(zhí)行

2、 利用循環(huán)語句,可以實(shí)現(xiàn)命令的重試

3、 如果只設(shè)置退出狀態(tài)碼為0作為唯一的循環(huán)退出條件,可能出現(xiàn)死循環(huán),所以最好增加最大重試次數(shù)的控制邏輯

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

代碼

#! /bin/sh
count=0   #記錄重試次數(shù)
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

運(yùn)行結(jié)果

****@****:/******$ 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 ---------------

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

三、總結(jié)

Shell退出狀態(tài)碼:

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

2、 假如執(zhí)行的是一個(gè)有返回值的函數(shù)或者程序,那么執(zhí)行結(jié)束的返回值會被當(dāng)做當(dāng)前函數(shù)或程序的退出狀態(tài)值。

到此這篇關(guān)于Shell退出狀態(tài)碼及其應(yīng)用詳解的文章就介紹到這了,更多相關(guān)Shell退出狀態(tài)碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Cygwin下安裝vim后,vim中退格鍵無法正常使用的解決方法

    Cygwin下安裝vim后,vim中退格鍵無法正常使用的解決方法

    下面小編就為大家?guī)硪黄狢ygwin下安裝vim后,vim中退格鍵無法正常使用的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Linux下啟動tomcat的方法

    Linux下啟動tomcat的方法

    tomcat是隨機(jī)啟動的,所以在開啟服務(wù)器的時(shí)候要手動開啟tomcat,不然沒法訪問,本文給大家介紹linux下啟動tomcat的方法,對linux啟動tomcat的相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Linux tar 命令用法實(shí)例詳解

    Linux tar 命令用法實(shí)例詳解

    利用 tar 命令,可以把一大堆的文件和目錄全部打包成一個(gè)文件,這對于備份文件或?qū)讉€(gè)文件組合成為一個(gè)文件以便于網(wǎng)絡(luò)傳輸是非常有用的。這篇文章主要介紹了Linux tar 命令用法詳解,需要的朋友可以參考下
    2018-03-03
  • shell腳本實(shí)現(xiàn)linux系統(tǒng)文件完整性檢測

    shell腳本實(shí)現(xiàn)linux系統(tǒng)文件完整性檢測

    這篇文章主要介紹了shell腳本實(shí)現(xiàn)linux系統(tǒng)文件完整性檢測,本文給出的腳本使用對比MD5的方法,檢測linux系統(tǒng)文件是否被替換等問題,需要的朋友可以參考下
    2014-12-12
  • Shell腳本實(shí)現(xiàn)生成SSL自簽署證書

    Shell腳本實(shí)現(xiàn)生成SSL自簽署證書

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)生成SSL自簽署證書,本文直接給出實(shí)現(xiàn)代碼,代碼中包含大量注釋,需要的朋友可以參考下
    2015-01-01
  • 使用shell腳本采集系統(tǒng)cpu、內(nèi)存、磁盤、網(wǎng)絡(luò)等信息

    使用shell腳本采集系統(tǒng)cpu、內(nèi)存、磁盤、網(wǎng)絡(luò)等信息

    這篇文章主要介紹了使用shell腳本采集系統(tǒng)cpu、內(nèi)存、磁盤、網(wǎng)絡(luò)等信息,需要的朋友可以參考下
    2014-05-05
  • Shell日志分析常用命令和例子

    Shell日志分析常用命令和例子

    這篇文章主要介紹了Shell日志分析常用命令和例子,本文重點(diǎn)在一樣實(shí)現(xiàn)日志分析命令語句例子上,本文給出了10條常用的分析實(shí)例,需要的朋友可以參考下
    2014-12-12
  • Shell腳本調(diào)用另一個(gè)腳本的三種方法

    Shell腳本調(diào)用另一個(gè)腳本的三種方法

    這篇文章主要介紹了Shell腳本調(diào)用另一個(gè)腳本的三種方法,幫助大家更好的理解和學(xué)習(xí)shell,感興趣的朋友可以了解下
    2020-08-08
  • Shell別名的使用方法及管理技巧小結(jié)

    Shell別名的使用方法及管理技巧小結(jié)

    別名是一種將復(fù)雜命令簡化為簡單替代的方法,可用于簡化命令,本文就來介紹一下Shell別名的使用方法及管理技巧小結(jié),感興趣的可以了解一下
    2023-09-09
  • Linux中rpm命令用法詳解

    Linux中rpm命令用法詳解

    rpm命令是用于在基于RPM包管理系統(tǒng)的Linux發(fā)行版中安裝、查詢、升級和刪除軟件包的命令行工具,本文講給大家詳細(xì)的介紹一下Linux?rpm命令的使用方法,感興趣的同學(xué)跟著小編一起來看看吧
    2023-08-08

最新評論

涿鹿县| 怀化市| 新邵县| 响水县| 珠海市| 济宁市| 祁东县| 莱阳市| 宁安市| 运城市| 额敏县| 尉氏县| 富宁县| 朝阳县| 纳雍县| 石城县| 白朗县| 东莞市| 苏尼特右旗| 开远市| 外汇| 秭归县| 视频| 汉寿县| 兴文县| 绥江县| 呈贡县| 屏东市| 赤峰市| 抚顺市| 嵊州市| 黄山市| 镇江市| 车险| 荃湾区| 大安市| 芜湖市| 滁州市| 墨竹工卡县| 惠东县| 扎兰屯市|