Linux Shell編程學習筆記

來源:互聯網
上載者:User

一、Shell變數 主要有本地變數和環境變數。

        1、本地變數  -- 在使用者現有啟動並執行指令碼中使用
              1) 定義本地變數      格式: variable-name=value
                  例子:[root@jike1 /root]# LOCALTEST="test" 
                           [root@jike1 /root]# echo $LOCALTEST            (注意:echo $LOCALTEST 和 echo ${LOCALTEST}的效果是一樣的)
                  (在變數名前加$, 可以取得此變數的值,使用echo命令可以顯示變數的值)
              2) 顯示本地變數      格式: set 
                  例子:[root@chinaitlab root]# set
              3) 清除本地變數     格式:unset  variable-name 
                  例如:[root@jike1 /root]# unset LOCALTEST
                  此時再執行echo $LOCALTEST將看不到變數LOCALTEST的輸出。
                           
        2、環境變數 -- 在所有的子進程中使用
              1) 定義環境變數     格式: export  variable-name=value (與本地變數的定義相比,多了一個export關鍵字)
                  例子:[root@chinaitlab /root]# export DOMAIN="chinaitlab.com" 
                              [root@ chinaitlab shell]# vi testenv.sh
                                #!/bin/bash                        #表示用bash來解析指令碼
                                #testenv.sh
                                echo $DOMAIN
                              [root@chinaitlab shell]# chmod +x testenv.sh
                              [root@chinaitlab shell]# ./testenv.sh
                                chinaitlab.com
                2) 顯示環境變數     格式: env     (本地變數的顯示使用set,環境變數的顯示使用env)
                    例子: [root@chinaitlab test]# env
                3) 清除環境變數     格式:unset  variable-name     (用法與本地變數相同,都使用unset)
                    例子: [root@chinaitlab shell]# unset DOMAIN
                    此時再執行./testenv.sh將看不到變數DOMAIN的輸出。   

        3、其它變數
              1) 位置變數     $0,$1,$2,$3……$9
              2) 唯讀變數  readonly variable 
                  注意:唯讀變數不能被清除和改變其值,所以要謹慎使用。
              3) 特殊變數     $#,$?,$$(表示當前進程的PID)……

二、運算子和運算式
        
        1、運算子是對電腦發的指令,運算子類型有:
                算術運算子(+、-、*、/)
                按位元運算符(~、<<、>>、&、|、^)
                邏輯運算子(&&、||、 > 、= = 、<、! =)
                賦值運算子(=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=)
        
        2、運算式是運算子和運算對象的組合體。
                1) $[]:可以接受不同基數的數位運算式
                    echo $[10+1]                            (輸出:11)
                    echo "$[2+3],$HOME"            (輸出:5,/root)
                    echo $[2<<3],$[8>>1]            (輸出:16,4)    
                    echo $[2>3],$[3>2]                (輸出:0,1 運算式為false時輸出0,為true時輸出1)
                2) 字元運算式:直接書寫,採用單引號,雙引號引起來。
                    echo " $HOME,That is your root directory."     (輸出:/root,That is your root directory.)
                    echo ' $HOME,That is your root directory. '     (輸出:$HOME,That is your root directory.)
                    單引號和雙引號的區別在於:單引號是原樣顯示,雙引號則顯示出變數的值。
                3) test運算式

三、控制結構

        1、if語句
              例:  #!/bin/bash
                      #if.sh
                      if [ "10" -lt "12" ]            #注意:if和[之間,[和"10"之間,"12"和]都有空格,如果不加空格,會出現語法錯誤
                      then
                      echo "Yes,10 is less than 12"
                      fi 

        2、case語句
              例:  #!/bin/bash
                      #case.sh
                      echo -n "Enter a start or stop:"
                      read ANS
                      case $ANS in
                      start)
                           echo "You select start"
                           ;;
                      stop)
                           echo "You select stop"
                           ;;
                      *)
                           echo "`basename $0`: You select is not between start and stop" >&2            
                           #注意:>和&2之間沒有空格,>&2 表示將顯示輸出到標準輸出(一般是螢幕)上
                           exit;
                           ;;
                      esac

        3、for迴圈語句
              格式:   for 變數名 in 列表
                          do
                              命令1
                              命令2
                              ... ...
                          done

        4、until迴圈語句
              格式:   until 條件
                          do
                              命令1
                              命令2
                              ... ...
                          done

        5、while迴圈語句
              格式:   while 命令 
                          do 
                              命令1 
                          break 
                              命令2 
                          continue 
                              命令3 
                              ... ...
                          done 

