#!/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를 마지막 인수로 [
예상하므로 실패하므로 두 번째 명령은 실행되지 않습니다.]
[[ .. ]]
그러나 특수 조건 구문은 이를 지원 &&
하므로 를 사용할 수 있습니다 [[ $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
코드에 두 가지 오류가 있습니다. !=
연산자 주위에 공백이 필요하고 &&
개별 [ ... ]
테스트 사이에 공백이 있어야 합니다.
많은 개별 테스트를 사용하는 대신:
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
.