shell的要點

shell的要點

    shell介紹就不介紹了,記錄下shell的一些經常使用的要點總結,之後使用的時候能夠直接查詢。linux

一、shell的啓動

    每個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:將函數做爲一個命令來使用,也就是可使用$?,$*,$#;來作判斷

六、sleep

     睡眠多少秒

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
相關文章
相關標籤/搜索