2011-08-03 21 views
1

私はシェルスクリプトには新しく、助けが必要です。私はいくつかのサーバーをバウンスするスクリプトを書こうとしています。私はif文にいくつかの問題があります。下の第一と第二は、私にtoo many argumentsエラーを与えています。問題を使用するUnixの文章

最初の1つは変数$jmsProcessps -ef | grepコマンドですが、結果が返された場合はif-statementに行きたいと思います。これは2番目の問題と同じです。第三にif-statement

私は、これらの変数のいずれかが値trueを持っていますが、これは私に

if[ [ false || false ] == true ]: command not found 

エラーを与えた場合、それはチェックしたいです。

+1

これは(実行していない)シェルスクリプトですか? – KevinDTimm

答えて

2

nullはBashキーワードではありません。あなたは、変数が定義されているかどうかを確認したい場合は、以下の操作を行うことができます

if [ "${var+defined}" = defined ] 

が空または未定義のかどうかを確認するには:

if [ -z "${var-}" ] 
0

私たちは、あなたがいずれかを設定しているのか分かりません変数値のうち、(jmsProcess、boneProcess)。

「$ var」(dbl-quotes)などのすべてのvar値を囲み、エラーメッセージが変更されるかどうかを確認してください。

また、上に表示されているコードには多くの構文の問題があります。ここに投稿する人工物であるかどうかは分かりません(コードブロックの機能はかなり堅牢です)ので、間違っているとコメントするつもりです。

if[ [ false || false ] == true ]: command not found 

問題の多くはここにありますfalseは、シェルコマンドです。コマンドラインで入力してから、echo $?を実行してください。 1が表示されます。 true; echo $?は0を返します。しかし、if文は、最後の戻りコードに基づいてelseブロックに続行するか、またはfall-overします(いくつかの特別な例外もあります)。

また、あなたは[ false || false ] == trueでいくつかの種類の登録をしようとしていると思います。動作しません。下記参照。

ステータス変数は、シェルによって正しく評価されるfalse(またはtrue)の値に設定できます。

また、if[は 'コマンドが見つかりません' msgを返します。だから、偽の値を持つVARSを使用することにより、あなたは

メッセージの変更を参照するにはfalse

jmsRunning=false ; boneRunning=true 
if [[ ${jmsRunning} || ${boneRunning} ]] ; then   
    echo both NOT running 
else 
    echo at least 1 is running 
fi 

変更の両方を試してみてくださいを行うことができます。

また、nullはシェルスクリプト内の単なる文字列であり、おそらく ""を意味します。

最後に、var割り当てに '='記号を囲むスペースを使用することはできません。また、 '$'文字は、文の左側にあるときに前面に '$'文字を使用しないでください。

boneRunning=true 

これが役立つことを願っています。

関連する問題