2012-11-13 49 views
0

聲明試圖對兩個機 -錯誤運行IF從外殼

1.SunOS 5.8 Generic_Virtual sun4u的SPARC SUNW,太陽火V240(bash)的

2.SunOS 5.10 Generic_127112-運行的IF語句11了i86pc I386了i86pc(tcsh的)

這是我從外殼中運行的命令 -

如果(回聲13 | grep的-w date +%e>的/ dev/null的);然後回聲「現在」;科幻

它運行的機器1.精細,但得到以下機器2(tcsh的)錯誤 -

如果:表達式語法。

如何在tcsh中更正此問題?我需要從一個crontab文件運行這個 -

30 09 * * * if(echo 13 | grep -w date +%e>/dev/null);然後回顯 「禮物」; fi

+1

您需要使用方括號而不是括號。像'if [condition];然後做一些事情; fi' – 2012-11-13 16:08:30

+0

@NNzz你爲什麼不把它當作答案呢? –

+2

@NNzz:這不完全正確。 [是一個程序,返回0爲真,1爲假。 ()是一個應該返回一些東西的子shell調用。 – d33tah

回答

0

您可能在這些機器上使用了不同的shell,它解釋了語法錯誤。你在你的代碼中使用了子shell,在不同的shell中可能有不同的語法。

另請注意,您正在將echo的stdout重定向到/ dev/null,因此您無論如何都看不到任何東西。

+1

重定向的要點是失去'grep'的輸出;唯一感興趣的是退出狀態,如果發現13,退出狀態將爲零(成功),如果不是,則爲非零(失敗)。有'grep'選項可以抑制輸出('-q'或'-s';'-q'在匹配時取消常規輸出,而'-s'取消關於丟失或不可讀文件的錯誤信息等)。 –

+1

如果你想在Solaris上使用'grep -q',你必須使用'/ usr/xpg4/bin/grep'(假設它已經安裝)。 '/ bin/grep'中缺少該選項 – mavit

0

無論您的登錄shell如何,您的cron作業都將在/bin/sh下運行。

要從命令行執行此操作,只需首先啓動/bin/sh(或者,如果您願意,可以選擇/bin/bash)。