命令列參數,
positional parameter
$0
完整程式名
(basename
命令可去掉路徑
)
$1
第一個參數,超出
9
時
${10}
$#
參數個數
$*
命令列中的所有參數,作為一個單詞
$@
命令列中的所有參數,作為多個單詞
$$
當前
shell
的
PID
$- shell
的一些屬性
$!
前一個後台進程的
PID
echo
`basename $0`
#
獲得程式名
echo
${!#}
#
獲得最後一個參數
for((i=1;
i<=$#; ++i)); do
#
遍曆參數
echo ${!i}
#{}
中不能用
$
,可使用
!
替代
done
for a
in $@; do
#
另一種遍曆的方法,
$@
換成
$*
也可以
echo $a
done
shift
命令
改變命令列參數的相對位置,預設左移
1
位,即
$3
變成
$2
,
$2
變成
$1
,
$1
被丟棄
eg:
另一種遍曆參數的方法
while
[ -n "$1" ]; do
echo $1
shift
done
getopts
分析參數
read
,擷取使用者輸入
read
#
讀入到變數
$REPLY
中
read name
#
讀入到
name
read -p "input your name:" name
#
帶提示的
read
read name age
#
讀入以空格分隔的多個變數
read -t 5 name
#
等待
5
秒,逾時返回失敗
if
read -t 5 name, then
read
-n1 -p "input [Y/N]" answer
#
設定讀入的字元數——讀入一個字元,這樣無須斷行符號,在
emacs
下失敗,但終端可以
read
-s -p "input pwd" pwd
#
不顯示輸入,
emacs
下失敗,但普通終端可以
read
,讀入檔案
一次讀入
1
行,不能直接以檔案名稱為參數,需要使用
cat
等命令
cat
a.txt | while read line
#read
重新導向的一個應用吧?
do
echo $line
done
輸出
printf "format" a1 a2 ...
eg:
printf "af 0x%x" 11
#
格式控制符同
c