为什么我的脚本返回语法错误?

为什么我的脚本返回语法错误?

我写了这个脚本,但我不知道为什么出现语法错误:

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

输出

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# 

答案1

你的问题就在这里:

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

shopt是内置的 shell(参见type shopt)。Ubuntu/bin/sh上不是 bash,而是兼容 shell,称为 dash。Dash 没有shopt

由于脚本的第一行是 shebang 行 ( #!/bin/bash),因此您可以像这样运行脚本:

./pb.sh  

并且它应该可以正常工作。您可能需要通过运行以下命令将文件设置为可执行文件:

chmod +x pb.sh

答案2

pb.sh: 8: pb.sh: 语法错误:“(”意外

!(dynmap)仅当设置了 shell 选项时才能识别该语法extglob,但尚未设置:

pb.sh: 7: pb.sh: shopt: 未找到

未找到该shopt命令,因为它是 shell 内置命令,而运行该脚本的特定 shell 不支持它,因为塞斯的回答解释道。

相关内容