shell語法基礎

1、變量linux

一、linux大小寫敏感,變量取名要注意大小寫。能夠經過變量名前面加$來訪問變量的內容。能夠經過使用read命令來將用戶輸入的值賦給一個變量。正則表達式

二、給變量賦值時,若是字符串中包含空格,就必須用引號把他們引發了,還要注意在等號兩邊不能有空格。shell

三、變量在雙引號中會用變量值替換,而在單引號中就不會替換,也能夠經過轉義字符\來取消$的特殊含義。vim

例:myvar=「Hi there!」函數

    echo $myvar測試

    echo "$myvar"this

    echo ' $myvar'spa

    echo \$myvar命令行

將會輸出以下:Hi there!orm

              Hi there!

              $myvar

              $myvar

四、環境變量:環境變量一般用大寫字母作名字,爲了與環境變量區別開來,用戶自定義變量通常都用小寫字母。

       經常使用的環境變量有:

         

       

2、控制結構

一、shell的布爾判斷命令[或test。test的三種條件類型:字符串比較、算術比較和文件有關的條件測試。

 

 

 

 

 

二、控制結構

Ø if語句:

      if  condition

      then

           statements

      else

            Statements

       Fi

例:#!/bin/sh

    if [ -f /root/cherie_test/test_path.sh ];then

       echo "/root/cherie_test/test_path.sh exists"

    fi

 

    if [ -d /root/cherie_test/test_path.sh ];then

       echo "/root/cherie_test/test_path.sh is a director"

   else

      echo "/root/cherie_test/test_path.sh  is not a directory"

   fi   

解析:[ ]先後都要有空格,否則會報[: missing `]'錯誤;if與[之間也須要有空格,沒有的話會報syntax error near unexpected token `then'錯誤。

 

Ø  elif語句。對if語句的進一步測試。

     例:#!/bin/sh

 

         echo "Is it morning? Please answer yes or no "

         read timeofday

 

         if[ $timeofday = "yes"]; then

            echo "Good morning"

            exit 0

         elif [ $timeofday = "no" ];then

            echo "Good afternoon"

            exit 0

         else

            echo "Sorry,$timeofday not recognized. Enter yes or no "

            exit 1 //異常退出

        fi

解析:elif會對在第一個if條件不知足的狀況下進行進一步測試,若是兩次測試的結果都不成功,就打印出一條錯誤信息並以1爲退出碼退出。

 

Ø  for 語句。語法格式:for variable invalues

                         do

                             Statements

                          done

例:#!/bin/sh

    for file in $(ls f*.sh); do

        lpr $file

done

exit0

解析:打印當前目錄中全部以字母f開頭的腳本文件。for的參數來着$()中的命令的輸出結果,shell擴展f*.sh給出全部匹配此模式的文件的名字。此例中可能會報錯lpr: error - scheduler not responding!這是vim配置問題。

 

Ø while 語句。語法格式: while condition do

                                 Statements

                           Done

例:#!/bin/sh

   foo=1

   whlie [ "$foo" -le 20 ]

   do 

      echo "Here we go again"

      foo=$(($foo+1))

   done

   exit 0

解析:測試foo的值,若是它小於20就執行循環體,-le表示小於。

算表達式的使用: count=1

                 count=$[${count} + 1] 變量加1

 

Ø until語句。語法格式:until condition

                         do

                           Statements

                         Done

  它與while循環很類似,只是把條件測試反過來,循環將執行直達條件爲真爲止,而不是條件爲真時反覆執行。

 

Ø case 語句。語法格式case variable in

                       pattern statements;;

                       pattern statements;;

                       ...

                       esac 

 注意,每一個模式行都以雙分號結尾。

例:#!/bin/sh

    echo "Is it morning?Please answer yes or no"

    read timeofday

    case "$timeofday" in

         yes|y|Yes|YES) 

                  echo "Good morning"

                  echo  "Up bright and early this morning"

                   ;;

      n*|N*) echo "Good afternoon";;

      *)   echo "Sorry ,answer not recognized";;

    esac

 

exit 0

解析:case語句被執行時,會把timeofday的內容與各個字符串依次進行比較。一旦某個字符串輸入匹配成功,case命令就會執行緊隨右括號後面的代碼。case命令會對用來作比較的字符串就行正常的通配符擴展,所以能夠指定字符串的一部分在其後加上*通配符,如n*;只使用一個單獨的*表示匹配任何可能的字符串。

 

