ssh user@server bash < /path/to/local/script.sh
ssh到遠程服務器執行一個腳本,此命令能夠避免將腳本上傳到遠程服務器
ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
比較遠程文件和本地文件的差別
vim scp://username@host//path/to/somefile
vi一個遠程文件
curl ifconfig.me
在內網下查看公網ip
echo ${#a}
取變量字符個數
FUNCNAME
函數名變量,打印該變量會輸出當前的函數名稱
一.變量命名
1.變量命名先後規則統一
COUNT=
Sum=
2.避免無含義字符或數字,例以下面的18,誰知道表明什麼含義呢
-------------------錯誤寫法-------------------
if [[ $count -gt 18 ]]
then
commmand
fi
----------------------------------------------
-------------------正確寫法-------------------
Process_Limit=18
if [[ $count -gt ${Process_Limit} ]]
then
commmand
fi
----------------------------------------------
3.全局變量在腳本初始化的時候定義,通常是一些配置參數, 儘可能少的使用全局變量
4.函數內的局部變量使用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.第二行導入環境變量
. ~/.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
----------------------------------------------
四.接口化編程
當多個腳本須要協調工做時,應該根據各自模塊的功能,定義相應的接口
例如,多個腳本須要讀取同一個配置文件的配置,那麼將這個需求造成一個獨立的腳本,各個腳本都來調用這個接口腳本
這樣在修改配置文件格式的時候,只要修改這個接口就好了web