標籤:io 使用 ar for 檔案 資料 sp on c
在shell指令碼中處理linux輸入主要有三種形式:
1)將他們像命令列參數一樣處理,通過對應的位置參數來擷取對應的輸入參數
2)通過getopt和getopts這兩個命令
3)通過read命令以互動的方式擷取使用者的輸入參數
1.通過對應的位置參數擷取
shell中的位置參數的計算是從0開始的依次往後加1對應使用者的輸入參數;例如$0對應的是使用者的程式名,$1對應的第一個參數,$2為第二個參數,依次類推直到第10個參數以後則應用花括弧將對應的位置參數包裹的擷取方式為${10}。
$#,$*,[email protected]在為參數中有著特殊的含義:
$#統計輸入的參數的總數這個總數不包含程式名
$*將使用者的輸入所有參數當成一個單詞返回
[email protected]將所有變數儲存為單個單詞。
但是${$#}這中方式擷取最後一個輸入參數將返回一個錯誤的值,正確的方式為${!#}
通過shift命令可以將對應參數的參數向前移動一位通過shift可以遍曆使用者輸入的參數
count=1
while [ -n "$1" ]
do
echo "Parameter #$count = $1"
echo "Parameter \$0 #$count=$0"
count=$[ $count + 1 ]
shift
done
shift將$2後一位移動到了$1而$1上的參數將會被刪除而不會被移到$0上面。
2)getopt和getopts命令
getopt和getopts允許使用者可以按照linux的命令格式輸入資料,getopt和getopts的使用格式大體相似。getopt命令將原命令參數格式化傳給set命令替換原始的命令列參數。使用的格式如下:
set -- `getopt ab:c "[email protected]"` :表示對應的b選項後面需要帶參數
同時getopt是以--符號來區分選項參數和輸入的傳輸的。
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;;
-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 #$count: $param"
count=$[ $count + 1 ]
done
輸入-ac –b test1 test2 經getopt格式化後輸出為-a -c -b test1 -- test2。
getopts與getopt略有不同。如果選項需要跟一個參數,這個參數將會儲存到OPTARG環境變數中。OPTIND環境變數儲存了參數列表中getopts正在處理的參數位置。
對應的事列如下:
while getopts ab:c opt
do
case "$opt" in
a) echo "Found the -a option";;
b) echo "Found the -b option,with value $OPTARG";;
c) echo "Found the -c option";;
*) echo "Unknow option: $opt";;
esac
done
shift $[ $OPTIND - 1]
count=1
for param in "[email protected]"
do
echo "Parameter $count:$param"
count=$[ $count + 1 ]
done
3) 通過read命令以互動的方式擷取使用者的輸入參數
read -t 5 -p "Enter a numer:" opt
-t 設定逾時時間
-p輸出互動字串提示符,使用者的輸入將被儲存到opt變數中。如果沒有設定opt變數,使用者的輸入變數將會儲存到$REPLY環境變數中
-s將屏蔽使用者輸入的回想。
count=1
cat testcommand.sh | while read line
do
echo "Line $count: $line"
count=$[ $count + 1 ]
done
用read來讀取檔案裡儲存的資料,read命令每次會從檔案中讀取一行文本。
Linux Shell使用者輸入--整理