【问题标题】:Regarding Shell variable关于 Shell 变量
【发布时间】:2011-03-01 12:23:47
【问题描述】:

我需要在我的主脚本中调用另一个 shell 脚本 testarg.sh。此脚本 testarg.sh 具有参数 ARG1、ARG2、ARG3。我需要通过以下方式调用:

./testarg.sh -ARG1 <value>  -ARG2 <value> -ARG3

ARG1 和 ARG3 参数是强制性的。如果它没有传递给主脚本,那么我退出。 ARG2 是可选的。如果 ARG2 变量未设置值或未定义,则无需从主脚本传递它。所以我需要通过以下方式调用

./testarg.sh -ARG1 <VALUE1> -ARG3

如果 ARG2 变量的值存在,那么我需要调用以下方式:

./testarg.sh -ARG1 <VALUE1> -ARG2 <VALUE2> -ARG3

我是否需要一个 if else 语句来检查 ARG2 变量是空还是 null?还有其他方法吗?


修改

如果设置了 ARG2,那么调用应该是:

./testarg.sh -ARG1 -OPT2 $ARG2 -ARG3

【问题讨论】:

  • 你的脚本必须在 shell 中吗?它变得足够复杂,以至于我个人会切换到另一种语言,例如Python 或 Perl。
  • 您的“修正”与问题的其余部分不一致 - 是什么?

标签: linux shell unix


【解决方案1】:

如果这是在bash中,你可以写

./testarg.sh -ARG1 $ARG1 ${ARG2:+-ARG2 $ARG2} -$ARG3

如果设置了param,则构造${param:+word} 的计算结果为word,否则不计算。所以如果$ARG2有一个值,你会得到-ARG2 $ARG2,否则什么都没有。

【讨论】:

  • 如果 ARG2 有值,则在较早发布时错过,然后我需要 ./testarg.sh -ARG1 -OPT2 -ARG3 如果 ARG2 没有值,那么我需要 ./testarg .sh -ARG1 -ARG3
  • 是的,Bourne、Korn、POSIX、Bash shell 都支持这种表示法。
  • 你可以做到; ./testarg.sh -ARG1 ${ARG2:+-OPT2} $ARG2 -ARG3.
  • @arav:您可以编辑您的问题以添加额外的细节,而不是在答案周围复制评论。
【解决方案2】:
#!/bin/sh

if [ "$1" = "" ]; then
    echo ARG1 is null
else
    echo ARG1 = $1
fi
if [ "$2" = "" ]; then
    echo ARG2 is null
else
    echo ARG2 = $2
fi

【讨论】:

  • 之前发布时错过了如果 ARG2 有值然后我需要 ./testarg.sh -ARG1 -OPT2 -ARG3 如果 ARG2 没有值那么我需要 ./testarg .sh -ARG1 -ARG3
  • 这对子脚本的调用没有多大帮助。
猜你喜欢
  • 1970-01-01
  • 2016-11-04
  • 2021-03-28
  • 1970-01-01
  • 2011-12-26
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
相关资源
最近更新 更多