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}]]
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}]]
touch${log_dir}/mam/${log_name}
log_file=${log_dir}/${log_name}
if[[!-f${log_file}]]
touch${log_file}
6.異常判斷,判斷變量名是否存在,對于輸入變量,還需要判斷變量名的合法性
rm-rf${path}/*
if[-d"${path}"]
7.雙中括号的使用[[]]
shell的雙中括号有很多的作用
正則比對
if[[Yes=~Y|y]]
echomatched
防止空變量,以下if判斷,如果使用[]則會報錯
if[[$aaa==1]]
else
echo"nosuchvariable"
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
while[[]];do
command2
done
if[[]]
while[[]]
do
5.縮進,使用TAB或者空格,不要兩者混用
想檢查一個技術人員是否經驗豐富,那麼看看他的電子檔履歷吧,是否TAB和空格混用了
6.添加注釋
沒有注釋的腳本,注定難以維護,當然,我們也應該避免一些毫無意義的注釋
#将3指派給變量load_limit
load_limit=3
大哥,您這是在逗我玩兒嗎?
#定義系統負載閥值
四.接口化程式設計
當多個腳本需要協調工作時,應該根據各自子產品的功能,定義相應的接口
例如,多個腳本需要讀取同一個配置檔案的配置,那麼将這個需求形成一個獨立的腳本,各個腳本都來調用這個接口腳本
這樣在修改配置檔案格式的時候,隻要修改這個接口就行了
本文轉自大角牛部落格51CTO部落格,原文連結http://blog.51cto.com/jingshengsun888/1319934如需轉載請自行聯系原作者
運維的戲子