if文を使用すると問題が発生するエラー - > [: `]'がありません

if文を使用すると問題が発生するエラー - > [: `]'がありません
#!/bin/bash

for (( x=7; x <= 65; x+=2 )) 

do


    if [ $x!=57 && $x!=59 && $x!=29 && $x!=53 ]
    then
        cd charged_$x 
        cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so .
        cd ..
    fi

done

問題が見つかりません。助けてください

答え1

[ $x!=57 && $x!=59 && $x!=29 && $x!=53 ]

[と同じ規則に従うコマンドですls&&条件に応じてコマンドをグループ化するシェル方式です。で、[ foo && bar ]シェルはコマンドを実行し[ foo、成功すると実行しますbar ]。コマンドはaを最後の引数と[見なして失敗するため、2番目のコマンドは実行されません。]

[[ .. ]]ただし、特殊条件構文はこれをサポートしているため、&&使用できます[[ $x != 57 && $x != 59 && ... ]]。演算子の周りにはまだ空白が必要です。 Plainは空でない文字列を$x!=57テストするために使用され、$x!=57値に関係なく常に空でない文字列になりますx

または、次の]場所に最後の文章を入れてください&&[ "$x" != 57 ] && [ "$x" != 59 ] && ...

答え2

次のコードが機能します。

#!/bin/bash

for (( x=7; x <= 65; x+=2 )) 
do
    if [ "$x" -ne 57 ] && [ "$x" -ne 59 ] && [ "$x" -ne 29 ] && [ "$x" -ne 53 ]; then
        cd charged_$x 
        cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so .
        cd ..
    fi
done
  • 各状況に応じて、個々の校正器を使用するのが最善です。
  • 整数を比較するので、-ne代わりに使用する必要があります。!=

答え3

同時に、あまりにも多くの条件を使用しているので、その構文を変更する必要があります。

if  [ $x!=57 ] && [ $x!=59 ] && [ $x!=29 ] && [ $x!=53 ]

これがうまくいくでしょう。

答え4

コードには2つのエラーがあります。!=演算子の周りにスペースが必要で、&&個々の[ ... ]テスト間にスペースが必要です。

多くの個別テストを使用する代わりに:

for (( x = 7; x <= 65; x += 2 )); do
    case $x in
        29|53|57|59) ;;
        *)
            cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so "charged_$x"
    esac
done

私も役に立たないものの半分を削除しましたcd

関連情報