shell腳本常用命令匯總


一、shell腳本概述和入門

  (1)shell腳本是一個命令行解釋器,它接收應用程序/用戶命令,然后調用操作系統內核

  

   (2)shell腳本的常用執行方式:

  第一種:采用bash或sh+腳本的相對路徑或絕對路徑(不用賦予腳本+x執行權限) sh(bash) test.sh

  第二種:采用輸入腳本的絕對路徑或相對路徑執行腳本(必須具有可執行權限+x)  ./test.sh 

  注意:第一種執行方法,本質是bash解析器幫你執行腳本,所以腳本本身不需要執行權限。第二種執行方法,本質是腳本需要自己執行,所以需要執行權限。

二、shell中的變量 

  (1)系統變量:

    $HOME(家目錄)、$PWD(當前路徑)、$SHELL(shell環境)、$USER(當前用戶)等

  (2)自定義變量:

    定義變量:變量=值 

    撤銷變量:unset 變量

    聲明靜態變量:readonly變量,注意:不能unset

  (3)特殊變量:

    $n:(功能描述:n為數字,$0代表該腳本名稱,$1-$9代表第一到第九個輸入參數,十以上的參數需要用大括號包含,如${10})

    $#:(功能描述:獲取所有輸入參數個數,常用於循環)。

    $*:(功能描述:這個變量代表命令行中所有的參數,$*把所有的參數看成一個整體)

    $@:(功能描述:這個變量也代表命令行中所有的參數,不過$@把每個參數區分對待)

    $?:(功能描述:最后一次執行的命令的返回狀態。如果這個變量的值為0,證明上一個命令正確執行;如果這個變量的值為非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了。)

三、運算符和條件判斷:

  (1)運算符常用語法:

    $((運算式)) 或 $[運算式]

    expr  + , - , \*,  /,  %    加,減,乘,除,取余  注意:expr運算符間要有空格   `expr 1 + 2`

  (2)條件判斷基本語法:

    [ condition ](注意condition前后要有空格)條件非空即為true,[ abc ]返回true,[] 返回false。

    常用判斷條件:

    a)兩個整數之間比較

      = 字符串比較

      -lt 小於(less than) -le 小於等於(less equal)

      -eq 等於(equal) -gt 大於(greater than)

      -ge 大於等於(greater equal) -ne 不等於(Not equal)

    b)按照文件權限進行判斷

      -r 有讀的權限(read) -w 有寫的權限(write)

      -x 有執行的權限(execute)

    c)按照文件類型進行判斷

      -f 文件存在並且是一個常規的文件(file)

      -e 文件存在(existence) -d 文件存在並是一個目錄(directory)

四、流程控制

  (1)if判斷

    if [ 條件判斷式 ];then

      程序

    fi

   或者

    if [ 條件判斷式 ]

    then

        程序

    fi

   注意事項:[ 條件判斷式 ] 中括號和條件判斷式之間必須有空格  if后要有空格

  (2)case語句

    case $變量名 in

      "值1")

        如果變量的值等於值1,則執行程序1

      ;;

      "值2")

        如果變量的值等於值2,則執行程序2

      ;;

      …省略其他分支…

      *)

        如果變量的值都不是以上的值,則執行此程序

      ;;

    esac

    注意事項:

    1) case行尾必須為單詞“in”,每一個模式匹配必須以右括號“)”結束。

    2) 雙分號“;;”表示命令序列結束,相當於java中的break。

    3) 最后的“*)”表示默認模式,相當於java中的default。

  (3)for循環 

    for (( 初始值;循環控制條件;變量變化 ))

      do

        程序

      done

    或

    for 變量 in 值1 值2 值3…

      do

        程序

      done

  (4)while循環

    while [ 條件判斷式 ]

      do

        程序

      done

 五、read讀取控制台輸入和函數

  (1)read讀取基本語法:

    read (選項) (參數)

    選項:-p 指定讀取時的提示符;  -t 指定讀取值時等待的時間(秒)

    參數:指定讀取值的變量名

  (2)函數:

    a)系統函數:

      basename [string / pathname] [suffix]   (功能描述:basename命令會刪掉所有的前綴包括最后一個(‘/’)字符,然后將字符串顯示出來。  

[root@hadoop1 datas]$ basename /opt/module/datas/if.sh if.sh [root@hadoop1 datas]$ basename /opt/module/datas/if.sh .sh if

 

      dirname 文件絕對路徑 (功能描述:從給定的包含絕對路徑的文件名中去除文件名(非目錄的部分),然后返回剩下的路徑(目錄的部分))

 

[root@hadoop1 datas]$ dirname /opt/module/datas/if.sh /opt/module/datas

 

    b)自定義函數

    [ function ] funname[()]

    {

      Action;

      [return int;]

    }

    funname

  注意:

  1>必須在調用函數地方之前,先聲明函數,shell腳本是逐行運行。不會像其它語言一樣先編譯。

  2>函數返回值,只能通過$?系統變量獲得,可以顯示加:return返回,如果不加,將以最后一條命令運行結果,作為返回值。return后跟數值n(0-255)

六、shell工具

  (1)cut

    cut [選項參數]  filename    說明:默認分隔符是制表符

    選項參數: -f  列號,提取第幾列  -d 分隔符,按照指定分隔符分割列

 

    獲取ip:ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1 先獲取eth0的網卡,再grep到inet addr該行的數據,再根據“:”分隔獲取第二個參數(192.168.232.102  Bcast),再根據“ ”分割獲取第一個參數即為對應的ip

  (2)sed

    sed [選項參數]  ‘command’  filename

    選項參數:-e  直接在指令列模式上進行sed的動作編輯。(一個命令時可省略,多個命令連續操作在每個命令前加上-e)

    命令參數:a 新增,a的后面可以接字串,在下一行出現  sed "-3a 111" sed.txt(在sed.txt的第3行后面一行加上111,為單獨一行)

            d 刪除     sed "/wo/d" sed.txt(在sed.txt中刪除帶有wo的整行數據)  sed "2d" sed.txt(在sed.txt中刪除第2行)

          s 查找並替換  sed  "s/wo/ni/" sed.txt(在sed.txt中每行第一個出現的wo替換為ni,如果加上g就是全局替換)

  (3)awk

    awk [選項參數] 'pattern1{action1}  pattern2{action2}...' filename

    pattern:表示AWK在數據中查找的內容,就是匹配模式(正則)

    action:在找到匹配內容時所執行的一系列命令

    選項參數:-F 指定輸入文本拆分分隔符

         -v 賦值一個用戶定義變量  awk -v i=1 -F: '{print $3+i}' passwd 為passwd中的每一個用戶id+1

    awk的內置變量:

      FILENAME:文件名

      NR:已讀行數

      NF:瀏覽記錄的域的個數(切割后列的個數)  awk -F: '{print "filename:"  FILENAME ", linenumber:" NR  ",columns:" NF}' passwd (統計passwd文件名,行號和每行的列數)

 

  (4)sort

    sort(選項)(參數)

    選項:-n 依照數值的大小排序

       -r 降序排列

        -t 設置排序時所用的分隔字符

       -k 指定需要排序的列

    sort -t : -nrk 3  sort.sh (按照“:”分割后的第三列倒序排序。)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM