Linux Bash 中 $? 的詳細(xì)用法實(shí)例小結(jié)
Bash (Bourne Again SHell) 是使用最廣泛的 SHell 腳本語言之一,因?yàn)樗c Unix 和 Linux 系統(tǒng)兼容。它提供了許多內(nèi)置函數(shù)和變量,使腳本編寫更高效,更不容易出錯(cuò)。其中一個(gè)變量是 $?
, 它是 Bash 腳本錯(cuò)誤處理的一個(gè)組成部分。這個(gè)特殊變量保存最后一個(gè)執(zhí)行命令的退出狀態(tài),這對于根據(jù)命令成功或失敗控制腳本流至關(guān)重要。
1. 理解退出狀態(tài)
在類 unix 操作系統(tǒng)中,理解退出狀態(tài)的概念是非常必要的。每當(dāng)命令或程序完成執(zhí)行時(shí),它都會(huì)向 shell 發(fā)送一個(gè)退出狀態(tài)。這個(gè)退出狀態(tài)是一個(gè)整數(shù),表示命令是否成功。
按照慣例,退出狀態(tài)為 0 表示成功,而任何非零值 (1-255) 表示錯(cuò)誤。每個(gè)非零退出狀態(tài)可以對應(yīng)于不同類型的錯(cuò)誤,允許腳本根據(jù)遇到的特定錯(cuò)誤采取各種糾正操作。
2. $? 的作用
$?
變量捕捉到了這種退出狀態(tài)。每次執(zhí)行完命令后,可以通過 $?
獲取執(zhí)行的狀態(tài)。
例如:我們想創(chuàng)建一個(gè)目錄,我們可以使用 $?
檢查目錄創(chuàng)建是否成功。
mkdir /path/to/directory if [ $? -eq 0 ] then echo "Directory was created successfully." else echo "Failed to create the directory." fi
3. 高級用法
退出狀態(tài)也可以直接在條件中使用,而不需要明確引用 $?
,shell 允許使用邏輯操作符 && 和 || 將命令鏈接在一起。&& 操作符僅在前一個(gè)命令成功 (退出狀態(tài)為 0) 時(shí)運(yùn)行下一個(gè)命令,而 || 操作符僅在前一個(gè)命令失敗(退出狀態(tài)非零) 時(shí)運(yùn)行下一個(gè)命令。
下面我們使用這些操作符重寫前面的腳本:
mkdir /path/to/directory && echo "Directory was created successfully." || echo "Failed to create the directory."
這行代碼與前面的腳本相同,但更簡潔。
4. 在函數(shù)中使用退出狀態(tài)
正如命令和程序返回退出狀態(tài)一樣,bash 腳本中的函數(shù)也可以返回退出狀態(tài),這進(jìn)一步增加了 $?
的功能。當(dāng)函數(shù)完成時(shí),它可以返回退出狀態(tài)以指示成功或失敗,或者向腳本的其余部分發(fā)出特定條件的信號。
下面是一個(gè)使用退出狀態(tài)的函數(shù)示例
function check_directory { if [ -d "$1" ] then return 0 else return 1 fi } check_directory /path/to/directory if [ $? -eq 0 ] then echo "Directory exists." else echo "Directory does not exist." fi
5. 根據(jù)特定的退出狀態(tài)執(zhí)行操作
非零退出狀態(tài)可以提供有關(guān)所發(fā)生錯(cuò)誤類型的詳細(xì)信息。例如,在某些命令中,退出狀態(tài)為 1 可能表示小問題,而退出狀態(tài)為 2 則表示嚴(yán)重錯(cuò)誤。通過捕獲和處理這些特定的狀態(tài),您的腳本可以以不同的方式處理不同的錯(cuò)誤情況。
下面是如何使用特定退出狀態(tài)的簡單示例
command case $? in 0) echo "Command succeeded." ;; 1) echo "Command failed due to minor problem." ;; 2) echo "Command failed due to severe problem." ;; *) echo "An unknown error occurred." ;; esac
6. 注意事項(xiàng)
(1) $?
只保存最后執(zhí)行的命令的退出狀態(tài)。如果在檢查 $?
之前執(zhí)行了其他命令,退出狀態(tài)將被覆蓋。
(2) 并非所有命令和程序都遵循“0為成功”和“非0為錯(cuò)誤”的約定。有些可能使用不同的狀態(tài)碼,或者沒有準(zhǔn)確地使用退出狀態(tài)。經(jīng)常檢查您正在使用的命令的手冊頁或其他文檔,以了解不同的退出狀態(tài)代表什么
到此這篇關(guān)于Linux Bash 中 $? 的詳細(xì)用法的文章就介紹到這了,更多相關(guān)Linux Bash $? 用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Linux Bash腳本中的IFS的作用
- 詳解gitBash中使用Linux中的tree命令
- linux所有命令都失效顯示bash: xxxxx: command not found的解決
- linux用戶source .bashrc或.profile找不到文件的解決
- Linux系統(tǒng)中.bash_profile文件詳解
- Linux下docker 容器退出bash的兩種實(shí)現(xiàn)方法
- 淺析Linux之bash反彈shell原理
- Linux下環(huán)境變量配置方法小結(jié)(.bash_profile和.bashrc的區(qū)別)
- Linux中Bash環(huán)境變量的配置方法
- Linux bash:./xxx:無法執(zhí)行二進(jìn)制文件報(bào)錯(cuò)
相關(guān)文章
Shell腳本實(shí)現(xiàn)把進(jìn)程負(fù)載均衡到多核CPU中
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)把進(jìn)程負(fù)載均衡到多核CPU中,可以把進(jìn)程指定運(yùn)行在某個(gè)CPU中,需要的朋友可以參考下2014-06-06用shell腳本和c語言將大寫字母轉(zhuǎn)成小寫的代碼
最近在學(xué)shell編程,在網(wǎng)上看到tr '[:upper:]' '[:lower:]' 可以把字符串中大寫字母轉(zhuǎn)換成小寫字母,我就在這個(gè)的基礎(chǔ)上寫了一個(gè)腳本來自己學(xué)習(xí)學(xué)習(xí)2013-08-08linux shell腳本對未定義變量的判斷以及if的用法詳解
今天小編就為大家分享一篇linux shell腳本對未定義變量的判斷以及if的用法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07Linux系統(tǒng)links和elinks命令的基本使用教程
links和elinks都是Linux系統(tǒng)下的命令行瀏覽器,主要用于在終端中查看網(wǎng)頁內(nèi)容,這篇文章主要介紹了Linux系統(tǒng)之links和elinks命令的基本使用,需要的朋友可以參考下2023-09-09Shell腳本之Expect免交互的實(shí)現(xiàn)
這篇文章主要介紹了Shell腳本之Expect免交互的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10shell腳本實(shí)現(xiàn)拷貝大文件顯示百分比的代碼分享
這篇文章主要介紹了shell腳本實(shí)現(xiàn)拷貝大文件顯示百分比的代碼分享,需要的朋友可以參考下2014-08-08shell腳本操作oracle刪除表空間、創(chuàng)建表空間、刪除用戶
這篇文章主要介紹了使用shell腳本操作oracle刪除表空間、創(chuàng)建表空間、刪除用戶的方法,需要的朋友可以參考下2014-03-03