Linux Shell編程學習筆記(5)

Linux Shell編程學習筆記(2015-7-20)

分類:linux shell

一:shell函數

  同大多數高級語言一樣,在shell腳本中可以定義並調用函數。函數的定義格式爲:

[function] 函數名()
{
    命令表
}

  在shell中函數必須先定義再使用。函數定義之後可以被調用任意多次。調用函數時,直接使用函數名,不必帶上圓括號,就像使用命令一樣。調用函數不會產生新的進程,而是在shell腳本所屬的進程內執行。
  shell腳本可以利用位置變量向函數傳遞數據。另外,在函數體內可以訪問腳本中任何定義在函數外面的變量,但是不能訪問其它函數內用local關鍵字定義的局部變量。通常,函數中最後一個命令執行完之後,函數即退出。也可以使用return命令在任意位置退出函數(與C語言是類似的)。

    biantiao@lazybone1994-ThinkPad-E430:~/sh$ cat shellFunction.sh
    #! /bin/bash

    output()
    {
        echo "--------------------"
        echo $a $b $c
        echo $1 $2 $3
        echo "--------------------"
    }

    input()
    {
        local y

        echo "Please input value of x and y"
        read x y
    }

    a="Working directory"
    b="is"
    c=`pwd`

    output You are welcome

    x=
    input
    echo "Value of x is $x, value of y is $y"

    biantiao@lazybone1994-ThinkPad-E430:~/sh$ ./shellFunction.sh
    --------------------
    Working directory is /home/biantiao/sh
    You are welcome
    --------------------
    Please input value of x and y
    2 3
    Value of x is 2, value of y is 
    biantiao@lazybone1994-ThinkPad-E430:~/sh$ source shellFunction.sh
    --------------------
    Working directory is /home/biantiao/sh
    You are welcome
    --------------------
    Please input value of x and y
    2 3
    Value of x is 2, value of y is 
    biantiao@lazybone1994-ThinkPad-E430:~/sh$ 

說明:由於y是一個由local聲明的局部變量,在函數體外不具有可見性,因此最後輸出的y爲空。

二:shell內部命令

  迄今爲止,接觸過了許多shell內部命令,這裏再介紹幾個重要的shell內部命令。

eval命令

格式:
eval [參數]
  eval命令會首先掃描參數,所有的參數被讀取並連接成一個字符串,然後eval再將該字符串當成命令來執行。例如:

biantiao@lazybone1994-ThinkPad-E430:~/sh$ var="wc -l for1.sh"
biantiao@lazybone1994-ThinkPad-E430:~/sh$ eval $var
11 for1.sh
biantiao@lazybone1994-ThinkPad-E430:~/sh$ 

exec命令

格式:
exec [arg...]
  它在本shell中執行由參數arg指定的命令,該命令將替代本shell進程,即執行命令後命令行shell將不復存在,命令退出整個shell就退出了。

readonly命令

格式:
readonly [name...]
  readonly命令給定的name(變量名)是隻讀的,如果沒有給定參數,則列出所有隻讀變量的清單。使用readonly標記變量等價於使用了declare -r標記。

trap命令

格式:
trap [arg] [n]...
  arg是當shell收到信號n時所讀取並執行的命令。當設置trap時,arg被掃描一次。在trap被執行時,arg也被掃描一次。所以通常用單引號把arg對應的部分括起來。trap命令可用來設定接收到某個信號所完成的動作,忽略某個信號的影響或者恢復信息產生時系統的預設動作。
  trap命令按信號的順序執行。允許的最高信號碼是16.試圖對當前shell已忽略的信號設置trap無效;試圖對信號11(內存故障)設置trap,則產生錯誤。trap命令有以下幾個常用的用法:
- 爲某些信號指定處理的方式。例如:

biantiao@lazybone1994-ThinkPad-E430:~$ trap 'echo "breaking signal got" > ~/exit.txt' 0 1 2 3 15

說明:當shell腳本收到信號0(從shell退出),信號1(掛起),信號2(中斷),信號3(退出)或信號15(過程結束)時,都將執行由單引號括起來的命令,即在家目錄下創建一個exit.txt文件,其中記錄了接收到信號的提示和時間。

  • 指定arg爲空串以忽略信號。例如:
biantiao@lazybone1994-ThinkPad-E430:~$ trap 0 1 2 3 15

說明:本設置忽略所有的0 1 2 3 15信號。

  • 不指定arg,把所有的信號的動作恢復到原來系統默認的動作。例如:
biantiao@lazybone1994-ThinkPad-E430:~$ trap 0 1 2 3 15

wait命令

格式:
wait [n]
  wait命令等待進程ID爲n的進程終止,並報告終止狀態,如果沒有指定n,則等待當前所有的活動的子進程終止。wait命令的返回碼始終是0。

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