最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

set的常用命令選項

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

設置/取消 Shell 選項

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

set 可以啟用或禁用 Shell 的運行選項,語法如下:

set -<option>  # 啟用選項
set +<option>  # 禁用選項

常用選項

設置位置參數(shù)

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

set -- arg1 arg2 arg3  # 設置 $1="arg1", $2="arg2", $3="arg3"

示例

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

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

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

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

set  # 顯示所有變量

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

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

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

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

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

調試腳本

set -x 和 set -v 常用于調試

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

打開調試效果如下

恢復默認選項

set -  # 恢復所有選項為默認值

顧名思義就是將之前的 set 的參數(shù)改回默認選項

錯誤退出

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

下面舉一個單獨使用set -e的例子

#!/bin/bash
set -e  # 啟用錯誤退出
 
echo "第一行正常執(zhí)行"
ls /home/forlinx/1.txt  # 這個命令會失敗
echo "這行不會被執(zhí)行,因為腳本已經(jīng)退出"

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

會發(fā)現(xiàn)腳本最后一行echo沒有打印出來

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

下面舉個set -E的例子

#!/bin/bash
set -eE  # 同時啟用錯誤退出和錯誤追蹤

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

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

echo"腳本開始"
my_function
echo"這行也不會執(zhí)行"

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

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

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

#!/bin/bash
set -eE  # 同時啟用錯誤退出和錯誤追蹤

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

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

echo"腳本開始"
my_function
echo"這行也不會執(zhí)行"

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

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

注意事項‌

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

總結

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

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

相關文章

  • shell腳本實現(xiàn)實時檢測文件變更

    shell腳本實現(xiàn)實時檢測文件變更

    這篇文章主要介紹了shell腳本實現(xiàn)實時檢測文件變更,本文直接給出實現(xiàn)代碼和使用方法,以及svn下的實現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05
  • PXE kickstart自動化部署系統(tǒng)安裝

    PXE kickstart自動化部署系統(tǒng)安裝

    這篇文章主要為大家介紹了PXE kickstart自動化部署系統(tǒng)的過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • Linux 命令行工具解析和格式化輸出 JSON的方法

    Linux 命令行工具解析和格式化輸出 JSON的方法

    這篇文章主要介紹了Linux 命令行工具解析和格式化輸出 JSON的方法,需要的朋友可以參考下
    2019-08-08
  • Linux 下sudo網(wǎng)絡權限詳解

    Linux 下sudo網(wǎng)絡權限詳解

    這篇文章主要介紹了Linux 下sudo網(wǎng)絡權限詳解的相關資料,需要的朋友可以參考下
    2017-05-05
  • 使用shc工具加密shell腳本詳解

    使用shc工具加密shell腳本詳解

    這篇文章主要介紹了使用shc工具加密shell腳本詳解,Shc可以用來對shell腳本進行加密,可以將shell腳本轉換為一個可執(zhí)行的二進制文件,需要的朋友可以參考下
    2014-12-12
  • Linux nohup 命令用法詳解

    Linux nohup 命令用法詳解

    nohup命令是Linux/Unix系統(tǒng)中非常有用的命令之一,它允許您在后臺運行命令或腳本,并且在退出終端會話后仍然保持運行,這篇文章主要介紹了Linux nohup 命令詳解,需要的朋友可以參考下
    2023-08-08
  • 一波實用的Bash Shell整理

    一波實用的Bash Shell整理

    這篇文章主要介紹了一波實用的Bash Shell整理,適用于Ubuntu等Debian系的Linux系統(tǒng),需要的朋友可以參考下
    2015-06-06
  • 詳解git無法pull倉庫refusing to merge unrelated histories

    詳解git無法pull倉庫refusing to merge unrelated histories

    這篇文章主要介紹了詳解git無法pull倉庫refusing to merge unrelated histories的相關資料,需要的朋友可以參考下
    2017-06-06
  • shell腳本實現(xiàn)同時多臺遠程主機執(zhí)行命令的代碼分享

    shell腳本實現(xiàn)同時多臺遠程主機執(zhí)行命令的代碼分享

    這篇文章主要給大家介紹了關于shell腳本實現(xiàn)同時多臺遠程主機執(zhí)行命令的方法,文中給出了詳細的代碼示例,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • shell腳本語言之if條件判斷語句實例詳解

    shell腳本語言之if條件判斷語句實例詳解

    在寫shell腳本的時候條件判斷是最常用到的,尤其剛寫shell腳本的時候,一些高級命令語法不會使用,到處都是if,下面這篇文章主要給大家介紹了關于shell腳本語言之if條件判斷語句的相關資料,需要的朋友可以參考下
    2022-04-04

最新評論

湘西| 门头沟区| 蒙城县| 太湖县| 揭阳市| 东兰县| 嵩明县| 开阳县| 炎陵县| 临澧县| 田东县| 沂南县| 兴化市| 云林县| 会泽县| 枞阳县| 屏东县| 普格县| 高邮市| 榆中县| 梅州市| 高阳县| 淳化县| 临桂县| 方正县| 榕江县| 黄梅县| 乌恰县| 武城县| 苍梧县| 玛沁县| 蕉岭县| 新竹县| 连江县| 灵川县| 平塘县| 石嘴山市| 分宜县| 湟源县| 井冈山市| 兴义市|