我正在创建一个有自己的命令(或选项)的 shell 脚本。简而言之,我用于执行脚本的命令行是(在终端中):./myscript.sh -o:1,2,3,4
或 ./myscript.sh -e:2,3,4
。到目前为止,代码(选项部分)如下所示:
myscript.sh
for i
do
case "$i" in
"-o:"*|"--only:"*)
# check if 1 is not included (if it is then exit)
;;
"-e:"*|"--except:"*)
# check if 1 is excluded (if it is then exit)
;;
*)
echo -e "invalid option\nTry './audit.sh --help' for help"
exit
;;
esac
done
说明:
此代码的目的是对用户通过 ./myscript.sh -o:1,2,3,4
传递的所有值求和,或减去 ./myscript.sh -e:2,3,4
的值。 o
是“唯一”选项,它仅将从此选项传递给脚本的数字相加。 e
是“排除”选项,它排除用户定义的值并从 100 中减去这些值。
我有一个限制,即数字 1 必须始终存在(无论是加还是减)。所以我不能排除数字 1。以下是非法用户输入命令 (./myscript.sh -e:1,2,3,4
) 和 (./myscript.sh -o:2,3,4
) 的一些示例。
如何检查数字 1 是否始终包含在 only
选项中,以及数字 1 是否未从 exclude
选项中排除?谢谢。
编辑:我想要采用的方法是使用awk
。有什么建议吗?
最佳答案
- 获取要检查的值
- 前后加逗号
- 检查
,1,
是否为子字符串
实现:
i="--only:3,4,5"
value=${i#*:} # Strip prefix up to colon
if [[ ,$value, == *,1,* ]] # Check if ,1, is a substring
then
echo "You have a 1 in your list."
else
echo "You're missing 1"
exit 1
fi
要反转检查排除,您可以使用!=
。
关于linux - 在 bash 中执行 shell 脚本时如何控制用户定义的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24459968/