shell介紹就不介紹了,記錄下shell的一些經常使用的要點總結,之後使用的時候能夠直接查詢。linux
每個shell腳本的使用,都須要使用到腳本解釋器。直接使用下面的腳本解釋器正則表達式
#!/bin/bash
咱們能夠經過 cat /etc/shell 命令查詢linux中,那些命令是正確的shell
shell中的變量分爲3類:數字、字符串、文件,每一類的處理方式都不相同。數組
a、數值處理bash
數值運算、比較記錄在下面表格函數
ps:==,!=與-eq ,-ne在[[]]中效果相同,在`expr `中須要使用到-ne,-eq來作比較。spa
b、字符串code
字符串還有一些特殊的使用字符串
${#varname}:輸入字符串長度 ${varname:index:long}:從第index開始截取long個字符
c、文件it
d、邏輯操做
e、符號
單引號:使用會忽略特殊字符原樣輸出 雙引號:使用會替換變量 反引號:將系統命令的輸出插入到這個字符串,和$()同樣,後者可移植性不高 $(commond ):功能和反引號同樣。 ((exp;exp;exp)):雙括號通常作數值的擴展運算 eg:a=10 ((a=a+1)) //直接在將a的值變爲11,整個a都會變化。 b=$(( $a + 1 )) //將a的值加1,而後賦值給b,可是a不會變化。和b=`expr $a + 1`做用同樣 ps: 1.`commond`和$(commond)做用同樣,若是用來作數值運算,比較。則必須使用expr命令,`expr `和$(expr),或者直接用$((運算;比較))。 2.若是流程控制for作運算,如:c的for((int i ;i<num;i++)),則必須用(())雙括號。
f、內部參數
執行命令: # ls s1 s2 s3 s3 s5 解析的時候,會將輸入的值作參數化處理 $0:./test2.sh 腳本的文件名 $1=s1...(通常$0爲./xxx.sh,$1纔是咱們須要的參數) $#=5 :多少個值 $?:上一個命令,正常退出返回0,反之爲非0值。《《重要》》 $*="s1 s2 s3 s3 s5" 參數組成的字符串
咱們通常使用 $? 來判斷上一個命令是否執行成功,其返回值以下
e、數組
賦值 a=(1 2 3 4) 使用 ${a} = 1 //輸出第0個 ${a[n]} (n爲下標) ${a[@]}/${a[*]}:數組的全部值 ${#a[@]}/${#a[*]}:數組的長度
if流程
a、 if [[ 表達式 ]] then 操做 elif [[ 表達式 ]] then 操做 esle 操做 fi
for流程
使用一: for varname IN item1 item2 (空格隔開) do #執行語句1 #執行語句2 done 使用二: for ((int i ;i <num ;i++)) do #執行語句 #執行語句 done
case流程
case ${varname} in 模式1) #執行語句1... #執行語句2... 模式2) #執行語句1... #執行語句2... 模式3) #執行語句1... #執行語句2... break esac 模式:${var_name}必須是變量或常數 Ⅰ.天然數 Ⅱ.字符串,[pattern],使用的是正則表達式匹配
while流程
while [[表達式]] do #執行語句1... #執行語句2... done
unitl流程
until循環執行一系列命令直至條件爲真時中止。 until [[表達式]] do 執行語句 執行語句 done
使用(須要使用空格間隔開) read var1 var2 var3 用戶輸入: a b c 結果:var1=a,var2=b,var3=c
定義: function function_name(){ list of commands; [return value] } 刪除: unset .f function_name ps:將函數做爲一個命令來使用,也就是可使用$?,$*,$#;來作判斷
睡眠多少秒
echo "now : `date` " sleep 10 echo "now : `date` "
輸出
now : Mon May 23 14:59:40 CST 2016 now : Mon May 23 14:59:50 CST 2016