tcsh中的IF语句错误

时间:2012-11-14 10:35:47

标签: bash if-statement tcsh

无法通过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”运行

3 个答案:

答案 0 :(得分:3)

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

  • Bourne type shells(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

希望它有所帮助。

答案 1 :(得分:0)

这适用于bash因为POSIX样式shell中的if语句总是通过执行命令来工作(恰好[test的别名}命令)。

然而,iftcsh的陈述并非如此。它们有自己的语法(在tcsh man page中的表达式中描述)。

尝试自行运行管道,然后检查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

答案 2 :(得分:0)

我通常会做这样的事情,保持条件语句简单。但是,您可以在“if”中填充变量,并检查您的grep是否为空。

set present = `tail -6 .... | grep “”`

if ( $present != “” ) then
   echo “present”
else
   echo “not present”
endif 

您也可以使用“-x”来帮助调试#!/ bin / tcsh -x。这个小的东西,检查你的变量的回声应该这样做,但“-x”可能会给你所需的所有信息。