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