亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

shell中set?-u、set?-x、set?-e的使用

 更新時(shí)間:2025年06月20日 11:23:57   作者:不穿鎧甲的穿山甲  
本文主要介紹了shell中set?-u、set?-x、set?-e的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Bash 腳本設(shè)置命令:

set -u
set -x
set -e

是 編寫高質(zhì)量、健壯 Shell 腳本時(shí)常用的調(diào)試和錯(cuò)誤控制選項(xiàng)。下面我們逐一解釋它們的作用、使用場(chǎng)景以及注意事項(xiàng)。

? 1. set -u:防止使用未定義變量

?? 作用:

  • 啟用后,如果腳本中引用了一個(gè)沒有定義的變量,Bash 會(huì)報(bào)錯(cuò)并退出。
  • 相當(dāng)于“strict mode”下的變量檢查。

?? 示例:

set -u
echo "$NAME"  # 如果 NAME 未定義,腳本會(huì)報(bào)錯(cuò)并退出

? 報(bào)錯(cuò)示例輸出:

./script.sh: line 2: NAME: unbound variable

? 推薦使用場(chǎng)景:

  • 避免因拼寫錯(cuò)誤或邏輯疏漏導(dǎo)致變量未賦值卻使用;
  • 提高腳本的健壯性和可維護(hù)性。

? 2. set -x:開啟調(diào)試模式(打印執(zhí)行命令)

?? 作用:

  • 啟用后,Shell 會(huì)在執(zhí)行每條命令前打印出實(shí)際執(zhí)行的內(nèi)容(包括變量展開后的結(jié)果)。
  • 對(duì)調(diào)試非常有用。

?? 示例:

set -x
name="Alice"
echo "Hello, $name"

? 輸出示例:

+ name=Alice
+ echo 'Hello, Alice'
Hello, Alice

? 推薦使用場(chǎng)景:

  • 調(diào)試腳本執(zhí)行流程;
  • 查看變量是否按預(yù)期展開;
  • 理解復(fù)雜邏輯分支的執(zhí)行路徑。

?? 關(guān)閉調(diào)試(可選):

set +x

? 3. set -e:遇到錯(cuò)誤立即退出

