天天看點

Linux Command Line and Shell Scripting Bible__第11章

Linux Command Line and Shell Scripting Bible__第11章

第11章  處理使用者輸入

向shell腳本傳遞資料的最基本方式是使用:指令行參數。

位置參數:$0為程式名稱,$1為第一個參數,$2為第二個參數,……直到$9為第9個參數。第9個變量之後,必須使用大括号将變量括起來,如${10}。

讀取程式名稱:傳遞給變量$0的字元實際上是程式的完整路徑,可通過basename指令隻傳回程式名稱。

# !/bin/bash

# using basename with the $0 parameter

name = `basename $0`

echo The command entered is : $name

傳回程式的名稱。

特殊變量  $#  中存儲執行腳本時包含的指令行參數的個數。

    雖然  $#  能傳回參數個數,但  ${$#}  卻不能得到最後一個指令行參數值。因為在大括号中不能使用美元符号,必須将美元符号替換為感歎号,即  ${!#}

$*    [email protected]    這兩個變量都是在一個變量中包含所有指令行參數。

    $* 将所有參數視為一個單詞

    [email protected] 分别對待每個參數

test

# !/bin/bash

# testing $* and [email protected]

count = 1

for param in " $* "

do

echo " \$* Parameter $count = $param

done

count = 1

for param in " [email protected] "

do

echo " \[email protected] Parameter $count = $param "

done

py - [email protected] - stage: ~/ work / Shell_prog$ . / test12 1 a 3 d

$ * Parameter 1 = 1 a 3 d

[email protected] Parameter 1 = 1

[email protected] Parameter 2 = a

[email protected] Parameter 3 = 3

[email protected] Parameter 4 = d

shift指令幫助操作指令行參數,能夠改變指令行參數的相對位置。

預設将每個參數變量左移一個位置。變量$3的值移給變量$2,變量$2的值移給$1,而變量$1的值則被丢棄(變量$0的值和程式名稱保持不變)。

處理選項:選項是由破折号引導的單個字母,它更心指令的行為。

代碼

# !/bin/bash

# extracting options and parameters

while [ - n " $1 " ]

do

case " $1 " in

- a) echo " Found -a options. " ;;

- b) echo " Found -b options. " ;;

- c) echo " Found -c options. " ;;

* ) echo " $1 is not an option. "

esac

shift

done

# ./test -a -b -c -d

Found - a option.

Found - b option.

Found - c option.

- d is not an option.

#

執行shell腳本時經常會遇到需要使用選項又需要使用參數的情況,在linux中的标準方式是通過特殊字元碼将二者分開,這個特殊字元碼是雙破折号(--)。shell使用雙破折号訓示清單的結束。

代碼

# !/bin/bash

# extracting command line options and values

while [ - n " $1 " ]

do

case " $1 " in

- a) echo " Found -a option. "

- b) param = $ 1

echo " Found -b option, with parameter valus $param. "

- c) echo " Found -c option. "

-- ) shift

break

* ) echo " $1 is not an option. "

esac

shift

done

count = 1

for param in " $1 "

do

echo " Parameter #$count: $param. "

count = $[ $count + 1 ]

done

代碼

# !/bin/bash

# extracting command line options and values with getopt

set -- `getopt - q ab:c " [email protected] " `

while [ - n " $1 " ]

do

case " $1 " in

- a) echo " Found the -a option. " ;;

- b) param = $ 2

echo " Found the -b option, with parameter value $param. "

shift 2 ;;

- c) echo " Found the -c option. " ;;

-- ) shift

break ;;

* ) echo " $1 is not an option. "

esac

shift

done

count = 1

for param in " [email protected] "

do

echo " Parameter #$1: $param "

count = $[ $count + 1 ]

done

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

擷取使用者輸入

read指令接受标準輸入(鍵盤)的輸入,或其他檔案描述符的輸入。得到輸入後,read指令将資料放入一個标準變量中。

-n  該選項抑制字元串結尾的新行符,允許使用者在字元串後面立即輸入資料,而不是在下一行中輸入

-p  允許在read指令行中直接指定一個提示

在read指令行中也可不指定變量,如果不指定變量,那麼read指令會将接收到的資料放置在環境變量REPLY中。

-t  指定一個計時器,指定read指令等待輸入的秒數。

-n1  提示read指令中要接收到一個字元就退出。

默讀

-s  能夠使read指令中輸入的資料不顯示在螢幕上(實際上,資料是顯示的,隻是read指令将文本顔色設定成了與背景相同的顔色)

讀取檔案

每調用一次read指令,都會讀取檔案中的一行文本。

轉載于:https://www.cnblogs.com/way_testlife/archive/2010/09/16/1827482.html

繼續閱讀