【问题标题】:If else loop not working in csh shell script如果 else 循环在 csh shell 脚本中不起作用
【发布时间】:2023-02-23 04:14:54
【问题描述】:

这是示例 perl 代码。 abc.pl

my $a=0; my $b=0; my $c=0;
my $sum = $a+$b+$c; $ex = 0;
if($sum == 0){
    print "success"; print " $ex \n";
}else{
    $ec=1 ; print "Not success"; print " $ex \n";
}
exit $ex;

这是我的 shell 脚本

set ecd = `abc.pl`
set status = $?
echo $status
if ( $status == 0 ) then
    echo "Here Status is $status"
else
    echo "Status is $status"
endif
echo $status

现在我对 if else 循环有问题, status 的值似乎在 if 循环之前和之后发生变化,每次它只在 if 条件下打印 msg。 示例输出。

1 
Here Status is 0 
0 

请帮助更正此问题。我认为如果反映上一个命令的状态?请建议如何使这个 if 循环正常工作。 请建议我如何在基础知识方面做得更好。非常感谢您的帮助。非常感谢。 这是问题的延续:[https://stackoverflow.com/questions/75523005/how-to-capture-exit-code-of-a-perl-script-which-is-called-from-a-shell-剧本][1]

【问题讨论】:

    标签: shell csh exit-code


    【解决方案1】:

    不熟悉csh,但我相信$status 是csh 的特殊变量,相当于$?

    因此,第 4 行 if 语句中的 $status 将由第 3 行 echo $status 的退出代码更新,始终等于 0。

    尝试使用 $rc 或其他任何方式更改您的 $status 变量。

    不过,我宁愿建议您使用 bsh/bash 重写您的 shell 脚本。

    【讨论】:

      【解决方案2】:

      你做到了

      $ec=1;
      exit $ex;
      

      代替

      $ex=1;
      exit $ex;
      

      始终使用use strict; use warnings;。它会发现这个错误。


      请注意,die 导致 perl 以非零状态退出,因此您可以使用以下内容:

      use v5.14;     # This implicitly does `use strict;`
      use warnings;
      
      my $x = 0;
      my $y = 0;
      my $z = 0;
      
      my $sum = $x + $y + $z;
      
      if ( $sum != 0 ) {
         die( "Error
      " );
      }
      
      say "Success";
      

      避免使用变量名称 $a$b,因为它们是半特殊的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 2016-01-17
        • 2020-07-22
        • 2015-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多