无法通过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和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
命令的别名)。
然而,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
我通常会做这样的事情,保持条件语句简单。但是,您可以在“if”中填充变量,并检查您的grep是否为空。
set present = `tail -6 .... | grep “”`
if ( $present != “” ) then
echo “present”
else
echo “not present”
endif
您还可以使用“-x”来帮助调试#!/ bin / tcsh -x。这个小的东西,检查你的变量的回声应该这样做,但“-x”可能会给你所需的所有信息。