2012-11-14 26 views
1

無法通過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的」 運行

+0

確保您的腳本實際上以'.csh'擴展名結尾,而不是'.sh'。這對我來說是個問題 – krb686

回答

3

首先,你必須知道你可以找到兩個不同的shell族:

  • 伯恩型殼(巴什,zsh中...)
  • C-語法類型的shell(tcsh中,CSH ...)

正如你所看到的,Bash和tcsh的不來自同一個shell家族。 在tcsh上,if語句與bash單詞有點不同,因爲這個。 在你的情況下,關鍵字「然後」是錯位的。 試圖把它的「如果」行的末尾:

#!/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

不,我再次得到同樣的錯誤「if:Expression Syntax。」。我想這與報價有關。 –

0

,在bash因爲if在POSIX風格的貝殼報表工作總是由執行命令的工作(和它只是恰巧,[是的別名test命令)。

tcsh中的if語句不能像那樣工作。他們有自己的語法(在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」可能會給你所有你需要的信息。