linux - 通过命令行将标志和其他参数一起传递给 ksh 脚本

标签 linux shell unix ksh gnu

我正在尝试编写一个 ksh 脚本,该脚本采用一个可选标志和两个强制字符串作为参数。该标志表示为 -a。因此,该命令在正确时看起来类似于以下内容之一:

  1. command.sh -a -b abc -c 123
  2. command.sh -b xyz -c 789

我在脚本中使用了以下代码:

while getopts "a:b:c:" args
do
    case $args in

        a) # Flag
            flag=1
            ;;
        b) # str1
            str1=$OPTARG
            ;;
        c) # str2
            str2=$OPTARG
            ;;
        *) # usage
            echo "- - - - "
            exit 0
            ;;
    esac
done

if [[ -z $str1 || -z $str2 ]]
then
    echo "Incomplete arguments supplied\n"
    exit 1
fi

...

当我执行 1(见上文)时这样做会抛出消息 Incomplete arguments supplied,而 2(见上文)工作正常。

谁能指出哪里出了问题并建议改正?

谢谢...

最佳答案

选项字母后的冒号 (:) 指定选项(又名标志)需要一个参数;因为在 'a' 之后有一个冒号 (:),getopts 期望参数与 -a 一起使用;试试这个:

while getopts "ab:c:" args

关于linux - 通过命令行将标志和其他参数一起传递给 ksh 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45140522/

相关文章:

linux - 如何获取与某些模式匹配的文件列表?

linux - Unix/Linux 重定向和管道

linux - 大型应用程序的 Alpine 分发食物吗?

bash - 如何将选项卡放入终端的文本文件中?

java - 使用 SWT 更改文本时标签被切断

linux - 使用 shell 脚本在 centos linux 上安装 chrome

javascript - 有人可以告诉我如何在 Unix 上运行 Node.js 吗?

c++ - 将 FROM stderr 重定向到另一个文件描述符

linux - 我的 LAMP 服务器一直在运行——这不是浪费资源吗?

linux - 找出导致应用程序内存泄漏的原因