sshuser@serverbash</path/to/local/script.sh ssh到遠程服務器執行一個腳本,此命令能夠避免將腳本上傳到遠程服務器 sshuser@hostcat/path/to/remotefile|diff/path/to/localfile- 比較遠程文件和本地文件的差別 vimscp://username@host//path/to/somefile vi一個遠程文件 curlifconfig.me 在內網下查看公網ip echo${#a} 取變量字符個數 FUNCNAME 函數名變量,打印該變量會輸出當前的函數名稱 一.變量命名 1.變量命名先後規則統一 COUNT= Sum= 2.避免無含義字符或數字,例以下面的18,誰知道表明什麼含義呢 -------------------錯誤寫法------------------- if[[$count-gt18]] then commmand fi ---------------------------------------------- -------------------正確寫法------------------- Process_Limit=18 if[[$count-gt${Process_Limit}]] then commmand fi ---------------------------------------------- 3.全局變量在腳本初始化的時候定義,通常是一些配置參數,儘可能少的使用全局變量 4.函數內的局部變量使用local聲明 func_test_1() { localtest=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 echomatched fi ---------------------------------------------- ---------------------------------------------- 防止空變量,如下if判斷,若是使用[]則會報錯 if[[$aaa==1]] then echomatched else echo"nosuchvariable" fi ---------------------------------------------- 8.使用ctrl+n補齊變量名 若是變量名的命名比較長,手輸入容易出錯,複製又太麻煩,則可使用ctrl+n補齊變量名 操做能夠避免手工輸入致使的變量名錯誤 二.臨時文件 儘可能避免使用臨時文件 若是須要使用臨時文件,請在文件名中加入腳本pid,並在腳本退出前清除臨時文件 mktemp命令能夠用來生成一個臨時文件 tmp_file_name=$(mktempTMP.XXXXXX) 該命令會生成一個文件名爲TMP.XXXXXX(其中XXXXXX爲6位隨機碼)的文件 這樣作能夠避免腳本並行時,臨時文件名的衝突 三.代碼風格 1.第一行申明解析器 #!/bin/bash 2.第二行導入環境變量 .~/.bash_profile(這個在cron腳本中尤爲重要) 3.查找腳本自身路徑 不少腳本沒有定義起始目錄,這樣將致使腳本只能在當前目錄下執行 4.條件語句和循環語句風格統一 使用shell統一格式,而非; -------------------錯誤寫法------------------- if[[]];then command1 fi while[[]];do command2 done ---------------------------------------------- -------------------正確寫法------------------- if[[]] then command1 fi while[[]] do command2 done ---------------------------------------------- 5.縮進,使用TAB或者空格,不要二者混用 想檢查一個技術人員是否經驗豐富,那麼看看他的電子檔簡歷吧,是否TAB和空格混用了 6.添加註釋 沒有註釋的腳本,註定難以維護,固然,咱們也應該避免一些毫無心義的註釋 -------------------錯誤寫法------------------- #將3賦值給變量load_limit load_limit=3 ---------------------------------------------- 大哥,您這是在逗我玩兒嗎? -------------------正確寫法------------------- #定義系統負載閥值 load_limit=3 ---------------------------------------------- 四.接口化編程 當多個腳本須要協調工做時,應該根據各自模塊的功能,定義相應的接口 例如,多個腳本須要讀取同一個配置文件的配置,那麼將這個需求造成一個獨立的腳本,各個腳本都來調用這個接口腳本 這樣在修改配置文件格式的時候,只要修改這個接口就好了