位置参数可以用shift命令左移。
比如shift 3
表示原来的$4
现在变成$1
,原来的$5
现在变成$2
等等,将原来的$1
、$2
、$3
丢弃,$0
不移动。
不带参数的shift命令相当于shift 1
。
非常有用的 Unix 命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数一起赋值给变量$*
。若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1
后为 $2
,在 $2
后面为 $3
等。在 shift 命令执行前变量 $1
的值在 shift 命令执行后就不可用了。
如在脚本可以如下操作
opt=$1
shift 1
if [[ $# -ne 0 ]]; then
set $@
fi
用户使用脚本需要若干个参数,其中第一个参数作为选择参数,在脚本读入第一个参数之后,将后面的参数统一向左移动一位,如果后面参数个数不为0,以数组的形式赋值,此时输入时第2个到第n个参数变为$1
~$n-1
对于参数部分的判断
case $opt in
config)
if [[ $# -lt 4 ]]; then
echo "Malformed arguments for config: $@"
usage >&2
exit 1
fi
conf $@
;;
remove)
if [[ $# -ne 2 ]]; then
echo "Malformed arguments for remove: $@"
usage >&2
exit 1
fi
rmv $@
;;
-h | --help)
usage
;;
*)
usage >&2
exit 1
;;
esac
用一个usage函数来解释脚本如何使用。
其中>&2
也就是把结果输出到和标准错误一样,当参数个数不对时,将会显示usage并退出程序。
而在每个执行函数中,需要用local指定变量
conf ()
{
local name=$1
local service=$2
…
…
}