當前位置:
首頁 > 知識 > Linux下高效編寫shell腳本的10個建議

Linux下高效編寫shell腳本的10個建議


來自:碼農有道(微信號:b497155298)


作者:上善若水




在Linux環境下工作 ,shell腳本的編寫應該是一個必備的基本技能了,

本文將分享 10 個寫出高效可靠的

shell

腳本的實用技巧

本文主要內容來源於

10 Useful Tips for Writing Effective Bash Scripts in Linux

》,

再加上自己的一點理解而成。如果

你還有一些其他更好的腳本編程經驗想要分享,在下面評論框分享出來吧。





1

在腳本中多寫注釋


這條建議不但適合於shell腳本,對於其它編程語言同樣實用。這樣做的好處是可以幫助他人或者你自己後面閱讀腳本時能夠迅速

了解腳本的功能,便於維護。試想下,如果有一天你的主管給了你一堆沒有注釋的代碼,你是不是很抓狂呢。


shell腳本中,注釋一般以#開頭,後面跟著是注釋的內容。注釋不可少,但是注釋也不是越多越好,

對於shell腳本,注釋一般包括下面幾個部分:


1

#腳本的參數

2

#腳本的用途

3

#腳本的注意事項

4

#腳本的寫作時間,作者,版權等

5

#各個函數前的說明注釋

6

#一些較複雜的單行命令注釋





2

腳本中有命令運行失敗時退出腳本


如果腳本中某條命令運行失敗,我們不應該讓其繼續運行,因為這樣可能會影響

腳本的其餘部分,導致邏輯錯誤。邏輯錯誤一般又是很難定位的,與其這樣,不如讓其提前結束更早的找出腳本中的錯誤。可以用下面的

命令設置在遇到命令失敗時來退出腳本執行:

# 如果命令運行失敗讓腳本退出執行

set

-

o

errexit

# 或

set

-

e





3

腳本中使用到未聲明變數時退出腳本


腳本中使用到未聲明的變數同樣可能導致邏輯錯誤,可以用

下面的命令設置腳本在使用到未聲明的變數時退出執行:


# 若有用未設置的變數即讓腳本退出執行

set

-

o

nounset

# 或

set

-

u





4

使用雙引號引用變數


使用一個變數的值時,

用雙引號有助於防止由於空格導致單詞分割開和由於識別和擴展了通配符而導致的不必要匹配,下面的例子說明了一切。

#!/bin/bash# 若命令失敗讓腳本退出

set

-

o

errexit



# 若未設置的變數被使用讓腳本退出

set

-

o

nounset

echo

"Names without double quotes"


echo
names

=

"Tecmint FOSSMint Linusay"

for

name

in

$

names;

do

echo

"$name

done
echo
echo

"Names with double quotes"


echo

for

name

in

"$names"

;

do

echo

"$name"

done

exit

0







5

在腳本中多使用函數


同樣,這條建議也適用其它編程語言,函數的使用使得代碼更模塊化,

更可讀和可重用;

shell腳本中定義函數的語法如下所示:

function

 

check_root()
{


   command1;

   
   command2;
}

# 或

check_root()
{    
   command1;

   
   command2;
}




6

字元串比較時用=而不是==


為什麼會有這個建議,原文並沒有給出詳細的說明,只是簡單的提了句:

 

==

 是 

=

 的同義詞,因此僅用個單個 

=

 來做字元串比較。不過在原文的後面有網友回答了,是因為==只適用於bash;POSIX形式是「=」,使用 = 更方便移植。

value1

=

"tecmint.com"


value2

=

"fossmint.com"

if

[

"$value1"

=

"$value2"

]




7

用$(command) 代替傳統的`command`


這兩種形式都可以用作命令替換,所謂命令替換

是用這個命令的輸出結果取代命令本身。

這裡建議

用 

$(command)

 而不是反引號 `

command

 `來做命令代換。



//不建議做法

user

=

`echo "$UID"`

建議做法user

=

$(echo

"$UID"

)



8

用readonly聲明靜態變數


靜態變數不會改變;它的值一旦在腳本中定義後就不能被修改,對於這類變數,在聲明的時候應該用readonly去聲明。

readonly

passwd_file

=

"/etc/passwd"

readonly

group_file

=

"/etc/group"



9

命名規範


由於在bash環境變數名字都是大寫,因此建議自己定義的變數用小寫字母命名,以防止命名衝突,同時命名時要做到顧名思義,你取的名字要有意義。


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

nikto_file

=

"$HOME/Downloads/nikto-master"



10

對比較長的腳本進行調試


當你的腳本有成千上萬行時,一旦腳本運行出錯,排錯是一件異常困難的事情;

為了在腳本執行前更輕鬆地將問題定位出,需要進行一些調試,下面是一些指南來幫助你掌握調試的技巧。



How To Enable Shell Script Debugging Mode in Linux


How to Perform Syntax Checking Debugging Mode in Shell Scripts


How to Trace Execution of Commands in Shell Script with Shell Tracing




參考資料


10 Useful Tips for Writing Effective Bash Scripts in Linux





●編號467,輸入編號直達本文



●輸入m獲取文章目錄

推薦↓↓↓

 



演算法與數據結構


更多推薦:

18個技術類微信公眾號


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux學習 的精彩文章:

勁爆!髒話連篇,Linux之父:這些是TMD的垃圾!
了解這15條命令,你將掌握 Linux 文件傳輸的所有內容

TAG:Linux學習 |