Linux中高效編寫Bash指令碼的10個技巧

2021-09-23 06:31:41 字數 2820 閱讀 2169

shell 指令碼程式設計 是你在 linux 下學習或練習程式設計的最簡單的方式。尤其對 系統管理員要處理著自動化任務,且要開發新的簡單的實用程式或工具等(這裡只是僅舉幾例)更是必備技能。

本文中,我們將分享 10 個寫出高效可靠的 bash 指令碼的實用技巧,它們包括:

1、 指令碼中多寫注釋

這是不僅可應用於 shell 指令碼程式中,也可用在其他所有型別的程式設計中的一種推薦做法。在指令碼中作注釋能幫你或別人翻閱你的指令碼時了解指令碼的不同部分所做的工作。

對於剛入門的人來說,注釋用 # 號來定義。

# tecmint 是瀏覽各類 linux 文章的最佳站點

2、 當執行失敗時使指令碼退出

有時即使某些命令執行失敗,bash 可能繼續去執行指令碼,這樣就影響到指令碼的其餘部分(會最終導致邏輯錯誤)。用下面的行的方式在遇到命令失敗時來退出指令碼執行:

# 如果命令執行失敗讓指令碼退出執行 

set-o errexit 

# 或 

set-e 

3、 當 bash 用未宣告變數時使指令碼退出

bash 也可能會使用能導致起邏輯錯誤的未宣告的變數。因此用下面行的方式去通知 bash 當它嘗試去用乙個未宣告變數時就退出指令碼執行:

# 若有用未設定的變數即讓指令碼退出執行 

set-o nounset 

# 或 

set-u 

4、 使用雙引號來引用變數

當引用時(使用乙個變數的值)用雙引號有助於防止由於空格導致單詞分割開和由於識別和擴充套件了萬用字元而導致的不必要匹配。

看看下面的例子:

#!/bin/bash 

# 若命令失敗讓指令碼退出 

set-o errexit 

# 若未設定的變數被使用讓指令碼退出 

set-o nounset 

echo "names without double quotes"

echo 

names="tecmint fossmint linusay"

forname

in$names; do 

echo "$name"

done 

echo 

echo "names with double quotes"

echo 

forname

in"$names"

; do 

echo "$name"

done 

exit 0 

儲存檔案並退出,接著如下執行一下:

在指令碼中用雙引號

5、 在指令碼中使用函式

除了非常小的指令碼(只有幾行**),總是記得用函式來使**模組化且使得指令碼更可讀和可重用。

寫函式的語法如下所示:

function

check_root() 

# 或 

check_root() 

寫成單行**時,每個命令後要用終止符號:

check_root() 

6、 字串比較時用 = 而不是 ==

注意 == 是 = 的同義詞,因此僅用個單 = 來做字串比較,例如:

value1=」tecmint.com」 

value2=」fossmint.com」 

if [ "$value1"

= "$value2"]  

7、 用 $(command) 而不是老舊的 command 來做代換

命令代換 是用這個命令的輸出結果取代命令本身。用 $(command) 而不是引號 command 來做命令代換。

這種做法也是 shellcheck tool (可針對 shell 指令碼顯示警告和建議)所建議的。例如:

user

=`echo 「$uid」` 

user

=$(echo 「$uid」) 

8、 用 readonly 來宣告靜態變數

靜態變數不會改變;它的值一旦在指令碼中定義後不能被修改:

readonly passwd_file=」/etc/passwd」 

readonly group_file=」/etc/group」  

9、 環境變數用大寫字母命名,而自定義變數用小寫

所有的 bash 環境變數用大寫字母去命名,因此用小寫字母來命名你的自定義變數以避免變數名衝突:

# 定義自定義變數用小寫,而環境變數用大寫 

nikto_file=」$home/downloads/nikto-master/program/nikto.pl」 

perl 「$nikto_file」 -h 「$1」 

10、 總是對長指令碼進行除錯

如果你在寫有數千行**的 bash 指令碼,排錯可能變成噩夢。為了在指令碼執行前易於修正一些錯誤,要進行一些除錯。通過閱讀下面給出的指南來掌握此技巧:

如何在 linux 中啟用 shell 指令碼除錯模式(

如何在 shell 指令碼中執行語法檢查除錯模式(

如何在 shell 指令碼中跟蹤除錯命令的執行( 

Linux中指令碼的編寫

bin bash search home work search include path cd dirname 0 pwd dirname 0 當前指令碼存放的目錄 cd include path source conf if d search then 判斷某個目錄是否存在 mkdir p se...

linux的bashrc指令碼編寫

最近整理以前的筆記時候,翻到這點記錄,裡面的內容是實習時 教我的,可以說都是 的乾貨,分享一點點。linux的profile和bashrc檔案通常被用來配置使用者自己的個性化設定或者開發環境。login shell代表使用者登入,比如使用 su 命令,或者用 ssh 連線到某乙個伺服器上,都會使用該...

編寫Linux的shell指令碼

把一些有關聯的linux命令,或者一組完成某一特定功能的linux命令,存放在了乙個檔案中,把這個檔案稱之為shell指令碼,該指令碼真正被稱之為shell指令碼,需要具備這麼幾個特點 需要能夠被bash能夠執行,就相當於在windows的可執行檔案.exe 需要為該指令碼提供乙個標識 在檔案的開頭...