If else循环在csh shell脚本中不起作用

3vpjnl9f  于 2023-02-24  发布在  Shell
关注(0)|答案(2)|浏览(267)

这是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。示例输出。
请帮助纠正这个错误。我认为状态if反映了prev命令if?请建议我如何使这个if循环正确工作。请建议我如何更好地使用基础知识。非常感谢帮助。提前感谢。这是问题的延续:[https://stackoverflow.com/questions/75523005/如何捕获Perl脚本的退出代码,该脚本是从shell脚本调用的][1]

dxpyg8gm

dxpyg8gm1#

不熟悉csh,但我相信$status是csh的一个特殊变量,等价于$?
因此,第4行if语句中的$status将由第3行echo $status的退出代码更新,始终等于0。
尝试将$status变量更改为$rc或其他任何变量。
不过,我还是建议您使用bsh/bash重写shell脚本。

afdcj2ne

afdcj2ne2#

你说了

$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\n" );
}

say "Success";

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

相关问题