#!/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
。