problema ao usar if statement error - [: missing ']'

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

não consegue descobrir o problema, por favor ajude

    
por AMAN SANGAL 15.01.2018 / 19:40

4 respostas

4

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

[ é um comando, obedece às mesmas regras, digamos, ls . && é uma maneira de agrupar comandos condicionalmente. Em [ foo && bar ] , o shell executa o comando [ foo e, se for bem-sucedido, será executado bar ] . O comando [ falha porque espera ver um ] como seu último argumento e, portanto, o segundo comando não é executado.

A sintaxe condicional especial [[ .. ]] , no entanto, suporta && dentro dela, portanto, você pode usar [[ $x != 57 && $x != 59 && ... ]] . Observe que ainda requer espaços em branco em torno dos operadores. Plain $x!=57 seria um teste para ver se $x!=57 é uma string não vazia, o que sempre é, independentemente do valor de x .

Ou coloque o ] de fechamento antes do && : [ "$x" != 57 ] && [ "$x" != 59 ] && ...

    
por 15.01.2018 / 22:18
1

O código a seguir deve funcionar:

#!/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
  • É melhor ter chaves separadas para cada condição.
  • Devemos usar -ne em vez de != , pois estamos comparando inteiros.
por 09.06.2018 / 21:59
0

você usa muitas condições ao mesmo tempo, então precisa alterar a sintaxe para isso.

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

isso funcionará

    
por 15.01.2018 / 19:44
0

Seu código tem dois erros: o operador != precisa de espaços ao redor e o && deve estar entre os [ ... ] testes individuais.

Em vez de usar muitos testes individuais:

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

Eu também removi a metade inútil cd .

    
por 09.06.2018 / 22:07