我写了这个脚本,但不知道为什么会出现语法错误:
#!/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
Run Code Online (Sandbox Code Playgroud)
输出
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#
Run Code Online (Sandbox Code Playgroud)
你的问题就在这里:
root@alex:/home/alex# sh pb.sh
Run Code Online (Sandbox Code Playgroud)
shopt
是一个内置的 shell(参见type shopt
)。/bin/sh
不是 Ubuntu 上的 bash,而是一个名为 dash 的兼容 shell。Dash 没有shopt
。
由于脚本的第一行是 shebang 行 ( #!/bin/bash
),因此您可以像这样运行脚本:
./pb.sh
Run Code Online (Sandbox Code Playgroud)
它应该可以正常工作。您可能需要通过运行将文件设置为可执行文件:
chmod +x pb.sh
Run Code Online (Sandbox Code Playgroud)