Я записал этот сценарий, но я не знаю, почему у меня есть синтаксическая ошибка:
#!/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#
Ваша проблема прямо здесь:
root@alex:/home/alex# sh pb.sh
shopt
встроенная оболочка (см. type shopt
). /bin/sh
не удар на Ubuntu, но оболочка совместимости, названная тире. Тире не имеет shopt
.
, Так как первая строка Вашего сценария является строкой хижины (#!/bin/bash
), можно просто запустить скрипт как это:
./pb.sh
и это должно хорошо работать. Вы, возможно, должны установить файл как исполняемый файл путем выполнения:
chmod +x pb.sh
pb.sh: 8: pb.sh: Синтаксическая ошибка: "(" неожиданный
!(dynmap)
синтаксис только распознан, когда extglob
опция оболочки была установлена, и это не имело:
pb.sh: 7: pb.sh: shopt: не найденный
Эти shopt
команда не была найдена, потому что это - встроенная оболочка и конкретная оболочка, которая запустила скрипт, не поддерживает его, как , ответ Seth объясняет.