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를 마지막 인수로 [예상하므로 실패하므로 두 번째 명령은 실행되지 않습니다.]

[[ .. ]]그러나 특수 조건 구문은 이를 지원 &&하므로 를 사용할 수 있습니다 [[ $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.

관련 정보