【问题标题】:Using (if,,then,,,if) in shell script在 shell 脚本中使用 (if,,then,,,if)
【发布时间】:2015-03-12 17:53:58
【问题描述】:

以下代码(不完全正确的代码)是用 c++ 语言编写的。 我正在尝试用 bash 脚本重写它。

所以,如果有人可以为我写,请帮助..

if ( Ipath == null )(
   if( operation == enc )
     Ipath = in.txt;
   else
     Ipath = in.txt.enc
)

这是目前为止写的,但我认为它是错误的

if [ "$Ipath" == "$NULL" ]
  then
     if [ "$op" == "enc" ]
        then
            Ipath="in.txt"
     else
            Ipath="input.txt.enc"
     fi
fi 

谢谢

【问题讨论】:

  • $NULL 应该在这里是什么?您是否要检查空的 $Ipath 变量?为什么你认为这段代码是错误的?它不工作吗?
  • @EtanReisner,是的,我正在尝试检查 $Ipath 是否为空。在我写这些行之前,代码运行良好!

标签: bash shell


【解决方案1】:

您可以检查变量的插值结果是否为空,如果为空或什至不存在,则为真。为此,您可以使用test 的运算符-z(您通过括号使用test):

if [ -z "$Ipath" ]
then
    if [ "$op" == "enc" ]
    then
        Ipath="in.txt"
    else
        Ipath="input.txt.enc"
    fi
fi 

我不知道您是如何使用$NULL 之类的东西的。 $ 在 bash 中用作变量前缀。我想您认为它等同于c 中的NULL,但事实并非如此。

由于NULL 可能未设置,如果IpathNULL 都为空,您的版本甚至应该可以工作。然而,这会掩盖这里的意图。

请阅读一些关于 bash 编程的介绍,例如:

http://www.tldp.org/LDP/abs/html/

【讨论】:

    【解决方案2】:

    做出以下假设

    $NULL == c++ 中的 null enc 是一个变量

    if [ "$Ipath" == "" ]
    then
      if [ "$op" == "$enc" ]
      then
        Ipath="in.txt"
      else
        Ipath="input.txt.enc"
      fi
    fi
    

    你几乎或已经在那里,你看到什么错误?如果 enc 不是变量,则删除 $ 以使其成为字符串。 Null 在 bash 中并不真正存在,您可能会看到一个空字符串,或者您可能需要检查空格。为了真正安全起见,如果 $NULL 是一个变量,我会去掉空格然后进行比较。

    【讨论】:

      猜你喜欢
      • 2011-12-18
      • 2011-06-26
      • 2011-01-22
      • 2015-01-30
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      相关资源
      最近更新 更多