tcsh中的IF语句错误

问题描述 投票:1回答:3

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

bash if-statement tcsh
3个回答
3
投票

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

  • Bourne类型的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

希望能帮助到你。


0
投票

这在bash中有效,因为POSIX风格的shell中的if语句总是通过执行命令来工作(恰好[test命令的别名)。

然而,if中的tcsh声明并不像那样。它们有自己的语法(在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

0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.