2012-02-17 13 views
1

これは簡単ですが、動作させることができません。私はsshのbashスクリプトで単純なif else文を実行したい。ここでは以下の私のコードは次のとおりです。bash if else文

#!/bin/sh 

echo -n "enter what type of logs. (ie. cpanel, apache) " 
read type 
if [$type == cpanel] 
then 
LOGTYPES ="error, access" 
else 
LOGTYPES ="error, access, suphp, suexec" 
fi 

echo -n "enter which log to tail (ie. $LOGTYPES) " 
read logs 
echo -n "enter last number of lines to view. (ie. 10, 5000 etc) " 
read lines 

tail -$lines /usr/local/$type\/logs/$logs\_log 

私はすべてを試みたし、私はこのエラーを取得しておいてください。

[~]# /apachetail 
enter what type of logs. (ie. cpanel, apache) cpanel 
/apachetail: line 5: [cpanel: command not found 
/apachetail: line 9: LOGTYPES: command not found 
enter which log to tail (ie.) 

私は、次の方法を試してみた、なしの仕事:

if [$type -eq cpanel] 
    if [$type -eq cpanel]; 
    if [$type == cpanel]; 
    if [$type = cpanel] 
    if [$type = cpanel]; 
    if ["$type" = cpanel] 
    if ["$type" = cpanel]; 
    if ["$type" == cpanel] 
    if ["$type" == cpanel]; 
    if ["$type" -eq cpanel]; 
    if ["$type" -eq cpanel] 

答えて

8

変更

if [$type == cpanel] 

if [ "$type" = "cpanel" ] 

LOGTYPES ="error, access" 

ssignmentは、=(代入演算子)の周囲にスペースを入れないでください。

+0

ああ、それは主に間隔に関することです。ありがとうございました! – sven30

+1

さらに、「[a == b]」の二重「=」はbash拡張です。最初の行に#!/ bin/bashを使用するか、「[a = b]」を使用してください。 – kupson

+0

@ sven30:シェルコマンド言語 '['はコマンドであり構文ではないことを覚えておくことが重要です。それはあなたが実行するプログラムであり、引数をとります。 'test'(人手テスト)とも呼ばれます。シンタックスではないので、bashは空白やその他の構文で区切られた独自のトークンでなければ、それが何であるかを知ることができません。 – Sorpigal

3

LOGTYPES =LOGTYPES=である必要があります - スペースがないことに注意してください。 [$type == cpanel][ $type == cpanel ]である必要があります。にはスペースが追加されています。

LOGTYPES="error, access" 

どれAへ

+2

条件式を 'if [[" $ type "==" cpanel "]]'にすることもできます。 '[['は '[' 'のより高度なバージョンです。条件式にスペースを挿入することは、常に良い考えです。そのため、ブラケットと各側の条件式の間にスペースがあります。 – Chris

+0

ありがとう、これらは働いた!! – sven30

+0

'[['は必要ありません。 – Sorpigal