我写了这个脚本,但我不知道为什么出现语法错误:
#!/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 不支持它,因为塞斯的回答解释道。