?? 作用:

  • 啟用后,如果某條命令返回非零狀態(tài)碼(即執(zhí)行失?。?,整個(gè)腳本就會(huì)立即退出。

?? 示例:

set -e
false
echo "This will not be printed"

? 行為說明:

  • 執(zhí)行到 false 命令(返回 1)后,腳本直接退出,不會(huì)繼續(xù)執(zhí)行下一行。

?? 注意事項(xiàng):

  • 某些命令即使失敗也不應(yīng)中斷腳本(如 grep 沒找到內(nèi)容返回 1 是正常行為);
  • 可以通過添加 || true 來忽略某些命令的失?。?div id="ublnpf9mb" class="jb51code">
    grep "pattern" file.txt || true
    

? 推薦使用場(chǎng)景:

  • 防止腳本在某個(gè)步驟失敗后繼續(xù)運(yùn)行,避免后續(xù)操作基于錯(cuò)誤狀態(tài)進(jìn)行;
  • 在 CI/CD 或自動(dòng)化部署腳本中尤為重要。

? 4. set -o pipefail 管道行為

set -o pipefail 是 Bash shell 中的一個(gè)選項(xiàng),用于改變管道(pipe)的錯(cuò)誤處理行為。理解它之前,我們先回顧一下 Unix 管道 的默認(rèn)行為。

?? 默認(rèn)情況下,管道的行為是怎樣的?

在 Bash 中,默認(rèn)情況下,管道中只有最后一個(gè)命令的退出狀態(tài)會(huì)被作為整個(gè)管道的結(jié)果,前面的命令即使失敗(返回非零狀態(tài)),也不會(huì)影響整體結(jié)果。

示例:

command1 | command2
  • 如果 command1 失敗了(返回非零退出碼),但 command2 成功執(zhí)行,那么整個(gè)管道的退出狀態(tài)就是 0(成功)
  • 這意味著:你可能不知道前面的命令已經(jīng)失敗了

當(dāng)你啟用這個(gè)選項(xiàng)后:

set -o pipefail

Bash 會(huì)改變管道的退出狀態(tài)判斷方式:

如果管道中的任意一個(gè)命令失敗,整個(gè)管道就視為失敗。

這樣可以確保你在寫腳本時(shí)能及時(shí)發(fā)現(xiàn)某個(gè)環(huán)節(jié)出錯(cuò),避免繼續(xù)執(zhí)行后續(xù)操作。

舉個(gè)例子說明區(qū)別

情況 1:默認(rèn)行為(不設(shè)置 pipefail)

false | true
echo $?  # 輸出: 0 (表示成功)
  • false 返回狀態(tài)碼 1(失?。?/li>
  • true 返回狀態(tài)碼 0(成功)
  • 整體返回 0,看起來像是“成功”了

情況 2:啟用 pipefail 后

set -o pipefail
false | true
echo $?  # 輸出: 1 (表示失?。?
  • 雖然 true 成功了,但因?yàn)?nbsp;false 失敗了,所以整個(gè)管道被認(rèn)為是失敗的

為什么這個(gè)選項(xiàng)有用?

在編寫 Shell 腳本時(shí),尤其是自動(dòng)化任務(wù)、CI/CD 流水線、日志分析等場(chǎng)景中,我們希望:

  • 一旦某一步出錯(cuò),整個(gè)流程就應(yīng)該終止或報(bào)告錯(cuò)誤
  • 不要讓錯(cuò)誤被隱藏

例如:

grep "error" /var/log/syslog | wc -l
  • 如果 /var/log/syslog 不存在,grep 報(bào)錯(cuò)
  • 但 wc -l 還是可以運(yùn)行(輸入為空),返回 0
  • 如果你不啟用 pipefail,腳本可能會(huì)誤以為一切正常!

??? 如何使用?

在腳本開頭加上:

#!/bin/bash
set -o pipefail

或者簡寫為:

set -o pipefail

可以和其他常用選項(xiàng)一起使用:

set -euo pipefail

解釋:

  • -e:遇到錯(cuò)誤立即退出
  • -u:對(duì)未定義變量報(bào)錯(cuò)
  • -o pipefail:如上所述,管道中任一命令失敗即失敗

? 總結(jié)一句話:

set -o pipefail 讓你可以在 Shell 腳本中更準(zhǔn)確地檢測(cè)管道中是否發(fā)生了錯(cuò)誤,防止忽略失敗命令帶來的潛在問題。

如果你正在寫一個(gè)需要健壯性、可維護(hù)性的腳本,建議始終開啟這個(gè)選項(xiàng) ??

?? 綜合寫法(推薦放在腳本開頭)

#!/bin/bash
set -euo pipefail

這是 Shell 腳本中一個(gè)非常經(jīng)典的開頭寫法,含義如下:

選項(xiàng)含義
-e出錯(cuò)退出
-u使用未定義變量時(shí)報(bào)錯(cuò)
-o pipefail管道中只要有一個(gè)命令失敗,整個(gè)管道就視為失敗

?? set -euo pipefail 是 Google、Airbnb、Dropbox 等公司內(nèi)部 Shell 編碼規(guī)范中推薦的標(biāo)準(zhǔn)開頭。

? 小結(jié)表格

設(shè)置作用是否推薦
set -u防止使用未定義變量? 推薦
set -x開啟調(diào)試輸出? 調(diào)試時(shí)推薦
set -e出現(xiàn)錯(cuò)誤立即退出? 推薦
set -o pipefail管道失敗整體視為失敗? 強(qiáng)烈推薦

? 實(shí)際腳本模板建議

#!/bin/bash
set -euo pipefail

# Your script logic here
name="World"
echo "Hello, $name"

# Simulate a failure
false

echo "This line will NOT be executed."

如果你正在編寫一個(gè)自動(dòng)化部署、備份、測(cè)試等關(guān)鍵任務(wù)的 Shell 腳本,強(qiáng)烈建議加上這些設(shè)置,可以極大提高腳本的可靠性和可讀性。

到此這篇關(guān)于shell中set -u、set -x、set -e的使用的文章就介紹到這了,更多相關(guān)shell set -u、set -x、set -e內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • git 刪除分支和回滾的實(shí)例詳解

    git 刪除分支和回滾的實(shí)例詳解

    這篇文章主要介紹了git 刪除分支和回滾的實(shí)例詳解的相關(guān)資料,希望通過本文大家能理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • linux命令切換目錄的使用方法

    linux命令切換目錄的使用方法

    切換目錄的方式有很多種,最常用的莫過于cd 命令了,這里介紹四個(gè)命令pushd,popd,dirs,cd -的使用方法
    2014-01-01
  • 一文教會(huì)你如何使用grep跨多行查找模式匹配

    一文教會(huì)你如何使用grep跨多行查找模式匹配

    grep匹配是linux的最常用的shell命令之一,這篇文章主要給大家介紹了關(guān)于如何使用grep跨多行查找模式匹配的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 編寫B(tài)ash Shell通過gnuplot繪制系統(tǒng)性能數(shù)據(jù)圖的方法

    編寫B(tài)ash Shell通過gnuplot繪制系統(tǒng)性能數(shù)據(jù)圖的方法

    這篇文章主要介紹了編寫B(tài)ash Shell通過gnuplot繪制系統(tǒng)性能數(shù)據(jù)圖的方法,做到可視化數(shù)據(jù)收集,需要的朋友可以參考下
    2015-07-07
  • shell腳本編程之?dāng)?shù)組

    shell腳本編程之?dāng)?shù)組

    數(shù)組就是相同數(shù)據(jù)類型的元素按一定順序排列的集合,就是把有限個(gè)類型相同的變量用一個(gè)名字命名,然后用編號(hào)區(qū)分他們的變量的集合,這個(gè)名字稱為數(shù)組名,編號(hào)稱為下標(biāo)
    2016-01-01
  • 如何在Linux下修改Mysql的用戶(root)密碼

    如何在Linux下修改Mysql的用戶(root)密碼

    這篇文章主要介紹了如何在Linux下修改Mysql的用戶(root)密碼,分兩種情況:第一種當(dāng)擁有原來的mysql的root密碼,第二種情況忘記原來的mysql的root的密碼,需要的朋友可以參考下
    2015-08-08
  • Linux tar 命令出現(xiàn) Cowardly refusing to create an empty archive 錯(cuò)誤解決辦法

    Linux tar 命令出現(xiàn) Cowardly refusing to create an empty archive

    這篇文章主要介紹了Linux tar 命令出現(xiàn) Cowardly refusing to create an empty archive 錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 一文掌握Linux命令lsscsi

    一文掌握Linux命令lsscsi

    想要弄明白lsscsi命令,首先我們必須搞清楚什么是SCSI,以及常見的硬盤接口,常用的硬盤參數(shù),今天通過本文給大家介紹下Linux命令lsscsi,需要的朋友可以參考下
    2022-09-09
  • Linux下top命令之后的內(nèi)容及其作用詳解

    Linux下top命令之后的內(nèi)容及其作用詳解

    這篇文章主要為大家介紹了Linux下top命令之后的內(nèi)容及其作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Shell中使用grep、sed正則提取和替換字符串

    Shell中使用grep、sed正則提取和替換字符串

    這篇文章主要介紹了Shell中使用grep、sed正則提取和替換字符串,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論