溫馨提示×

溫馨提示×

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

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

Shell退出狀態(tài)的用法是什么

發(fā)布時間:2021-03-15 11:15:57 來源:億速云 閱讀:298 作者:TREX 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Shell退出狀態(tài)的用法是什么”,在日常操作中,相信很多人在Shell退出狀態(tài)的用法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Shell退出狀態(tài)的用法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

每一條 Shell 命令,不管是 Bash 內(nèi)置命令(例如 cd、echo),還是外部的 Linux 命令(例如 ls、awk),還是自定義的 Shell 函數(shù),當(dāng)它退出(運行結(jié)束)時,都會返回一個比較小的整數(shù)值給調(diào)用(使用)它的程序,這就是命令的退出狀態(tài)(exit statu)。

很多 Linux 命令其實就是一個C語言程序,熟悉C語言的讀者都知道,main() 函數(shù)的最后都有一個return 0,如果程序想在中間退出,還可以使用exit 0,這其實就是C語言程序的退出狀態(tài)。當(dāng)有其它程序調(diào)用這個程序時,就可以捕獲這個退出狀態(tài)。

if 語句的判斷條件,從本質(zhì)上講,判斷的就是命令的退出狀態(tài)。

按照慣例來說,退出狀態(tài)為 0 表示“成功”;也就是說,程序執(zhí)行完成并且沒有遇到任何問題。除 0 以外的其它任何退出狀態(tài)都為“失敗”。

之所以說這是“慣例”而非“規(guī)定”,是因為也會有例外,比如 diff 命令用來比較兩個文件的不同,對于“沒有差別”的文件返回 0,對于“找到差別”的文件返回 1,對無效文件名返回 2。

有編程經(jīng)驗的讀者請注意,Shell 的這個部分與你所熟悉的其它編程語言正好相反:在C語言、C++、Java、Python 中,0 表示“假”,其它值表示“真”。

在 Shell 中,有多種方式取得命令的退出狀態(tài),其中 $? 是最常見的一種。上節(jié)《Shell if else》中使用了 (()) 進行數(shù)學(xué)計算,我們不妨來看一下它的退出狀態(tài)。請看下面的代碼:

#!/bin/bash
read a
read b
(( $a == $b ));
echo "退出狀態(tài):"$?

運行結(jié)果1:
26
26
退出狀態(tài):0

運行結(jié)果2:
17
39
退出狀態(tài):1

退出狀態(tài)和邏輯運算符的組合

Shell if 語句的一個神奇之處是允許我們使用邏輯運算符將多個退出狀態(tài)組合起來,這樣就可以一次判斷多個條件了。

Shell 邏輯運算符

運算符使用格式說明
&&expression1 && expression2邏輯與運算符,當(dāng) expression1 和 expression2 同時成立時,整個表達式才成立。
 
 如果檢測到 expression1 的退出狀態(tài)為 0,就不會再檢測 expression2 了,因為不管 expression2 的退出狀態(tài)是什么,整個表達式必然都是不成立的,檢測了也是多此一舉。
||expression1 || expression2邏輯或運算符,expression1 和 expression2 兩個表達式中只要有一個成立,整個表達式就成立。
 
 如果檢測到 expression1 的退出狀態(tài)為 1,就不會再檢測 expression2 了,因為不管 expression2 的退出狀態(tài)是什么,整個表達式必然都是成立的,檢測了也是多此一舉。
!!expression邏輯非運算符,相當(dāng)于“取反”的效果。如果 expression 成立,那么整個表達式就不成立;如果 expression 不成立,那么整個表達式就成立。

【實例】將用戶輸入的 URL 寫入到文件中。

#!/bin/bash
read filename
read url
if test -w $filename && test -n $url
then
  echo $url > $filename
  echo "寫入成功"
else
  echo "寫入失敗"
fi

在 Shell 腳本文件所在的目錄新建一個文本文件并命名為 urls.txt,然后運行 Shell 腳本,運行結(jié)果為:

urls.txt↙
http://jb51.net/shell/↙
寫入成功

test 是 Shell 內(nèi)置命令,可以對文件或者字符串進行檢測,其中,-w選項用來檢測文件是否存在并且可寫,-n選項用來檢測字符串是否非空。下節(jié)《Shell test》中將會詳細(xì)講解。

>表示重定向,默認(rèn)情況下,echo 向控制臺輸出,這里我們將輸出結(jié)果重定向到文件。

到此,關(guān)于“Shell退出狀態(tài)的用法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI