假设我有一个像这样的脚本:(我们称它为test.sh)
#!/bin/sh
function php() {
printf "The rhost is ${RHOST} and the lport is ${LPORT}"
}
while getopts "hr:l:s:" arg; do
case $arg in
h)
printf "Usage\n"
;;
r)
RHOST=$OPTARG
;;
l)
LPORT=$OPTARG
;;
s)
SHELL=$OPTARG
if [[ "$SHELL" == "php" ]] || [[ "$SHELL" == "PHP" ]] ; then
php
fi
;;
esac
done
如果我运行“ test.sh -r 10 -l 4 -s php”之类的脚本
我的脚本将按照我的意愿执行...
但是,如果我将其运行为“ test.sh -s php -r 10 -l 4”
rhost和lport变量永远不会进入php函数。我意识到这是因为它首先被调用。但是,我的问题是,如何编写脚本,以便无论参数运行的顺序如何,我仍然可以使用rhost和lport作为变量?
我也尝试过使用shift,但是我猜这不是答案,或者我将shift命令放在错误的位置。
答案 0 :(得分:4)
将“ if”逻辑移出开关/案例:
#!/bin/sh
function php() {
printf "The rhost is ${RHOST} and the lport is ${LPORT}"
}
while getopts "hr:l:s:" arg; do
case $arg in
h)
printf "Usage\n"
;;
r)
RHOST=$OPTARG
;;
l)
LPORT=$OPTARG
;;
s)
SHELL=$OPTARG
;;
esac
done
if [[ "$SHELL" == "php" ]] || [[ "$SHELL" == "PHP" ]]
then
php
fi