通过标志名称和值验证 bash 脚本参数

Validating bash script argument by flag name and value

我有一个 bash 脚本,我想使用 string/alphanumeric 类型的 require -p 参数来调用它。例如:

sh myscript.sh -p abc123

迄今为止我最好的尝试:

#!/usr/bin/bash
mypassword=${p:}
echo $mypassword
if [ -z mypassword ]
then
  echo "error"
fi

因为这是一个必需的参数,我没有一个有意义的默认值可以应用(因此我尝试使用 ${p:}mypassword 设置为 empty/null,然后之后立即尝试空检查条件)。

当我通过 sh myscript.sh -p abc123 运行 它时,我得到:

myscript.sh: line 46: ${p:}: bad substitution

我想要完成的是:

如果未指定 -p,或者已指定但未指定值(例如 -p abc123),我想 echo "error"。换句话说,不仅必须提供 -p,还必须提供它的值。

关于如何完成此操作有什么想法吗?

[ -z mypassword ] 将始终计算为 false,因为单词 mypassword 的长度大于零。例如,您可以使用 [[ -z $mypassword ]].

进行测试

此外,${p:} 一词没有意义。也许你的意思是 ${p:=} ?

更新:

请注意:您调用脚本的方式将无法正常工作,即使在修复这些问题之后,因为 mypassword 将始终为空。要使您的脚本正常工作,p 必须是保存密码的环境变量。你必须像这样调用你的脚本(假设它在你的工作目录中):

# To run it as sh-script (POSIX shell)
p=THIS_IS_MY_PASSWORD sh myscript.sh 

# To run it as bash-script, if the script is executable
p=THIS_IS_MY_PASSWORD ./myscript.sh

# To run it as bash-script, if the script is not executable
p=THIS_IS_MY_PASSWORD bash myscript.sh