【发布时间】:2017-06-29 17:34:48
【问题描述】:
我想知道,是否可以使用不允许组合多个选项的 getopt 或 getopts 编写带有选项的 shell 脚本?
例如,我的脚本可以以两种可能的模式运行 - 长或短以及带有 alpha 或 beta 选项,这就是为什么我想使用 ./script.sh -l -a、./script.sh -l -b 或 ./script.sh -s -a、./script.sh -s -b,但它不能同时运行-l 和-s 或-a 和-b 这两个选项。
我知道它可以变得更容易,因为我可以让 option -a 运行 long version alpha、option -b 运行 long version beta、option -c 运行 short version alpha 和 @987654337 @ 将运行short version beta,但我想使用两个选项,只要了解这种方式是否可行。
请在下面找到带有“选项”的代码以选择使用简单的read,我想将其转换为getopt(s)
#!/bin/bash
echo "Please insert the text:"
read text
echo
echo "You entered $text"
echo "Choose version:
1) Long
2) Short
3) Quit
-> "
read option
# OPTION 1
if [ "$option" == "1" ]; then
echo "Choose method:
1) alpha
2) beta"
read method
# METHOD 1
if [ "$method" == "1" ]; then
longalpha
fi
# METHOD 2
if [ "$method" == "2" ]; then
longbeta
fi
fi
#OPTION 2
if [ "$option" == "2" ]; then
echo "Choose method:
1) alpha
2) beta"
read method2
# METHOD 1
if [ "$method2" == "1" ]; then
shortalpha
fi
# METHOD 2
if [ "$method2" == "2" ]; then
shortbeta
fi
fi
if [ "$option" == "3" ]; then
echo "Good Bye!"
fi
【问题讨论】:
-
-l或-s是否必须存在,如果使用它们是否应该都是第一个参数? -
两者中的任何一个都必须呈现,并且它是否是第一个使用的参数都没有关系。当只有
-l或-s选项时,脚本不应该工作,必须有-l -a/-l -b/-s -a/-s -b。据我所知(我刚刚开始使用 shell 脚本),getopt或getopts在代码中一个接一个地运行单独的选项,但如果有-l -a,我想运行 script1,脚本 2如果有-l -b,脚本3如果有-s -a,脚本4如果有-s -b -
@KoahNuttler:顺序重要吗?
-a -l无效吗?只是为了确认 -
@Inian:它不只是告诉脚本是否应该运行另一个更短的脚本或更长的脚本:脚本 a 的较长版本,脚本 a 的较短版本等。
-
那么,您是在寻找纯粹在
getopt(s)中的解决方案吗?使用-l设置long标志和使用-s设置short标志并在处理所有参数后检查是否设置了两个标志并抱怨是不够的?
标签: bash shell options getopt getopts