3、函數

一、函數的定義。咱們只需簡單的寫出它的名字,而後是一對空括號,再把有關的語句放在一對花括號中,如:function_name () {

                                  Statements

                                 }

例:#!/bin./sh

foo () {

       echo "Function foo is executing"

  }

echo"script starting"

foo

echo "script ended"

exit 0

 

運行結果以下: script starting 

               Function foo is executing

               script ended

 

解析:當遇到foo()結構時,它知道定義了一個名爲foo的函數。當執行到foo行時,shell就知道應該去執行剛纔定義的函數。

注:在調用一個函數以前必須先對它進行定義。

 

4、命令

Ø break 命令。終止循環

Ø :命令。冒號(:)命令是一個空命令。它偶爾會被用於簡化條件邏輯,至關於true的一個別名。因爲它是內置命令,因此它運行的比true快,但它的輸出可讀性較差。 

Ø continue命令。使for、while或until循環跳到下一次循環繼續執行。continue能夠帶一個可選的參數以表示但願繼續執行的循環嵌套層數,也就是說你能夠部分的跳出嵌套循環。

Ø .命令。點(.)命令用來執行當前shell中的命令。

Ø  echo命令。使用echo命令來輸出結尾帶有換行符的字符串。 經常使用 echo -n來去掉換行符。

Ø eval命令。eval命令容許你對參數進行求值,有點像一個額外的$。

Ø exec命令。將當前shell替換爲一個不一樣的程序,腳本程序中exec命令後面的代碼都不會執行。

Ø exit n命令。exit命令使腳本程序以退出碼n結束運行。,退出碼0表示成功,退出碼1~125是腳本程序使用的錯誤代碼。

Ø export命令。export命令將做爲它參數的變量導出到子shell中,並使之在子shell中有效。在默認狀況下,在一個shell中被建立的變量在這個shell調用的下級(子)shell中是不可用的。export命令把本身的參數建立爲一個環境變量,而這個環境變量能夠被其餘腳本和當前程序調用的程序看見。

例:腳本export 2                      

       

   腳本export1

 

第一個空行的出現是由於變量foo在export2中不可用,因此$foo被賦值爲空,echo一個空變量將輸出一個空行。Bar用export聲明後在export1中仍然有效。

Ø expr命令。expr命令將它的參數看成一個表達式來求值。

Ø printf命令。語法:printf 「format string」 paremeter1 paremeter2

它支持的轉義序列:

 

Ø return命令。return命令的做用是使函數返回。

Ø set命令。set命令的做用是爲shell設置參數變量。還能夠經過set命令和它的參數來控制shell的執行方式。其中最經常使用的命令格式是set -x,它讓一個腳本程序跟蹤顯示它當前執行的命令。

Ø shift命令。shift命令把全部參數變量左移一個位置,使$2變成$1,$3變成$2,依此類推。

Ø trap命令。用於指定在接收到信號後將要採起的行動。trap命令的參數分爲兩部分,前一部分是接收到指定信號時將要採起的行動,後一部分是要處理的信號名,trap command signal。

Ø unset命令。unset命令的做用是從環境中刪除變量或函數。

Ø find 命令。查找文件的功能。語法格式:find [path] [option] [tests] [actions] 

一些經常使用的選項:

 

 

測試部分,能夠提供給find命令的測試很是多,每種測試返回的結果有兩種可能:true或false。find命令開始工做時,它按照順序將定義的每種測試依次應用到它搜索到的每一個文件上。

 

 

咱們還能夠用操做符來組合測試。大多數操做符有兩種格式:短格式和長格式,

 

常見的動做:

 

 

Ø grep命令。使用grep命令在文件中搜索字符串。grep語法格式:grep[option] pattern [FILES] 若是沒有文件名,則搜索標準輸入。

grep命令的一些主要選項:

 

 

5、正則表達式

特殊字符:

 

若是你想將上述字符用做普通字符,就須要在它們前面加上\字符。因此,若是你想使用$字符,只須要簡單的將它寫爲\$。 

在方括號中還可使用一些有用的特殊匹配模式,

 

 

匹配字符:

 

 

跟蹤腳本程序中複雜錯誤的主要方法是設置各類shell選項。爲了完成這一任務,你能夠在調用shell時加上命令行選項,各類shell選項:

相關文章
相關標籤/搜索