欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux中shell腳本發(fā)現(xiàn)BUG和提高效率的神器—"set"方法

 更新時(shí)間:2025年08月30日 12:00:19   作者:Linux隨筆錄  
set是 Linux Shell 中的一個(gè)內(nèi)置命令,用于設(shè)置或顯示 shell 的選項(xiàng)和環(huán)境變量,以下是關(guān)于 set 命令的基礎(chǔ)概念、優(yōu)勢(shì)、類(lèi)型、應(yīng)用場(chǎng)景以及常見(jiàn)問(wèn)題的解答,嵌入式Linux研發(fā)人員和運(yùn)維人員,都會(huì)或多或少去查看編寫(xiě) shell 腳本,今天教大家set關(guān)鍵字方法輕松分析遇到的問(wèn)題

      set是 Linux Shell 中的一個(gè)內(nèi)置命令,用于設(shè)置或顯示 shell 的選項(xiàng)和環(huán)境變量。以下是關(guān)于 set 命令的基礎(chǔ)概念、優(yōu)勢(shì)、類(lèi)型、應(yīng)用場(chǎng)景以及常見(jiàn)問(wèn)題的解答。不管我們是做嵌入式Linux研發(fā)人員,還是做運(yùn)維人員,都會(huì)或多或少去查看編寫(xiě) shell 腳本,你遇到問(wèn)題是否也只會(huì)用一行一行echo去查看腳本分析問(wèn)題。這樣效率過(guò)于慢,今天教大家set關(guān)鍵字方法輕松分析遇到的問(wèn)題

set的常用命令選項(xiàng)

set 用于設(shè)置或取消設(shè)置 Shell 選項(xiàng)、位置參數(shù),以及顯示變量和函數(shù)定義。它的用法非常廣泛,主要包括以下幾個(gè)方面:

設(shè)置/取消 Shell 選項(xiàng)

  • 顯示變量‌:不帶參數(shù)時(shí),set會(huì)列出當(dāng)前Shell的所有變量(包括環(huán)境變量)和函數(shù)定義13。
  • 設(shè)置選項(xiàng)‌:通過(guò)-+啟用/禁用Shell特性(如調(diào)試、錯(cuò)誤處理等)14。
    • -:開(kāi)啟選項(xiàng)(如set -x啟用命令調(diào)試)
    • +:關(guān)閉選項(xiàng)(如set +x關(guān)閉調(diào)試)14。

set 可以啟用或禁用 Shell 的運(yùn)行選項(xiàng),語(yǔ)法如下:

set -<option>  # 啟用選項(xiàng)
set +<option>  # 禁用選項(xiàng)

常用選項(xiàng)

設(shè)置位置參數(shù)

set 可以重新設(shè)置腳本的位置參數(shù):

set -- arg1 arg2 arg3  # 設(shè)置 $1="arg1", $2="arg2", $3="arg3"

示例

set -- "first" "second" "third"
echo "$1"  # 輸出 "first"
echo "$2"  # 輸出 "second"

執(zhí)行腳本結(jié)果如下

顯示所有變量和函數(shù)

不帶參數(shù)的 set 會(huì)顯示所有變量:

set  # 顯示所有變量

ubuntu上的環(huán)境變量都可以打印出來(lái),腳本里的變量打印不出來(lái)

處理帶空格的參數(shù)

set 可以正確處理帶空格的參數(shù):

set -- "Hello World" "Bash Script"
echo "$1"  # 輸出 "Hello World"(保留引號(hào))

執(zhí)行腳本結(jié)果如下

調(diào)試腳本

set -x 和 set -v 常用于調(diào)試

#!/bin/bash
set -x  # 打印執(zhí)行的命令
echo "Debug mode"
set +x  # 關(guān)閉調(diào)試

打開(kāi)調(diào)試效果如下

恢復(fù)默認(rèn)選項(xiàng)

set -  # 恢復(fù)所有選項(xiàng)為默認(rèn)值

顧名思義就是將之前的 set 的參數(shù)改回默認(rèn)選項(xiàng)

錯(cuò)誤退出

set -e 常用于一個(gè)命令返回一個(gè)非0退出狀態(tài)值(失敗),就立刻退出

下面舉一個(gè)單獨(dú)使用set -e的例子

#!/bin/bash
set -e  # 啟用錯(cuò)誤退出
 
echo "第一行正常執(zhí)行"
ls /home/forlinx/1.txt  # 這個(gè)命令會(huì)失敗
echo "這行不會(huì)被執(zhí)行,因?yàn)槟_本已經(jīng)退出"

執(zhí)行腳本結(jié)果如下

會(huì)發(fā)現(xiàn)腳本最后一行echo沒(méi)有打印出來(lái)

set -E 常和trap函數(shù)結(jié)合一起使用更容易發(fā)現(xiàn)腳本里哪條指令發(fā)生錯(cuò)誤

下面舉個(gè)set -E的例子

#!/bin/bash
set -eE  # 同時(shí)啟用錯(cuò)誤退出和錯(cuò)誤追蹤

# 設(shè)置錯(cuò)誤處理函數(shù)
trap'echo "錯(cuò)誤捕獲: 在行號(hào) $LINENO, 命令: $BASH_COMMAND, 狀態(tài)碼: $?"' ERR

my_function() {
    echo"在函數(shù)內(nèi)執(zhí)行"
    ls /不存在的目錄  # 這里會(huì)失敗
    echo"這行不會(huì)執(zhí)行"
}

echo"腳本開(kāi)始"
my_function
echo"這行也不會(huì)執(zhí)行"

看下執(zhí)行腳本結(jié)果

