Closed. This question needs to be more focused。它目前不接受答案。
想改进这个问题吗?更新问题,使其只关注一个问题editing this post。
11天前关闭。
我开始理解它刚刚停止一起运行。当我尝试在小型个人测试中
脚本的要点是接受一个初始的第一个参数,这是所需的操作类型,并在初始的
编辑:
我已经用shellcheck.net检查了我的代码,我相信没有基于语法的错误。我需要帮助的不是代码的细节,而是实现我想要的结果的最佳方法,我在上面强调了这个粗略的想法。这是最好的办法吗?如何获得基于
其中getopt的“传统”用例需要以下内容(该命令可以从选项中隐含,也可以是参数列表的一部分)。
这里需要做一些小的修改,提示getopt应该忽略第一个命令行参数。两个选项:移动参数列表,或更新OPTIND以跳过这些参数
或者更新OPTIND以跳过第一个参数。
注:每个解决方案可用于提供两组选项。一个用于脚本,一个用于子命令。例如,
原始答案:
完全修改以解决运营商所做的更改。
想改进这个问题吗?更新问题,使其只关注一个问题editing this post。
11天前关闭。
我开始理解它刚刚停止一起运行。当我尝试在小型个人测试中
getopts
时,它工作得很好。我已经盯着屏幕看了几天了,现在检查出了什么问题,我甚至用了一个外壳检查器,它只是说一切都应该正常。我试图在getopts
while循环中回音,但它从未打印出来,更不用说我在案例中的回音了。这就是我的代码,helpmenu(){
case $1 in
general)
echo "Usage, some operationtypes, -h or --help idenifier explained"
;;
eachoperationtype)
echo "Explain this operationtype"
;;
}
operationtype=$1
if [[ operationtype == "Operation1" ]]; then
# Setting some variables to default values here
var1=0 #Default values
var2=4
var3=5
...
echo "this prints" # this prints
while getopts ":hs:d:m:f:a" opt; do
echo "does not print" # this does not print
case ${opt} in
h )
helpmenu operationtype #Simple function that prints out script usage
;;
s )
var=$OPTARG
;;
d )
var2=$OPTARG
;;
m )
var3=$OPTARG
;;
f )
var4=$OPTARG
;;
a )
bool=true
;;
\? )
echo "Syntax error: Unrecognised flags given"
helpmenu operationtype
;;
: )
echo "Syntax error: Invalid number of arguments"
helpmenu general # No arguments given - shows help menu with operationtypes so they can ./Script operationtype -h
;;
esac
done
shift $((OPTIND -1))
# Do some other stuff, works fine
#Other operations have similar structure to operationtype1
elif [[ operationtype == "operation2" ]]; then
# Similar program, potentially different flags, function, meaning etc
fi
脚本的要点是接受一个初始的第一个参数,这是所需的操作类型,并在初始的
getopts
之后在不同的getopts
中运行不同的elifs
。每一个都有一个特定数量的参数和一个可选标志列表。也就是说,你可以有一个脚本可以if
,例如./Script greetings "hello" -t 3
3次,并且在同一个脚本中有另一个函数echo "hello"
,例如在一个列表中给出user1的年龄。我要处理的另一个问题是所需变量的设置,所需变量应该只在没有标志的情况下正常收集。问题是,我希望为每个operationtype弹出一个帮助菜单(回显快速用法),即./Script age -u User1
返回operation1的帮助菜单,但是我不允许使用此语法,因为它在尝试设置所需参数时将返回错误。另外,我需要确保它们为每个操作类型放置正确数量的必需参数,因为任何其他数量都会导致错误。谢谢你事先的帮助。编辑:
我已经用shellcheck.net检查了我的代码,我相信没有基于语法的错误。我需要帮助的不是代码的细节,而是实现我想要的结果的最佳方法,我在上面强调了这个粗略的想法。这是最好的办法吗?如何获得基于
./Script operation1 -h
的operationtype
功能?为什么不跑?很抱歉有任何混乱,我将删除pastebin链接,因为让您通读它根本不是我的意图。 最佳答案
问题中的ASK和getopt的“传统”用法的主要区别在于命令行参数遵循以下结构
script sub-command [options] arguments
其中getopt的“传统”用例需要以下内容(该命令可以从选项中隐含,也可以是参数列表的一部分)。
script [options] arguments
这里需要做一些小的修改,提示getopt应该忽略第一个命令行参数。两个选项:移动参数列表,或更新OPTIND以跳过这些参数
# SHIFT the command outside the argument list
operationtype=$1
shift
if [[ operationtype == "Operation1" ]]; then
# Execute the operation 1
...
while getopts ":hs:d:m:f:a" opt; do
...
done
或者更新OPTIND以跳过第一个参数。
operationtype=$1
OPTIND=$((OPTIND+1))
if [[ operationtype == "Operation1" ]]; then
# Execute the operation 1
...
while getopts ":hs:d:m:f:a" opt; do
...
done
注:每个解决方案可用于提供两组选项。一个用于脚本,一个用于子命令。例如,
docker
命令行:docker [options] sub-command [sub-command options]
原始答案:
完全修改以解决运营商所做的更改。
10-08 05:15