tcsh 中的 IF 语句错误



通过tcsh执行IF语句时遇到问题。这对我来说很好 -

#!/bin/bash
if echo `cal|tail -6|sed -e 's/^.{3}//' -e 's/.{3}$//' |tr -s '[:blank:]' 'n' | head -11|tail -10|tr -s 'n' ' '`|grep -w `date "+%e"`
then
        echo "present"
else
        echo "absent"
fi

这就是问题所在——

#!/bin/tcsh
if echo `cal|tail -6|sed -e 's/^.{3}//' -e 's/.{3}$//' |tr -s '[:blank:]' 'n' | head -11|tail -10|tr -s 'n' ' '`|grep -w `date "+%e"`
then
        echo "present"
else
        echo "absent"
endif

收到此错误-

if: Expression Syntax.
then: Command not found.

我真的需要它来使用"tcsh"运行

首先,你必须知道你可以找到两个不同的shell族,如:

  • 伯恩型贝壳(Bash,zsh...)
  • C 语法类型 shell (tcsh, csh...)

如您所见,Bash 和 tcsh 并非来自同一个 shell 家族。因此,在 tcsh 上,if 语句与 bash 语句略有不同。在您的情况下,关键字"then"放错了位置。尝试将其放在"if"行的末尾,如下所示:

#!/bin/tcsh
if(echo `cal|tail -6|sed -e 's/^.{3}//' -e 's/.{3}$//' 
|tr -s '[:blank:]' 'n' | head -11|tail -10|tr -s 'n' ' '`| 
grep -w `date "+%e"`) then
     echo "present"
else
     echo "absent"
endif

希望对您有所帮助。

bash中有效,因为 POSIX 样式的 shell 中的if语句总是通过执行命令来工作(碰巧[test命令的别名)。

但是,tcsh中的if语句不是这样工作的。 它们有自己的语法(在tcsh手册页的"表达式"下进行了描述)。

尝试自行运行管道,然后在if中检查退出状态:

cal | tail -6 | sed -e 's/^.{3}//' -e 's/.{3}$//' | tr -s '[:blank:]' 'n' | head -11 | tail -10 | tr -s 'n' ' ' | grep -w `date "+%e"` >/dev/null
if ( $? == 0 ) then
    echo "present"
else
    echo "absent"
endif

我通常会做这样的事情,保持条件语句简单。但是,您可以将变量塞入"if"中,然后检查您的 grep 是否为空。

set present = `tail -6 .... | grep “”`
if ( $present != “” ) then
   echo “present”
else
   echo “not present”
endif 
你也可以使用 "-x"

来帮助调试 #!/bin/tcsh -x。 这么小的东西,一个检查变量的回显应该可以做到,但"-x"可能会给你你需要的所有信息。

相关内容

  • 没有找到相关文章

最新更新