會(huì)發(fā)現(xiàn)打印兩次錯(cuò)誤發(fā)生在: ls /home/pan 便于開(kāi)發(fā)者更容易發(fā)現(xiàn)到哪條指令發(fā)生錯(cuò)誤

在項(xiàng)目中,set -eset -E更多是在一起使用,便于更方便調(diào)試腳本,這樣更快速定位到哪條指令發(fā)生問(wèn)題退出腳本

#!/bin/bash
set -eE  # 同時(shí)啟用錯(cuò)誤退出和錯(cuò)誤追蹤

# 設(shè)置錯(cuò)誤處理函數(shù)
trap'echo "錯(cuò)誤捕獲: 在行號(hào) $LINENO, 命令: $BASH_COMMAND, 狀態(tài)碼: $?"' ERR

my_function() {
    echo"在函數(shù)內(nèi)執(zhí)行"
    ls /不存在的目錄  # 這里會(huì)失敗
    echo"這行不會(huì)執(zhí)行"
}

echo"腳本開(kāi)始"
my_function
echo"這行也不會(huì)執(zhí)行"

查看腳本執(zhí)行結(jié)果

會(huì)發(fā)現(xiàn)確實(shí)比set -e時(shí)錯(cuò)誤提示更加明顯,會(huì)多提示一行錯(cuò)誤發(fā)生的指令

注意事項(xiàng)‌

  • 選項(xiàng)可組合使用(如set -eu);
  • 子Shell繼承父Shell的選項(xiàng)設(shè)置,但修改不影響父Shell;
  • 恢復(fù)默認(rèn)選項(xiàng)可用set +選項(xiàng)(如set +x)。

總結(jié)

本篇我們學(xué)會(huì)了常用的set關(guān)鍵字語(yǔ)法可以讓你的 shell 腳本提高更改 bug 調(diào)試效率,本篇學(xué)會(huì)的同學(xué)可以一鍵支持三連下,歡迎關(guān)注公眾號(hào)[Linux隨筆錄](méi),持續(xù)分享干貨!

到此這篇關(guān)于Linux中shell腳本發(fā)現(xiàn)BUG和提高效率的神器—"set"方法的文章就介紹到這了,更多相關(guān)Linux中shell腳本"set"方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • shell命令行參數(shù)用法簡(jiǎn)介

    shell命令行參數(shù)用法簡(jiǎn)介

    本文介紹了shell命令行參數(shù)的用法,對(duì)于普通腳本語(yǔ)言諸如perl python等,寫(xiě)一個(gè)腳本程序,包裝命令行參數(shù)時(shí),一般都是用getopt之類(lèi)的;c語(yǔ)言也類(lèi)似
    2014-04-04
  • shell腳本查看k8s日志介紹

    shell腳本查看k8s日志介紹

    大家好,本篇文章主要講的是shell腳本查看k8s日志介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 淺析使用?Auditbeat?模塊監(jiān)控?shell?命令的問(wèn)題

    淺析使用?Auditbeat?模塊監(jiān)控?shell?命令的問(wèn)題

    Auditbeat Audited 模塊可以用來(lái)監(jiān)控所有用戶在系統(tǒng)上執(zhí)行的 shell 命令,在終端用戶偶爾才會(huì)登錄的服務(wù)器上,通常需要進(jìn)行監(jiān)控,本文給大家介紹使用?Auditbeat?模塊監(jiān)控?shell?命令的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-02-02
  • shell進(jìn)程監(jiān)控的實(shí)現(xiàn)(ps、sleep、kill)

    shell進(jìn)程監(jiān)控的實(shí)現(xiàn)(ps、sleep、kill)

    本文主要介紹了shell進(jìn)程監(jiān)控的實(shí)現(xiàn)(ps、sleep、kill),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 提取oralce當(dāng)天的alert log的shell腳本代碼

    提取oralce當(dāng)天的alert log的shell腳本代碼

    提取oralce當(dāng)天的alert log的shell腳本代碼,需要的朋友可以參考下
    2013-02-02
  • shell字符串比較判斷是否為數(shù)字

    shell字符串比較判斷是否為數(shù)字

    本文闡述:shell中整數(shù)比較方法及字符串的比較方法,如等于,不等于,大于,大于等于,小于,等等
    2013-01-01
  • 寫(xiě)一個(gè)shell腳本實(shí)現(xiàn)視頻處理

    寫(xiě)一個(gè)shell腳本實(shí)現(xiàn)視頻處理

    Linux和Unix都擁有很多能夠處理圖像和視頻文件的應(yīng)用程序和工具,下面這篇文章主要給大家介紹了關(guān)于如何寫(xiě)一個(gè)shell腳本來(lái)實(shí)現(xiàn)視頻處理的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Linux 連續(xù)執(zhí)行多條命令的方法(推薦)

    Linux 連續(xù)執(zhí)行多條命令的方法(推薦)

    下面小編就為大家?guī)?lái)一篇Linux 連續(xù)執(zhí)行多條命令的方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • shell腳本case語(yǔ)句的具體使用

    shell腳本case語(yǔ)句的具體使用

    Shell腳本中的case語(yǔ)句是一種多分支條件判斷結(jié)構(gòu),主要用于匹配變量值與預(yù)設(shè)模式并執(zhí)行對(duì)應(yīng)的命令序列,下面就來(lái)具體介紹一下case語(yǔ)句的具體使用
    2025-08-08
  • linux C語(yǔ)言開(kāi)發(fā)管道通信實(shí)例詳解

    linux C語(yǔ)言開(kāi)發(fā)管道通信實(shí)例詳解

    這篇文章主要介紹了linux C語(yǔ)言開(kāi)發(fā)管道通信實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01

最新評(píng)論