gpt4 book ai didi

bash - 带参数的shell脚本?

转载 作者:行者123 更新时间:2023-11-29 09:31:09 25 4
gpt4 key购买 nike

我有一个带参数的 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 版本:

庆典--版本

GNU bash,版本 4.3.22(1)-release (powerpc-ibm-aix5.1.0.0)

最佳答案

在 $@ 上循环。当 $1 为“-m”时,进行移位。所以在下一个循环中,$1 现在将成为 -m 选项的参数。

script.sh --mode load

# FIRST LOOP
$@ is "--mode load"
$1 is "--mode"
shift

# SECOND LOOP
$@ is "load"
$1 is "load"

如果您可以指定多个参数而不是像现在那样只指定一个参数,这也很有用。应该进行错误检查以验证您的参数值,如果用户在没有其他参数的情况下执行 script.sh --mode

关于bash - 带参数的shell脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50763640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com