<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 一葉笑天 閱讀(358) 評論(0)  編輯  收藏 所屬分類: Shell技術
    主站蜘蛛池模板: 亚洲成A人片在线观看WWW| 亚洲小视频在线播放| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲精品美女久久777777| 九九免费久久这里有精品23| 日本最新免费不卡二区在线| 亚洲日韩久久综合中文字幕| 毛片免费观看网站| 亚洲一区二区三区高清在线观看| 99久久这里只精品国产免费| 亚洲人成影院77777| 久久久久国产精品免费免费搜索| 亚洲资源最新版在线观看| 国产精品视频免费一区二区| 亚洲狠狠狠一区二区三区| h视频在线免费看| 亚洲看片无码在线视频| 在线免费观看视频你懂的| 亚洲小说图区综合在线| 国产真实伦在线视频免费观看| 国产成人人综合亚洲欧美丁香花 | 无码永久免费AV网站| 久久亚洲精品国产亚洲老地址| 久久WWW免费人成人片| 亚洲av无一区二区三区| 亚洲AV网站在线观看| 97在线免费视频| 亚洲日本中文字幕区| 国产精品久久免费| 亚洲国产无线乱码在线观看 | 四虎亚洲国产成人久久精品| 13一14周岁毛片免费| 国产亚洲福利精品一区二区| 亚洲毛片基地4455ww| 久久精品国产亚洲AV麻豆~| 免费A级毛片在线播放不收费| 大地资源网高清在线观看免费 | 亚洲午夜精品一区二区| 日韩激情淫片免费看| 日韩在线免费电影| 有码人妻在线免费看片|