指令關鍵字
nohup 不掛斷運行
末尾的& 表示後臺運行(有些程序需要結合nohub使用)
2>&1 表示將錯誤輸出重定向到標準輸出
| awk '{print NR}' 打印行數
| awk -F " " '{print $1}' 打印第1列,從1開始數(-F 爲指定分割符,默認分隔符爲[ ]+)$0爲整行
lsb_release 查看系統版本信息,-a爲完整的,其餘單獨的爲-i/-d/-c,如果再加上-s則會取一行的第二個值輸出。可利用該信息下載對應版本安裝包,如:sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
if條件
單中括號 [ 3 -gt 2 ] 是可執行程序,等價於 /usr/bin/[ 3 -gt 2],等價於 test 3 -gt 2。
對於程序:
d1='2018-01-02 12:11:00'
d2='2018-02-03 10:10:10'
需將命令更改爲:if [ "$d1" > "$d2" ] ;then echo 1; else echo 2; fi纔可執行
當使用如下命令時報錯
if [ $d1 > $d2 ] ;then echo 1; else echo 2; fi
因爲實際會執行
if [ 2018-01-02 12:11:00 > 2018-02-03 10:10:10 ] ; then echo 1; else echo 2; fi
需將命令更改爲如下命令纔可執行
if [ "$d1" > "$d2" ] ;then echo 1; else echo 2; fi
雙中括號 [[ 3 == 2 ]] 是腳本解釋程序,在與前面同樣的變量設置下,運行如下程序可正常運行
if [[ $d1 > $d2 ]] ;then echo 1; else echo 2; fi
-gt -lt 作爲數值的比較大小
> < 作爲字符串的比較大小,在[ ] 中使用需使用\> \<轉義才能保證正確,否則會被當作重定向符號
將字符串作爲命令執行
cmd='date +"%Y-%m-%d %H:%M:%S"' # 要執行的字符串
使用 `eval $cmd`的方式執行,但必須要有承載結果集的變量,否則會被當作命令再次執行,如:
echo `eval $cmd`
或 result=`eval $cmd`
# 直接$cmd也可以執行部分命令,但對於複雜命令,在特殊符號上會有識別錯誤的問題
靜默安裝debconf
使用debconf-show命令可查看預置項,如:sudo debconf-show oracle-java8-installer可得到如下預置項:
shared/error-oracle-license-v1-1:
oracle-java8-installer/not_exist:
* shared/accepted-oracle-license-v1-1: true
* shared/present-oracle-license-v1-1:
oracle-java8-installer/local:
安裝oracle-java8-installer時就可利用預置項實現,無命令行輸入的靜默安裝,如下爲預置證書確認值true:
# 設置預置值
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
# 執行安裝的過程中會使用該默認值
apt-get install -y oracle-java8-installer