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

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命令行參數(shù)用法簡介

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

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

    shell腳本查看k8s日志介紹

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

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

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

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

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

    提取oralce當天的alert log的shell腳本代碼

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

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

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

    寫一個shell腳本實現(xiàn)視頻處理

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

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

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

    shell腳本case語句的具體使用

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

    linux C語言開發(fā)管道通信實例詳解

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

最新評論