2016-12-02 7 views
1

これは私のbashスクリプトにあるコードです。 2つの引数を渡すと2進演算子が期待しているというエラーが出ます(1つの引数を与えるとエラーになりません)。私はls -lを実行したときにそれを見ることができるので、2つの引数を与えるとファイルのパーミッションは変わりますが、それでも私にはこのエラーが出ます。どうすれば修正できますか?UNIXのbashエラー - 2進演算子が期待される

for file in [email protected] 
do 
    chmod 755 $file 
done 

if [ -z [email protected] ] 
then 
     echo "Error. No argument." 
     exit $ERROR_CODE_1 
fi 

私が追加されているこの今

if [ ! -f "$*" ] 
then 
     echo "Error. File does not exist" 
     exit $ERROR_NO_FILE 
fi 

しかし、今、私は以上の1つの引数を入力すると、それだけで(すなわちプリントerror.fileが存在しない)場合でも、ファイルをif文ですべてを行いある。それを別の方法をやって

+0

質問を変更しないでください。 *新しい*質問がある場合は、既存の*質問を変更するのではなく、新しいものとして投稿する必要があります。 – andlrc

答えて

3

:ちょうど渡されたどのように多くのパラメータを尋ねる:

... 
if [ $# -eq 0 ] 
... 

の$ @変数はこのように見えるtestコマンドを残している、複数の単語に展開ので、あなたは、あなたのコード内のエラーが表示されます。

[-z PARM1 PARM2 PARM3 ...]

+0

あなたは男の仲間です。ありがとうございました。 – pogba123

+0

'$ @'を引用すると '-z'に複数の引数を与えることができます。それらの引数の空白はそのまま保存されます。 – chepner

+0

私はテストせずに答えるように教えてくれるでしょう!ありがとう@chepner! –

0

単語を避けるために、二重引用符で、あなたのパラメータをラップsplitti NGとパス名展開:

for file in "[email protected]" 
do 
    chmod 755 "$file" 
done 

if [ -z "$*" ] # Use $* instead of [email protected] as "[email protected]" expands to multiply words. 
then 
     echo "Error. No argument." 
     exit "$ERROR_CODE_1" 
fi 

ただし、コードを少し変更することができます。

for file # No need for in "[email protected]" as it's the default 
do 
    chmod 755 "$file" 
done 

if [ "$#" -eq 0 ] # $# Contains numbers of arguments passed 
then 
    >&2 printf 'Error. No argument.\n' 
    exit "$ERROR_CODE_1" # What is this? 
fi 
+0

ありがとうたくさんの仲間 – pogba123

+0

質問欄に上記のコードを更新しましたが、別のエラーが表示されてしまいました。私は初心者であり、助けが必要です。 – pogba123

2

[email protected]は、それらの間のスペースで、すべての引数に拡大しているので、次のようになります。

if [ -z file1 file2 file3 ] 

しかし、-zの後には1語だけが必要です。あなたは$*を使用し、それを引用する必要があるので、一つの単語に展開さ:

if [ -z "$*" ] 

これはに展開:

if [ -z "file1 file2 file3" ] 

それとも、引数の個数チェック:

if [ $# -eq 0 ] 

forループの前にもこのチェックを入れる必要があります。 forループの引数を引用する必要があります。したがって、空白を含むファイル名に問題はありません。

for file in "[email protected]" 
+0

感謝の男が高く評価されました。 – pogba123

+0

上記の質問ボックスでコードを更新しましたが、別のエラーが表示されてしまいました。私は初心者であり、助けが必要です。 – pogba123

+0

'-f'はファイル名の後ろに1つのファイル名が必要ですが、すべてのファイル名引数を1つのテストにまとめています。 – Barmar

関連する問題