您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Linux Shell腳本編程的注意事項(xiàng)有哪些”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
一、常用技巧
代碼如下:
ssh user@server bash < /path/to/local/script.sh
#ssh到遠(yuǎn)程服務(wù)器執(zhí)行一個腳本,此命令可以避免將腳本上傳到遠(yuǎn)程服務(wù)器
ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
#比較遠(yuǎn)程文件和本地文件的差異
vim scp://username@host//path/to/somefile
#vi一個遠(yuǎn)程文件
curl ifconfig.me
#在內(nèi)網(wǎng)下查看公網(wǎng)ip
echo ${#a}
#取變量字符個數(shù)
FUNCNAME
#函數(shù)名變量,打印該變量會輸出當(dāng)前的函數(shù)名稱
二.變量命名
1.變量命名前后規(guī)則統(tǒng)一
代碼如下:
COUNT=
Sum=
2.避免無含義字符或數(shù)字,例如下面的18,誰知道代表什么含義呢
代碼如下:
#-------------------錯誤寫法-------------------
if [[ $count -gt 18 ]]
then
commmand
fi
#----------------------------------------------
#-------------------正確寫法-------------------
Process_Limit=18
if [[ $count -gt ${Process_Limit} ]]
then
commmand
fi
#----------------------------------------------
3.全局變量在腳本初始化的時候定義,一般是一些配置參數(shù), 盡量少的使用全局變量
4.函數(shù)內(nèi)的局部變量使用local聲明
代碼如下:
func_test_1()
{
local test=1
echo $test
}
5.變量合并
如果某些變量需要組合起來才有意義時,例如文件路徑等,請將組合起來的值賦予一個變量,這樣以后修改起來方便
代碼如下:
log_dir=/opt/log
log_name=website.log
#-------------------錯誤寫法-------------------
if [[ ! -f ${log_dir}/mam/${log_name} ]]
then
touch ${log_dir}/mam/${log_name}
fi
#----------------------------------------------
#-------------------正確寫法-------------------
log_file=${log_dir}/${log_name}
if [[ ! -f ${log_file} ]]
then
touch ${log_file}
fi
#----------------------------------------------
6.異常判斷,判斷變量名是否存在,對于輸入變量,還需要判斷變量名的合法性
代碼如下:
#-------------------錯誤寫法-------------------
rm -rf ${path}/*
#----------------------------------------------
#-------------------正確寫法-------------------
if [ -d "${path}" ]
then
rm -rf ${path}/*
fi
#----------------------------------------------
7.雙中括號的使用[[ ]]
shell的雙中括號有很多的作用
代碼如下:
#----------------------------------------------
正則匹配
if [[ Yes =~ Y|y ]]
then
echo matched
fi
#----------------------------------------------
#----------------------------------------------
防止空變量,以下if判斷,如果使用[]則會報錯
if [[ $aaa == 1 ]]
then
echo matched
else
echo "no such variable"
fi
#----------------------------------------------
8.使用ctrl+n補(bǔ)齊變量名
如果變量名的命名比較長,手輸入容易出錯,復(fù)制又太麻煩,則可以使用ctrl+n補(bǔ)齊變量名
操作可以避免手工輸入導(dǎo)致的變量名錯誤
三.臨時文件
盡量避免使用臨時文件
如果需要使用臨時文件,請在文件名中加入腳本pid,并在腳本退出前清除臨時文件
mktemp命令可以用來生成一個臨時文件
tmp_file_name=$(mktemp TMP.XXXXXX)
該命令會生成一個文件名為TMP.XXXXXX(其中XXXXXX為6位隨機(jī)碼)的文件
這樣做可以避免腳本并行時,臨時文件名的沖突
四.代碼風(fēng)格
1.第一行申明解析器
代碼如下:
#!/bin/bash
2.第二行導(dǎo)入環(huán)境變量
代碼如下:
. ~/.bash_profile (這個在cron腳本中尤其重要)
3.查找腳本自身路徑
很多腳本沒有定義起始目錄,這樣將導(dǎo)致腳本只能在當(dāng)前目錄下執(zhí)行
4.條件語句和循環(huán)語句風(fēng)格統(tǒng)一
使用shell統(tǒng)一格式,而非;
代碼如下:
#-------------------錯誤寫法-------------------
if [[ ]] ;then
command1
fi
while [[ ]] ;do
command2
done
#----------------------------------------------
#-------------------正確寫法-------------------
if [[ ]]
then
command1
fi
while [[ ]]
do
command2
done
#----------------------------------------------
5.縮進(jìn),使用TAB或者空格,不要兩者混用
想檢查一個技術(shù)人員是否經(jīng)驗(yàn)豐富,那么看看他的電子檔簡歷吧,是否TAB和空格混用了
6.添加注釋
沒有注釋的腳本,注定難以維護(hù),當(dāng)然,我們也應(yīng)該避免一些毫無意義的注釋
代碼如下:
#-------------------錯誤寫法-------------------
#將3賦值給變量load_limit
load_limit=3
#----------------------------------------------
大哥,您這是在逗我玩兒嗎?
#-------------------正確寫法-------------------
#定義系統(tǒng)負(fù)載閥值
load_limit=3
#----------------------------------------------
五.接口化編程
當(dāng)多個腳本需要協(xié)調(diào)工作時,應(yīng)該根據(jù)各自模塊的功能,定義相應(yīng)的接口
例如,多個腳本需要讀取同一個配置文件的配置,那么將這個需求形成一個獨(dú)立的腳本,各個腳本都來調(diào)用這個接口腳本
這樣在修改配置文件格式的時候,只要修改這個接口就行了
“Linux Shell腳本編程的注意事項(xiàng)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。