shell脚本中的if语句出错

时间:2013-09-05 05:55:03

标签: shell csh

我正在尝试执行以下shell脚本

#!/bin/csh
if [[ $# != 1  ||  $1 != "first" && $1 != "second" ]]
then
    echo "Error: Usage: $0 [first|second]"
    exit 1
fi

但是我收到了一个错误:

if:Expression Syntax。

我不知道该语法有什么问题。它看起来很好。请帮忙。

2 个答案:

答案 0 :(得分:1)

C shell(csh)没有变量$#。事实上,在csh中,传递的参数if语句等与ksh或bash根本不同。您的所有代码看起来都像一个bash代码,但您的shebang行包含csh。因此,如果您想使用bash,请将其更改为:

#!/bin/bash
if [[ $# != 1  ||  $1 != "first" && $1 != "second" ]]
then
    echo "Error: Usage: $0 [first|second]"
    exit 1
fi

或者如果您真的想使用csh,那么您可以将代码重新编写为:

#!/bin/csh
if ( $#argv != 1  ||  $1 != "first" && $1 != "second" ) then
    echo "Error: Usage: $0 [first|second]"
    exit 1
endif

答案 1 :(得分:0)

如果你使用C-shell,你应该写

#!/bin/csh
if( $# != 1  ||  $1 != "first" && $1 != "second" ) then
    echo "Error: Usage: $0 [first|second]"
    exit 1
endif

您的版本适用于类似Bourne的shell,例如shbash等。