四、輸入輸出

        1、幾個重要的工具
              1) echo
                  例:echo -n "Enter a number from 1 to 2:"    (-n 表示不換行,此時游標停留在行尾)
              2) read
                  例:read ANS     (表示將使用者的輸入存放到變數ANS中)
              3) cat    (顯示檔案內容)
              4) 管道( | )    (一個程式的輸出作為另一個程式的輸入)
                  例:ls -l | grep "d"
              5) 檔案重新導向( >和>> )
                  例:ls -l > /tmp/a.txt    (將輸出的結果重寫到a.txt這個檔案中)
                        ls -l >> /tmp/a.txt   (將輸出的結果追加到a.txt這個檔案中,常用於記錄日誌)
              6) 標準輸入( $0 )、標準輸出( $1 )和標準錯誤( $2 )
                  採用檔案描述符($0、$1、$2)來定義。

        2、執行個體:readme.sh
                #!/bin/bash
                #readname.sh
                echo -n "First Name: "
                read firstname
                echo -n "Last Name: "
                read lastname subname
                echo -e "Your First Name is :${firstname}/n "             #加了-e表示將/n解析為逸出字元
                echo -e "Your Last Name is :${lastname}/n "
                echo -e "Your Subname is :${subname}/n "
                echo "Your First Name is :${firstname}/n " >>firstname.txt        #這行沒加-e,因此在輸出中會原樣顯示/n
                echo  "Your Last Name is :${lastname}/n " >lastname.txt
                echo  "Your Subname is :${subname}/n " >&1

五、文本過濾

        1、Regex    (就是模式比對)
        2、find    (尋找檔案)
              例:find ./ -name "*.txt" -print
        3、grep    (尋找字元)
              例:grep "[5-8][6-9][0-3]" access_log
        4、awk    (把一系列資料分域,即分成列)
              例:awk '{print $1"/t"$4}' access_log
        5、sed    (對資料進行尋找和替換)
              例:sed  -n 's/chinaitlab/hello/p' myfile.txt    (將myfile.txt檔案中的chinaitlab替換成hello,並列印到螢幕上來,s表示替換,p表示列印。如果加上重新導向符就可以將替換後的內容輸出到一個檔案中去。)
        6、sort    (排序)
              例:sort ip.txt
        7、uniq    (顯示這一列是唯一的還是不唯一的,可以唯一化)
              例:uniq ip.txt
        8、split    (可以對檔案進行分割)
              例:split myfile.txt
        9、執行個體:kill_process.sh
                #!/bin/bash
                #kill_process.sh
                current_PID=$$
                ps -aux|grep "/usr/sbin/sshd"|grep -v "grep"|awk '{print $2}'>/tmp/${current_PID}.txt
                for pid in `cat /tmp/${current_PID}.txt`
                do
                {
                     echo "kill -9 $pid"
                     kill -9 $pid
                }
                done
                rm -f /tmp/${current_PID}.txt

六、Shell函數

        1、定義函數有兩種格式,分別為:
                函數名()
                { 
                     命令1 
                     ... ... 
                }
                function 函數名()
                { 
                     ... ... 
                }

        2、執行個體:func.sh
                #!/bin/bash
                #func.sh 
                # Source function library.            # /etc/rc.d/init.d/functions中存放了大量已經寫好的函數
                . /etc/rc.d/init.d/functions            # 引入/etc/rc.d/init.d/functions中的函數,相當於其它語言中的include
                function hello ()
                {  
                echo "Hello,$1 today is `date`"
                } 
                echo "now going to the function hello" 
                hello chinaitlab
                echo "back from the function"

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.