if:表达式语法csh中的错误 - 不接受除必须接受的唯一字符串之外的其他字符串

时间:2014-10-17 06:18:53

标签: string unix if-statement logical-operators csh

这个守护进程有,例如。一个脚本中有5种类型。现在,我希望能够通过指定守护程序的编号(逐个启动)来启动/停止它,或者指定" all" (以批量开始)。

格式:(运行脚本)(commandName)(守护程序#或"所有")

当用户输入时,需要满足两个条件
(1)正确(通过数字或"全部)
(2)错误(输入的num大于$ count或所有其他字符串而不是" all")。
如果用户输入其他字符串而不是" all"

示例代码:

case 'startDaemon': #commandName
set count = 5

if ($#argv == 2 && $2 == all) then
    echo "correct, do this"
else if ($#argv == 2 && $2 < $count) then
    echo "correct too, do this"
else if ($#argv == 2 && ($2 != all || $2 >= $count)) then
    echo "Incorrect parameter: specify daemon # less than $count or 'all' to start all."
else 
    echo "Please use: $0(runscript) $1(commandname) (daemon # or all)"

每当我输入: (runscript)startDaemon hello ,例如,错误显示:

if: Expression syntax

什么时候应该进入第3个条件。如果问题是在条件或逻辑运算符或其他方面,请帮助并善意指出。提前致谢

PS。我正在使用 csh 。给我的剧本是在csh中,所以是的。

1 个答案:

答案 0 :(得分:0)

当前问题是比较$2 < $count,当$count包含字符串时,该比较无效。

这是一个有效的解决方案:

#!/bin/csh

set count = 5

if ($#argv == 2) then
    if ($2 == all) then
        echo "correct, do this"
    else if (`echo $2 | grep '^[0-9]*$'`) then
        if ($2 < $count) then
                echo "correct too, do this"
        else
           echo "Number must be less than 5"
        endif
    else
        echo "Incorrect parameter: specify daemon # less than $count or 'all' to start all."
    endif
else
    echo "Please use: $0(runscript) $1(commandname) (daemon # or all)"
endif