linux 命令詳解 二十四

  11.  數組:

    Shell中提供了創建一維數組的能力,你可以把一串數字、名字或者文件放在一個變量中。使用declare-a選項即可創建它們,或者在變量後面增加下標操作符直接創建。和很多其它開發語言一樣,Shell中的數組也是0開始的,然而不同的是Shell中數組的下標是可以不連續的。獲取數組中某個元素的語法格式爲${arrayname[index]}。見如下示例:
    /> declare -a friends                   #聲明一個數組變量
    /> friends=(sheryl peter louise)   #給數組變量賦值
    /> echo ${friends[0]}                #通過數組下標的方式訪問數組的元素
    sheryl
    /> echo ${friends[1]}
    peter
    /> echo ${friends[2]}
    louise
    /> echo ${friends[*]}                #下標中星號表示所有元素。
    shery1 peter louise
    # 
${#array[*]}表示數組中元素的數量,而${#friend[0]}則表示第一個元素的長度。
    /> echo ${#friends[*]}    
    3
    /> unset friends                         #unset array清空整個數組,unset array[index]僅清空指定下標的元素。

    /> x[3]=100
    /> echo ${x[*]}
    100
    /> echo ${x[0]}                        #0下標的元素並沒有被賦值過,因爲輸出爲空。

    /> echo ${x[3]}
    100
    /> states=(ME [3]=CA [2]=CT)   #ME的下標爲0
    /> echo ${states[0]}
    ME
    /> echo ${states[1]}                 #數組下標爲1的位置沒有被賦值過,因此沒有輸出。

    /> echo ${states[2]}
    CT
    /> echo ${states[3]}
    CA

    12.  函數:
    
C語言一樣,Shell中也可以創建自己的自定義函數。其格式如下:
    function_name () { commands; commands; }
    function function_name { commands; commands; }
    function function_name () { commands; commands; }
    
函數的參數在函數內是以$[0-9]${10}...,這種局部變量的方式來訪問的。見下面的示例:

    #函數的左花括號和命令之間必須有至少一個空格。每個命令的後面都要有一個分號,即便是最後一個命令
    /> function greet { echo "Hello $LOGNAME, today is $(date)"; }
    #
此時函數已經駐留在當前的bash shell中,因此使用函數效率更高。
    /> greet   
    Hello root, today is Fri Nov 18 20:45:10 CST 2011
    /> greet() { echo "Hello $LOGNAME, today is $(date)"; }
    /> greet
    Hello root, today is Fri Nov 18 20:46:40 CST 2011
    #welcome
函數內部使用了函數參數。
    /> function welcome { echo "Hi $1 and $2"; }
    /> welcome stephen jane    
    Hi stephen and jane
    #declare -F
選項將列出當前Shell中駐留的函數
    /> declare -F
    declare -f greet
    declare -f welcome
    #
清空指定的函數,使其不在Shell中駐留。
    /> unset -f welcome

        13.  重定向:

    下面的列表爲Shell中支持的重新定向操作符。

操作符

功能

<

 

重新定向輸入

>

 

重新定向輸出

>>

 

追加輸出

2>

重新定向錯誤

&>

重新定向錯誤和輸出

>&

重新定向錯誤和輸出

2>&1

重新定向錯誤到標準輸出

1>&2

重新定向標準輸出到錯誤

>|

重新定向輸出的時候覆蓋noclobber選項


    #find
命令將搜索結果輸出到foundit文件,把錯誤信息輸出到/dev/null
    /> find . -name "*.c" -print > foundit 2> /dev/null
    #
find命令的搜索結果和錯誤信息均輸出到foundit文件中。
    /> find . -name "*.c" -print >& foundit
    #
同上。
    /> find . -name "*.c" -print > foundit 2>&1
    #echo
命令先將錯誤輸出到errfile,再把信息發送到標準錯誤,該信息標準錯誤與標準輸出合併在一起(errfile)
    /> echo "File needs an argument" 2> errfile 1>&2

    C語言一樣,Shell中也可以創建自己的自定義函數。其格式如下:
    function_name () { commands; commands; }
    function function_name { commands; commands; }
    function function_name () { commands; commands; }
    
函數的參數在函數內是以$[0-9]${10}...,這種局部變量的方式來訪問的。見下面的示例:

    #函數的左花括號和命令之間必須有至少一個空格。每個命令的後面都要有一個分號,即便是最後一個命令
    /> function greet { echo "Hello $LOGNAME, today is $(date)"; }
    #
此時函數已經駐留在當前的bash shell中,因此使用函數效率更高。
    /> greet   
    Hello root, today is Fri Nov 18 20:45:10 CST 2011
    /> greet() { echo "Hello $LOGNAME, today is $(date)"; }
    /> greet
    Hello root, today is Fri Nov 18 20:46:40 CST 2011
    #welcome
函數內部使用了函數參數。
    /> function welcome { echo "Hi $1 and $2"; }
    /> welcome stephen jane    
    Hi stephen and jane
    #declare -F
選項將列出當前Shell中駐留的函數
    /> declare -F
    declare -f greet
    declare -f welcome
    #
清空指定的函數,使其不在Shell中駐留。
    /> unset -f welcome

    13.  重定向:
    
下面的列表爲Shell中支持的重新定向操作符。                                           

 

操作符

功能

<

 

重新定向輸入

>

 

重新定向輸出

>>

 

追加輸出

2>

重新定向錯誤

&>

重新定向錯誤和輸出

>&

重新定向錯誤和輸出

2>&1

重新定向錯誤到標準輸出

1>&2

重新定向標準輸出到錯誤

>|

重新定向輸出的時候覆蓋noclobber選項

 


    #find
命令將搜索結果輸出到foundit文件,把錯誤信息輸出到/dev/null
    /> find . -name "*.c" -print > foundit 2> /dev/null
    #
find命令的搜索結果和錯誤信息均輸出到foundit文件中。
    /> find . -name "*.c" -print >& foundit
    #
同上。
    /> find . -name "*.c" -print > foundit 2>&1
    #echo
命令先將錯誤輸出到errfile,再把信息發送到標準錯誤,該信息標準錯誤與標準輸出合併在一起(errfile)
    /> echo "File needs an argument" 2> errfile 1>&2
    /> cat errfile
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章