<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一葉笑天
    雄關漫道真如鐵, 而今邁步從頭越。 從頭越, 蒼山如海, 殘陽如血。
    posts - 73,comments - 7,trackbacks - 0
     

    Bash Shell結構

    KornBash shells非常相似,但是還是有一些不同之處。Bash的結構如下所示。

    Bash Shell語法結構

    Shbang

    "shbang" 是腳本起始行,告訴kernel那個shell解析. #!位于行頭。例如#!/bin/bash

    注釋

    行注釋用#符號.例如:# This is a comment

    通配符

    例如*, ?, [ ] 用于文件名擴展。<, >, 2>, >>, | 符號用于IO和重定向和管道。為了保證這些符號不被解析,這個字符要被引起來。 例如:

    rm *; ls ??;  cat file[1-3];

    echo "How are you?"

    輸出顯示

    使用echo命令。使用`或者一對“”通配符。例如:

    echo "How are you?"

    局部變量

    局部變量作用于當前shellshell結束時局部變量失效.例如

    variable_name=value

    declare variable_name=value

    name="John Doe"

    x=5

    全局變量

    全局變量也稱為環境變量. 例如:內建的帶-x選項的聲明函數也可以設置為環境變量。可以用export使用。例如:

    export VARIABLE_NAME=value

    declare -x VARIABLE_NAME=value

    export PATH=/bin:/usr/bin:.

    從變量中提取值

    使用$.例如:

    echo $variable_name

    echo $name

    echo $PATH

    讀取用戶輸入

    使用read讀入一行。例如:

    EXAMPLE

    echo "What is your name?"

    read name

    read name1 name2 ...

    參數

    可以從命令行傳入參數。位置參數用于從腳本中接收值。例如:

    At the command line:

    $ scriptname arg1 arg2 arg3 ...

    在腳本中:

    echo $1 $2 $3

    位置參數

    echo $*

    所有位置參數

    echo $#

    位置參數號

    數組

    Bourne shell使用位置參數創建單詞列表。除了位置參數外, Bash shell支持數組語法,起始索引是0 Bash shell數組使用declare -a 命令創建。例如:

    set apples pears peaches  (positional parameters)

    echo $1 $2 $3

     

    declare -a array_name=(word1 word2 word3 ...)

    declare -a fruit=( apples pears plums )

    echo ${fruit[0]}

    算術

    C/TC shellsBourne shell, UNIX/Linux 命令的輸出可以指定到一個變量。Bash shell提供新的語法. 使用前端加$,例如:

    variable_name=`command`

    variable_name=$( command )

    echo $variable_name

     

    echo "Today is `date`"

    echo "Today is $(date)"

    算術

    Bash shells支持整數算術。declare -i 命名用于聲明一個整型變量。Korn shelltypeset命令也可以用于向后兼容。

    例如

    declare -i variable_name

    used for bash

    typeset -i variable_name

    can be used to be compatible with ksh

     

    (( n=5 + 5 ))

     

    echo $n

     

     

    操作符

    Bash shell 使用內建命令,類似于C語言。

    例如

    相等性:

    邏輯性:

    ==

    equal to

    &&

    and

    !=

    not equal to

    ||

    or

     

     

    !

    not

    關系型:

    > 

    greater than

    >=

    greater than, equal to

    < 

    less than

    <=

    less than, equal to

    條件語句

    If類似于C語言。if endif結束。 [[ ]] 用于模式匹配條件表達式。 [ ] 用于向后兼容Bourne shell例如:

    The if construct is:

    if  command

    then

       block of statements

    fi

     

    if  [[ expression  ]]

    then

       block of statements

    fi

     

    if  (( numeric expression  ))

    then

       block of statements

    else

       block of statements

     fi

     

     

    The if/else construct is:

    if  command

    then

       block of statements

    else

       block of statements

    fi

     

    if  [[ expression ]]

    then

       block of statements

    else

       block of statements

    fi

     

    if  ((  numeric expression ))

    then

       block of statements

    else

       block of statements

    fi

     

    The case construct is:

    case variable_name in

       pattern1)

          statements

             ;;

       pattern2)

          statements

             ;;

       pattern3)

             ;;

    esac

    case "$color" in

       blue)

          echo $color is blue

             ;;

       green)

          echo $color is green

             ;;

       red|orange)

          echo $color is red or orange

             ;;

       *) echo "Not a matach"

             ;;

    esac

    The if/else/else if construct is:

    if  command

    then

       block of statements

    elif  command

    then

       block of statements

    else if  command

    then

       block of statements

    else

       block of statements

    fi

    -------------------------

     

    if  [[ expression ]]

    then

       block of statements

    elif  [[  expression ]]

    then

       block of statements

    else if  [[  expression ]]

    then

       block of statements

    else

       block of statements

    fi

     

    --------------------------

     

    if  ((  numeric expression ))

    then

       block of statements

    elif  ((  numeric expression ))

    then

       block of statements

    else if  ((numeric expression))

    then

       block of statements

    else

       block of statements

    fi

    循環

    四種循環while, until, for, select.

    while循環后跟隨[],do關鍵字,代碼段,結束于done關鍵字。[[ ]]是新的測試操作符,老的[ ]仍舊向后兼容Bourne shell.

    until循環類似于while循環。

    for循環用于遍歷一個字列表。For循環后跟隨變量名,in關鍵字,字列表,代碼塊,結束于done關鍵字。

    select循環用于提示菜單選擇。

    循環控制命令是breakcontinue

    例如

    while command                                until

     command

    do                                           do

       block of statements                     

     block of statements

    done                                         done

    -------------------------                  

     ---------------------------

    while [[ string expression ]]                until

     [[ string expression ]]

    do                                           do

       block of statements                       block

     of statements

    done                                         done

    -------------------------                ----------------------------

    while (( numeric expression ))               until

     (( numeric expression ))

    do                                           do

       block of statements                        

     block of statements

    done                                         done

     

    for variable in word_list                  

     select variable in word_list

    do                                           do

       block of statements                       block

     of statements

    done                                         done

    --------------------------                 

     ----------------------------

    for color in red green b                   

     PS3="Select an item from the menu"

    do                                           do

     item in blue red green

       echo $color                               echo

     $item

    done                                         done

     

    Shows menu:

    1. blue
    2. red
    3. green

    函數

    函數有兩種格式.一種格式來自于Bourne shell, Bash版本使用function關鍵字:例如

    function_name() {

       block of code

    }

    function  function_name {

       block of code

    }

    ------------------------

    function  lister {

       echo Your present working directory is `pwd`

       echo Your files are:

       ls

    }

     

    Bash Shell腳本例子:

    1   #!/bin/bash

        # GNU bash versions 2.x

    2   # The Party Program––Invitations to friends from the "guest" file

    3   guestfile=~/shell/guests

    4   if [[ ! –e "$guestfile" ]]

        then

    5       printf "${guestfile##*/} non–existent"

            exit 1

        fi

    6   export PLACE="Sarotini's"

    7   (( Time=$(date +%H) + 1 ))

    8   declare -a foods=(cheese crackers shrimp drinks `"hot dogs"` sandwiches)

    9   declare -i  n=0

    10  for person in $(cat $guestfile)

        do

    11      if  [[ $person == root ]]

            then

                  continue

            else

                  # Start of here document

    12            mail –v –s "Party" $person <<- FINIS

                  Hi $person! Please join me at $PLACE for a party!

                  Meet me at $Time o'clock.

                  I'll bring the ice cream. Would you please bring

                  ${foods[$n] and anything else you would like to eat?

                  Let me know if you can make it.

                         Hope to see you soon.

                              Your pal,

                              ellie@$(hostname)

                  FINIS

    13            n=n+1

    14            if (( ${#foods[*]} ==  $n ))

                  then

    15               declare -a foods=(cheese crackers shrimp drinks `"hot dogs"`

                                       sandwiches)

    16            n=0

                  fi

            fi

    17  done

        printf "Bye..."

    解釋

    1. kernel知道在運行Bash shell腳本.
    2. 注釋行
    3. 變量guestfile被設置為文件的全路徑名,叫做guests.
    4. 行讀入
    5. 內建函數printf顯示文件名
    6. 全局環境變量
    7. 數字表達式
    8. Bash數組foods定義
    9. 整數n定于初始值為0
    10. For循環
    11. If語句
    12. 發送mail消息
    13. 整數n1
    14. If語句
    15. 數組foods重新分配值
    16. 變量n重新設置回0
    17. 循環結束
    posted on 2008-07-08 09:38 一葉笑天 閱讀(350) 評論(0)  編輯  收藏 所屬分類: Shell技術
    主站蜘蛛池模板: 日韩黄色免费观看| 中文字幕无码日韩专区免费| 13一14周岁毛片免费| 久久精品国产精品亚洲蜜月| 水蜜桃视频在线观看免费播放高清| 情人伊人久久综合亚洲| 在线看无码的免费网站| 涩涩色中文综合亚洲| 国产视频精品免费| 无遮挡国产高潮视频免费观看| 亚洲午夜av影院| 免费看少妇高潮成人片| 牛牛在线精品免费视频观看| 国产亚洲日韩在线三区| 午夜精品一区二区三区免费视频| 亚洲嫩草影院在线观看| 免费va人成视频网站全| 中国一级全黄的免费观看| 亚洲春色在线观看| 亚洲AV无码久久精品色欲| 国产L精品国产亚洲区久久| 免费A级毛片无码久久版| 永久免费视频v片www| 久久精品无码免费不卡| 亚洲电影在线播放| 国产在线19禁免费观看| 日美韩电影免费看| 日韩一级免费视频| 日美韩电影免费看| 免费成人黄色大片| 亚洲精品无码av天堂| 4399影视免费观看高清直播| 无码精品人妻一区二区三区免费看 | 国产高清免费观看| 国产无遮挡吃胸膜奶免费看| 日本无吗免费一二区| 日韩午夜免费视频| 又大又粗又爽a级毛片免费看| 免费人成网站7777视频| 亚洲天堂免费在线视频| 亚洲女同成av人片在线观看|