shell脚本+ $?默认为1开头

时间:2010-09-02 11:27:09

标签: bash shell

我有以下(大ksh脚本的一部分)

 while [[ $? -ne 0 ]]
  do

    print -n "ENTER VALID HOST IP"
     read IP
     CHECK_IP $IP   # CHECK_IP is afuntion that check if IP is valid and return 0 or 1
     done
正如我们在美元看到的那样?总是等于0 所以我们不能要求IP

循环的目标是询问IP地址 并激活CHECK_IP函数以返回0或1

0表示有效IP

对于BAD IP

1

但正如我在乞讨中所说的那样,我从来没有问过IP,因为$?总是0(在“while”之后)

所以我的问题

如何启用默认值1到$?所以我会开始循环或其他建议吗?

里带

2 个答案:

答案 0 :(得分:2)

首先运行false

答案 1 :(得分:0)

$?是先前执行的命令的退出状态。一个人不能保证$?总是返回0。

上面的代码说'发生一些错误时,重复'。换句话说,$? -ne 0将保护/确保在某些命令成功执行时停止循环。

我不知道你的情况到底是什么。但我猜你有很多IP,其中很多都是不正确的。循环本身将检查这些IP,并在IP正确时退出。

最大的问题是您的代码是否能够进入循环。如果是这种情况,则使用while-do本身是不正确的。尝试do-while(我不知道这是否在你的shell中可用)。通过使用do-while,您将确保您的代码至少进入循环一次。