位置參數
$0, $1, $2,等等...
位置參數,從命令列傳遞給指令碼,或者是傳遞給函數.或者賦職給一個變數.
(具體見Example 4-5 和Example 11-15)
$#
命令列或者是位置參數的個數.(見Example 33-2)
$*
所有的位置參數,被作為一個單詞.
注意:"$*"必須被""引用.
$@
與$*同義,但是每個參數都是一個獨立的""引用字串,這就意味著參數被完整地傳遞,
並沒有被解釋和擴充.這也意味著,每個參數列表中的每個參數都被當成一個獨立的
單詞.
注意:"$@"必須被引用.
具體見代碼:
#!/bin/bash
# arglist.sh
E_BADARGS=65
if [ ! -n "$1" ]
then
echo "Usage: `basename $0` argument1 argument2 etc."
exit $E_BADARGS
fi
echo
index=1
echo "Listing args with \"\$*\":"
for arg in "$*"
do
echo "Arg #$index = $arg"
let "index+=1"
done
echo "Entire arg list seen as single word."
echo
index=1
echo "Listing args with \"\$@\":"
for arg in "$@"
do
echo "Arg #$index = $arg"
let "index+=1"
done
echo "Arg list seen as separate words."
echo
index=1
echo "Listing args with \$* (unquoted):"
for arg in $*
do
echo "Arg #$index = $arg"
let "index+=1"
done
echo "Arg list seen as separate words."
exit 0
#!/bin/bash
echo 'begin work '
binHome=`dirname $0`
echo $binHome
cd $binHome
binHome=`pwd`
echo $binHome
workHome=${binHome}/..
echo $workHome
b=${workHome}/common/date.sh
echo $b
source ${workHome}/common/date.sh
index=1
for arg in $*
do
if [[ "x$arg" == "x" ]]; then
exit 1
else
case $index in
1)
loadDate=$arg
;;
2)
days=$arg
;;
*)
execFile=$arg
execDate=${loadDate}
for ((i=0;i<days;i=i+1))
do
bash ${execFile} ${execDate}
execDate=`dashDateAdd ${execDate} '1'`
done
;;
esac
let "index+=1"
fi
done
exit 0