Por que meu script retorna um erro de sintaxe?

1

Eu escrevi esse script, mas não sei por que tenho um erro de sintaxe:

#!/bin/bash
    echo Indica la fecha de hoy en formato dd-mm-aaaa
    read date
    echo Indica la hora actual en formato hh-mm
    read hora
    mkdir -p /re/plugins
    shopt -s extglob
    cp -R /files/spigot/plugins/!(dynmap) /re/plugins
    shopt -u extglob
    cp -R /files/spigot/world /re
    zip -r "$date"-"$hora".zip plugins world
    mv /re/*.zip /var/www/html/backup
    rm -R /re
    Echo copia de seguridad realizada correctamente el dia "$date" a las "$hora"h > /log.txt

A saída

root@alex:/home/alex# sh pb.sh
Indica la fecha de hoy en formato dd-mm-aaaa
aaa
Indica la hora actual en formato hh-mm
sdf
pb.sh: 7: pb.sh: shopt: not found
pb.sh: 8: pb.sh: Syntax error: "(" unexpected
root@alex:/home/alex# 
    
por thealejandroxv 31.10.2015 / 22:08

2 respostas

9

Seu problema está aqui:

root@alex:/home/alex# sh pb.sh  

shopt é um shell integrado (consulte type shopt ). /bin/sh não é bash no Ubuntu, mas um shell de compatibilidade chamado dash. O traço não tem shopt .

Como a primeira linha do seu script é a linha shebang ( #!/bin/bash ), você pode simplesmente executar seu script assim:

./pb.sh  

e deve funcionar bem. Pode ser necessário definir o arquivo como executável executando:

chmod +x pb.sh
    
por Seth 31.10.2015 / 22:21
2
  

pb.sh: 8: pb.sh: Erro de sintaxe: "(" inesperado

A sintaxe !(dynmap) é reconhecida apenas quando a opção extglob shell foi definida e não foi:

  

pb.sh: 7: pb.sh: shopt: não encontrado

O comando shopt não foi encontrado porque é um shell embutido e o shell específico que executou o script não o suporta, como A resposta de Seth explica.

    
por deltab 01.11.2015 / 03:18