C語言中文網 目錄
Shell腳本
1 Shell是什么
2 Shell是運維人員必須掌握的技能
3 常用的Shell有哪些
4 進入Shell的兩種方式
5 Shell命令的基本格式
6 Shell命令的本質到底是什么?如何自己實現一個命令?
7 Shell命令的選項和參數在本質上是什么
8 Shell命令提示符
9 修改命令提示符
10 第一個Shell腳本
11 執行Shell腳本
12 Shell四種運行方式(啟動方式)
13 Shell配置文件(配置腳本)的加載
14 如何編寫自己的Shell配置文件?
15 Shell變量
16 Shell變量的作用域
17 Shell命令替換
18 Shell位置參數
19 Shell特殊變量
20 Shell $*和$@的區別
21 Shell $?
22 Shell字符串詳解
23 Shell字符串拼接
24 Shell字符串截取
25 Shell數組
26 Shell獲取數組長度
27 Shell數組拼接
28 Shell刪除數組元素
29 Shell關聯數組
30 Shell內建命令
31 Shell alias命令
32 Shell echo命令
33 Shell read命令
34 Shell exit命令
35 Shell declare和typeset命令
36 Shell數學計算
37 Shell (())
38 Shell let命令
39 Shell $[]
40 Shell expr命令
41 Linux bc命令
42 Shell declare -i
43 Shell if else
44 Shell退出狀態
45 Shell test命令
46 Shell [[]]
47 Shell case in
48 Shell while
49 Shell until
50 Shell for
51 Shell select in
52 Shell break和continue
53 Shell函數
54 Shell函數參數
55 Shell函數返回值精講
56 Shell重定向
57 Linux中的文件描述符到底是什么?
58 結合文件描述符談重定向,徹底理解重定向的本質!
59 使用exec命令操作文件描述符
60 Shell代碼塊重定向
61 Shell Here Document
62 Shell Here String
63 Shell組命令
64 Shell進程替換
65 Linux管道
66 子Shell和子進程到底有什么區別?
67 如何檢測子Shell和子進程?
68 Shell過濾器
69 Linux中的信號
70 Bash Shell中的信號
71 Linux進程是什么
72 Shell模塊化(把代碼分散到多個腳本文件中)
首頁 > Shell腳本 閱讀:2,307

Shell退出狀態

< 上一頁Shell if else Shell test命令下一頁 >

每一條 Shell 命令,不管是 Bash 內置命令(例如 cd、echo),還是外部的 Linux 命令(例如 ls、awk),還是自定義的 Shell 函數,當它退出(運行結束)時,都會返回一個比較小的整數值給調用(使用)它的程序,這就是命令的退出狀態(exit statu)
很多 Linux 命令其實就是一個C語言程序,熟悉C語言的讀者都知道,main() 函數的最后都有一個return 0,如果程序想在中間退出,還可以使用exit 0,這其實就是C語言程序的退出狀態。當有其它程序調用這個程序時,就可以捕獲這個退出狀態。
if 語句的判斷條件,從本質上講,判斷的就是命令的退出狀態。

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

之所以說這是“慣例”而非“規定”,是因為也會有例外,比如 diff 命令用來比較兩個文件的不同,對于“沒有差別”的文件返回 0,對于“找到差別”的文件返回 1,對無效文件名返回 2。
有編程經驗的讀者請注意,Shell 的這個部分與你所熟悉的其它編程語言正好相反:在C語言、C++JavaPython 中,0 表示“假”,其它值表示“真”。
在 Shell 中,有多種方式取得命令的退出狀態,其中 $? 是最常見的一種。上節《Shell if else》中使用了 (()) 進行數學計算,我們不妨來看一下它的退出狀態。請看下面的代碼:
#!/bin/bash

read a
read b

(( $a == $b ));

echo "退出狀態:"$?
運行結果1:
26
26
退出狀態:0

運行結果2:
17
39
退出狀態:1

退出狀態和邏輯運算符的組合

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

Shell 邏輯運算符
運算符 使用格式 說明
&& expression1 && expression2 邏輯與運算符,當 expression1 和 expression2 同時成立時,整個表達式才成立。

如果檢測到 expression1 的退出狀態為 0,就不會再檢測 expression2 了,因為不管 expression2 的退出狀態是什么,整個表達式必然都是不成立的,檢測了也是多此一舉。
|| expression1 || expression2 邏輯或運算符,expression1 和 expression2 兩個表達式中只要有一個成立,整個表達式就成立。

如果檢測到 expression1 的退出狀態為 1,就不會再檢測 expression2 了,因為不管 expression2 的退出狀態是什么,整個表達式必然都是成立的,檢測了也是多此一舉。
! !expression 邏輯非運算符,相當于“取反”的效果。如果 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 腳本,運行結果為:
urls.txt↙
http://www.frifeb11.com/shell/↙
寫入成功

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

>表示重定向,默認情況下,echo 向控制臺輸出,這里我們將輸出結果重定向到文件。
< 上一頁Shell if else Shell test命令下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo