濮阳杆衣贸易有限公司

主頁 > 知識庫 > Linux Shell腳本編程的注意事項

Linux Shell腳本編程的注意事項

熱門標簽:客服外呼系統(tǒng)怎么樣 打電話機器人接我是他的秘書 江蘇云電銷機器人公司 百度地圖標注錯了有責任嗎 揭陽智能電話機器人推薦 河南信譽好的不封卡電話外呼系統(tǒng) 如果做線上地圖標注 地圖標注員都是年輕人 華鋒e路航港口地圖標注

一、常用技巧

復制代碼 代碼如下:
ssh user@server bash /path/to/local/script.sh
#ssh到遠程服務器執(zhí)行一個腳本,此命令可以避免將腳本上傳到遠程服務器

ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
#比較遠程文件和本地文件的差異

vim scp://username@host//path/to/somefile
#vi一個遠程文件

curl ifconfig.me
#在內(nèi)網(wǎng)下查看公網(wǎng)ip

echo ${#a}
#取變量字符個數(shù)

FUNCNAME
#函數(shù)名變量,打印該變量會輸出當前的函數(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補齊變量名
如果變量名的命名比較長,手輸入容易出錯,復制又太麻煩,則可以使用ctrl+n補齊變量名
操作可以避免手工輸入導致的變量名錯誤

三.臨時文件

盡量避免使用臨時文件
如果需要使用臨時文件,請在文件名中加入腳本pid,并在腳本退出前清除臨時文件
mktemp命令可以用來生成一個臨時文件
tmp_file_name=$(mktemp TMP.XXXXXX)
該命令會生成一個文件名為TMP.XXXXXX(其中XXXXXX為6位隨機碼)的文件
這樣做可以避免腳本并行時,臨時文件名的沖突

四.代碼風格

1.第一行申明解析器

復制代碼 代碼如下:

#!/bin/bash

2.第二行導入環(huán)境變量
復制代碼 代碼如下:

. ~/.bash_profile (這個在cron腳本中尤其重要)

3.查找腳本自身路徑
很多腳本沒有定義起始目錄,這樣將導致腳本只能在當前目錄下執(zhí)行

4.條件語句和循環(huán)語句風格統(tǒng)一
使用shell統(tǒng)一格式,而非;

復制代碼 代碼如下:

#-------------------錯誤寫法-------------------
if [[ ]] ;then
command1
fi
while [[ ]] ;do
command2
done
#----------------------------------------------

#-------------------正確寫法-------------------
if [[ ]]
then
command1
fi

while [[ ]]
do
command2
done
#----------------------------------------------

5.縮進,使用TAB或者空格,不要兩者混用
想檢查一個技術(shù)人員是否經(jīng)驗豐富,那么看看他的電子檔簡歷吧,是否TAB和空格混用了

6.添加注釋
沒有注釋的腳本,注定難以維護,當然,我們也應該避免一些毫無意義的注釋

復制代碼 代碼如下:

#-------------------錯誤寫法-------------------
#將3賦值給變量load_limit
load_limit=3
#----------------------------------------------
大哥,您這是在逗我玩兒嗎?

#-------------------正確寫法-------------------
#定義系統(tǒng)負載閥值
load_limit=3
#----------------------------------------------

五.接口化編程

當多個腳本需要協(xié)調(diào)工作時,應該根據(jù)各自模塊的功能,定義相應的接口
例如,多個腳本需要讀取同一個配置文件的配置,那么將這個需求形成一個獨立的腳本,各個腳本都來調(diào)用這個接口腳本
這樣在修改配置文件格式的時候,只要修改這個接口就行了

您可能感興趣的文章:
  • linux寫shell需要注意的問題(必看)

標簽:婁底 馬鞍山 邵陽 金昌 赤峰 淘寶邀評 許昌 巴彥淖爾

巨人網(wǎng)絡通訊聲明:本文標題《Linux Shell腳本編程的注意事項》,本文關(guān)鍵詞  Linux,Shell,腳本,編程,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux Shell腳本編程的注意事項》相關(guān)的同類信息!
  • 本頁收集關(guān)于Linux Shell腳本編程的注意事項的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    长顺县| 涞源县| 永川市| 潞西市| 武定县| 台东县| 武穴市| 和林格尔县| 莱西市| 巴塘县| 海盐县| 永宁县| 三台县| 鹤壁市| 保康县| 石阡县| 繁昌县| 彭山县| 开江县| 尖扎县| 刚察县| 乐业县| 饶阳县| 耒阳市| 齐齐哈尔市| 太原市| 保靖县| 沭阳县| 土默特左旗| 桦南县| 东乌| 调兵山市| 高安市| 双流县| 高清| 封开县| 河池市| 安徽省| 沅陵县| 桑植县| 含山县|