Shell脚本中shift的用法

tech2022-11-07  138

位置参数可以用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 … … }
最新回复(0)