无法通过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”运行
答案 0 :(得分:3)
首先,你必须知道你可以找到两个不同的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
希望它有所帮助。
答案 1 :(得分: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
答案 2 :(得分:0)
我通常会做这样的事情,保持条件语句简单。但是,您可以在“if”中填充变量,并检查您的grep是否为空。
set present = `tail -6 .... | grep “”`
if ( $present != “” ) then
echo “present”
else
echo “not present”
endif
您也可以使用“-x”来帮助调试#!/ bin / tcsh -x。这个小的东西,检查你的变量的回声应该这样做,但“-x”可能会给你所需的所有信息。