【发布时间】:2018-11-18 16:36:12
【问题描述】:
我有一个带参数的shell脚本,下面是代码..
现在它只接受如果这样调用的参数:script.sh --mode=load(或-m=load)
有没有办法修改它,以便可以使用或不使用“=”符号调用它,以便我可以调用:script.sh --mode load(或-m load)
理想情况下需要在纯 bash 中工作,因为我无权安装其他工具等。
for i in "$@"
do
case $i in
-m=*|--mode=*)
MODE="${i#*=}"
if [[ $MODE =~ ^(dump|load)$ ]]; then
echo "" > /dev/null
else
bark "Invalid --mode set, set this to dump or load.";
exit 1
fi
;;
-p=*|--db-path=*)
DBPATH="${i#*=}"
;;
-d=*|--dump-dir=*)
DUMPDIR="${i#*=}"
;;
-l=*|--list-file=*)
TABLES="${i#*=}"
# check if file exists on disk
if [ -e $TABLES ]
then
echo "" >> /dev/null
else
bark "Table file not found!";
exit 1
fi
;;
-t=*|--tenant-name=*)
TENANT="${i#*=}"
# check if tenant is correct
if [[ $TENANT =~ ^($TENANT_LIST)$ ]]; then
echo "" >> /dev/null
else
bark "Tenant name does not match, aborting.";
exit 1
fi
;;
-s|--shared)
SHARED=YES
;;
*) usage # unknown option
;;
esac
done
我的 bash 版本:
bash --version
GNU bash,版本 4.3.22(1)-release (powerpc-ibm-aix5.1.0.0)
【问题讨论】:
-
不要重新发明轮子。如果要支持长选项,请安装 GNU
getopt命令。 -
不知道你运行的是哪个版本的AIX,但是在我这里的V6上,getopt是默认安装的。