2009-05-26 14 views
5

基本的に私はスクリプトに渡される引数をチェックしようとしています。 3つの引数があり、3つ目の引数が1の場合は、それを続行します。私もバッシュにはないようだがだから、基本的に私はちょうど行うことができると思った...引数bashスクリプトの問題を確認する

if ([ $# -ne 3 ] and [ "$3" -ne "2" ]) 
then 
exit 0 
fi 

1.

ではありません、それは四つの引数と第三引数を持っている場合、それは続けたいですifのために使用する必要があります。だから、私はちょうど入れ子のifを使うことができると考えましたが、今はまだ不平を言っています。これは現在私が持っているものです...

if [ $# -ne 3 ] 
then 
if [ "$3" -ne "1" ] 
then 

echo "Improper number of arguments. 
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT> 

Select can be left off if you want all data (Mode=1) 
" 
exit 0 

fi 
fi 
if [ $# -ne 4 ] 
then 
if [ "$3" -ne "2" ] 
then 

echo "Improper number of arguments. 
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT> 

Select can be left off if you want all data (Mode=1) 
" 
exit 0 

fi 
fi 

どこが間違っていますか? Bashのif文を入れ子にすることはできませんか?これを行う超禅の方法は、私は完全に欠けているのですか?

私に教えてくれてありがとうございました。


という新たな問題...今

、何らかの理由または別のために、コードがまったく機能していません。エラーや何もない、それだけで動作しません。引数の数はチェックしません。私は議論のないスクリプトを実行しましたが、そこにいなくてもそれをスキップします。

私はコードが昨日動作していたと確信しています。今日は戻って来ないでください。問題の内容は何ですか? (申し訳ありませんが、私はこの上の受け入れ答えを削除する必要があります。)

if [[ $# = 3 && "$3" != "1" ]] 
then 

echo "Improper number of arguments. 
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT> 

Select can be omitted if all data is required (Mode=1) 
" 
exit 0 

fi 

if [[ $# > 4 ]] 
then 

echo "Improper number of arguments. 
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT> 

Select can be omitted if all data is required (Mode=1) 
" 
exit 0 

fi 

EDIT II:

バッシュシェルは、私がしようとしているこのスクリプトについては好きにされていないことがいくつかありますする。私はおそらく別のスクリプト言語でそれを書き直してしまうでしょうし、私がプロジェクトに留意していることをいくつか追加します。いずれにしても助けてくれてありがとう。

+1

どのようなエラーが表示されますか? – Glen

答えて

19
if [ $# -ne 3 -a "$3" -ne "1" ]; then 
    exit 0 
fi 
参照

-a = and 
-o = or 

については

それとも、あなただけの使用を使用することができます。

if [[ $# != 3 && "$3" != "1" ]]; then 
+0

助けてくれてありがとう。これは、私が取り組んでいる他のスクリプトのいくつかを手伝ってくれました。 –

2

ご覧ください。

http://bash-hackers.org/wiki/doku.php/commands/classictest#and_and_orhttp://bash-hackers.org/wiki/doku.php/syntax/ccmd/conditional_expression

"if"を使用してexit/return値を確認​​しているだけなので、何かを提供する必要があります。あなたのテストに基づいて意味のあるものを提供するコマンド。 [このようなコマンドであり、別の可能性は[[キーワード。

上記のscragarで実際の正しい例が既に述べられていますが、私はそれらを繰り返すことは望ましくありません:)

関連する問題