2013-06-21 24 views
1

我正在學習shell腳本,並且我發現shell腳本條件語句的語法不同。 csh腳本與tcsh腳本有不同的語法。有人說如果在shell腳本中使用不同的語法

if [ "$PASSWORD" == "$VALID_PASSWORD" ]; then 
echo "You have access!" 
else 
echo "ACCESS DENIED!" 
    fi 

一些使用

if ($PASSWORD == $VALID_PASSWORD) 
echo "You have access!" 
else 
echo "ACCESS DENIED!" 
endif 

我想我自己,我得到這樣的錯誤「如果:如果空」或「如果:表達式語法」和這些消息非常簡短易懂。所以我想問如何解決這些問題,並有解決方案基於殼(csh,tcsh)

如果我的shell是tcsh,我應該總是tcsh腳本或我可以寫bash腳本。從shbash

if (expr) then 
... 
else if (expr2) then 
... 
else 
... 
endif 

你的其他例子是(可能):

+1

作爲卡爾的回答說,你可以使用任何你喜歡的貝殼寫劇本,不管是什麼殼您使用交互。但閱讀此:http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot –

+0

謝謝湯普森..我只是學習編程的shell和我可以學習bash shell比csh shell腳本 – Raghav

回答

4

cshtcsh共享一個if語句的語法相同

if list; then list; [ elif list; then list; ] ... [ else list; ] fi 

如果您的列表恰好是一個調用的程序(或者有時候shell內置)[

你把正確的

#!/bin/sh 
#!/bin/bash 
#!/bin/csh 
#!/bin/tcsh 

到腳本的預期外殼在文件的頂部匹配一個你可以寫你想,只要任何shell腳本。

+0

我得到的錯誤對於下面的代碼是 「如果:空的,如果」 如果($ 1 == 「1」) 回聲 「一個」 否則,如果($ 1 == 「二」) 回聲「兩」 其他 回聲「沒有適當的輸入」 endif 當作爲./腳本執行時一個 – Raghav

+2

@Raghav這是因爲你的'if'語句缺少其'then'關鍵字。 –

+0

謝謝戈登..我不知道如果然後應該在同一行..現在代碼正在工作 – Raghav

0

這對於實際的腳本 -

#!/bin/sh 
# This is some secure program that uses security. 

VALID_PASSWORD="secret" #this is our password. 

echo "Please enter the password:" 
read PASSWORD 

if [ "$PASSWORD" == "$VALID_PASSWORD" ]; then 
    echo "You have access!" 
else 
    echo "ACCESS DENIED!" 
fi