Сообщение об ошибке Shell script

Я пытаюсь изучить сценарии оболочки, читая linuxcommand.org . По какой-то причине я продолжаю получать сообщение об ошибке «Not Found», хотя он выполняет все команды.

Коды ошибок, которые я получаю:

minecraft_backup.sh: 21: run_backup: not found minecraft_backup.sh: 23: function: not found 

Вот сценарий:

 #!/bin/bash #MineCraft backup script by #Variables APP=MineCraft SERVICE=Minecraft_Mod.jar APPDIR=/opt/MineCraft_Server/bin BACKUPDIR1=/opt/MineCraft_Server/backup1 BACKUPDIR2=/opt/MineCraft_Server/backup2 #First i want to check if minecraft server is running. if(ps ax | grep -v grep | grep $SERVICE > /dev/null) then echo "$APP is running" $(run_backup) else echo "$APP is not running" exit 1 fi function run_backup { echo "Starting back up" #create backup dirs of they do not exit if [ ! -d "$BACKUPDIR1" ] then mkdir $BACKUPDIR1 fi if [ ! -d "$BACKUPDIR2" ] then mkdir $BACKUPDIR2 echo "test" fi #backup save1 to save2 rsync -av --delete "$BACKUPDIR1/" "$BACKUPDIR2" #backup running app to save 1 rsync -av --delete "$APPDIR/" "$BACKUPDIR1" } 

4 Solutions collect form web for “Сообщение об ошибке Shell script”

Стандартной конструкцией для определения функции является

 run_backup () { … } 

В ksh, bash и zsh, но не в других оболочках, таких как тире, вы можете определить функцию с

 function run_backup { … } 

Что случилось, когда вы запускали скрипт с тире:

  • Оболочка выполнила $(run_backup) , естественно, в результате появилось первое сообщение об ошибке, так как не было команды под названием run_backup .
  • Позднее оболочка выполнила function run_backup , естественно, привело к появлению второго сообщения об ошибке, так как не было никакой команды, называемой function .
  • Затем оболочка выполнила скопированный блок, который сам по себе является допустимым синтаксисом оболочки.

Обратите внимание, что, как указывает комментарий xenoterracide, поскольку у вас есть #!/bin/bash , скрипт был бы запущен bash если вы не сделали что-то неправильно.

Даже если вы запустите скрипт с правильной оболочкой или (моя рекомендация), измените function на стандартный синтаксис (я не вижу никакой другой нестандартной конструкции), вам все равно нужно переместить определение функции до ее использования.

Еще один полезный совет: когда вы отлаживаете скрипт оболочки, запустите bash -x /path/to/script (или sh -x /path/to/script и т. Д.). Это выводит трассировку каждой выполненной строки. Если вы хотите проследить только часть скрипта, вы можете использовать set -x для включения трассировки и set +x для их отключения. Zsh имеет лучшие следы, чем другие, но имеет несовместимый синтаксис; вы можете сказать zsh, чтобы ожидать синтаксиса sh с помощью команды emulate sh 2>/dev/null (которая не действует в других оболочках).

Перед использованием вы должны определить свои функции.

Думаю, я решил это сам. Похоже, мне принадлежит тот факт, что Ubuntu использует dash по умолчанию, и я запускал скрипт с помощью команды sh … «вздох»,

Я собираюсь сделать некоторые догадки … vim не нравится, if( так что попробуйте, if ( это может быть просто vim.

Я думаю, что ваша настоящая проблема заключается в том, что вы вызываете run_backup прежде чем вы его создали. поставьте свою function до того, как вы будете блокировать if then else . оболочка должна знать о функциях, прежде чем они смогут их использовать. это относится к программированию в целом.

  • Когда устройство USB установлено как sdb, а когда в качестве sdc?
  • Получение «Ошибка протокола» при попытке создания символической ссылки в Docker
  • wubi плюсы и минусы
  • Выполнение программ без указания каталога?
  • При каждом перезагрузке придется переустанавливать драйвер NVidia
  • Проблема с двойной загрузкой окон 8 и ubuntu 14.04
  • Не удается достоверно создать каталог при запуске после того, как экземпляр ec2 монтирует свои эфемерные диски
  • Восстановить / etc / файлы конфигурации по умолчанию
  • Почему это сообщение об ошибке python генерируется всякий раз, когда я набираю команду бессмысленности?
  • Внешний привод не распознается
  • Редактирование Ubuntu ISO
  • Interesting Posts

    Как проверить оставшуюся жизнь на SSD или уровне износа среды?

    Как распаковать, изменить, перестроить и установить SRPM

    Почему bash.exe запускается дважды при использовании –login?

    Почему я не могу связать прерывания с кодом LOC, IWI, RES, когда irqbalance отключен?

    Просто установлен Debian – возникли проблемы с подключением к беспроводной сети

    Помимо доступа к диску, есть ли штрафы за производительность при запуске программы с USB-накопителя?

    Найти все каталоги, в которых у пользователя есть доступ к поиску и эхо из этих каталогов в оболочке

    Как восстановить после удаления только клавиши LUKS?

    Есть ли какая-либо команда linux для ускорения выполнения файлов?

    Как диспетчер отображает пользователя?

    Искать в меньшей степени с обтеканием в EOF

    команда sed remove – включить верхний / нижний регистр

    Сколько удаленных пользователей?

    Пусть передача выполняется на сервере, независимо от сеанса SSH

    Является ли каталог / dev единственным местом в Linux, где файлы устройств могут быть сохранены?

    Linux и Unix - лучшая ОС в мире.