Ошибка при выполнении bash скрипта

Тема в разделе "Администрирование серверов", создана пользователем illmano, 2 сен 2014.

Модераторы: mefish, stooper
  1. illmano

    illmano

    Регистр.:
    20 июн 2012
    Сообщения:
    170
    Симпатии:
    14
    Всем привет.
    Нашел в интернете такой скрипт для бекапа сайта
    Код:
    #!/bin/bash
    ### system setup ###
    GZIP="$(which gzip)"
    NOW=$(date +"%d-%m-%Y")
    ### www dirs setup ###
    WWW_NAMES=("site1" "site2" "site3")
    WWW_PATHS=("/var/www/site1/" "/var/www/site2/" "/var/www/site3/")
    WWW_BACKUP_DIR=/var/www/backups/domains
    FILES_OLDER_THAN=14 #days
    # backup www
    for WWW in ${!WWW_NAMES[*]}; do
        WWW_DIR=$WWW_BACKUP_DIR/${WWW_NAMES[$WWW]}
        if [ ! -d "$WWW_DIR" ]; then
            mkdir -p $WWW_DIR
        fi
        FILE=$WWW_DIR/www-${WWW_NAMES[$WWW]}-$NOW.tar.gz
        tar -zcf $FILE ${WWW_PATHS[$WWW]}
    done
    # delete files older than $DB_OLDER_THAN days
    find $WWW_BACKUP_DIR -type f -mtime +$FILES_OLDER_THAN -exec rm {} \;
    Запускаю его и получаю такие ответы:
    Код:
    sh backup_www.sh
    
    'ackup_www.sh: line 11: syntax error near unexpected token `do
    
    'ackup_www.sh: line 11: `for WWW in ${!WWW_NAMES[*]}; do
    В чем ошибка?
     
    Последнее редактирование: 2 сен 2014
  2. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    380
    Симпатии:
    384
    даже сходу тяжело что то сказать, ибо тупо скопипастил код себе и он отработал без ошибок.
    Тогда начнем с простого: Ваша ОС? Какой командный интерпретатор по умолчанию? (дайте вывод echo $SHELL )
     
  3. illmano

    illmano

    Регистр.:
    20 июн 2012
    Сообщения:
    170
    Симпатии:
    14
    centos-6

    Код:
    echo $SHELL
    /bin/bash
     
  4. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    380
    Симпатии:
    384
    фу блин, только щас разглядел, вы запускаете скрипт через интерпретатор sh ...
    делаете backup_www.sh исполняемым (chmod +x backup_www.sh ) и просто запускаете его, если из той же директории, то ./backup_www.sh
    Вы точно 1в1 скопировали себе в файл то, что сюда запостили? не забыли у себя #!/bin/bash ?
    В чем файл редактировали? В виндовом блокноте или линух редакторе - после do может прилепился какой то символ? (в mcedit можно например увидеть)
     
  5. illmano

    illmano

    Регистр.:
    20 июн 2012
    Сообщения:
    170
    Симпатии:
    14
    Код:
    # chmod +x backup_www.sh
    # ./backup_www.sh
    -bash: ./backup_www.sh: /bin/bash^M: bad interpreter: No such file or directory
    Может неправильно запускаю? я не очень силен в ssh
    Скопировал с сайта в notepad++ и отредактировал. Насколько мне известно notepad++ не добавляет символов сам.
     
  6. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    380
    Симпатии:
    384
    да, проблема именно в добавлении символов ^M в конец каждой строки.
    отредактируй в мс (самый простой редактор, установка yum install mc ) поудаляй в конце строк ^M и вообще лишний мусор.
     
  7. illmano

    illmano

    Регистр.:
    20 июн 2012
    Сообщения:
    170
    Симпатии:
    14
    проблема какая-то при установке
    Код:
    Total download size: 1.8 M
    Is this ok [y/N]: y
    Downloading Packages:
    http://centos.alt.ru/repository/centos/6/i386/mc-4.8.11-1.el6.i686.rpm: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 403"
    Trying other mirror.
    
    
    Error Downloading Packages:
      2:mc-4.8.11-1.el6.i686: failure: mc-4.8.11-1.el6.i686.rpm from CentALT: [Errno 256] No more mirrors to try.
     
  8. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    380
    Симпатии:
    384
    репозиторий CentALT больше не будет делать пакетов, поэтому автор предусмотрительно убрал доступ к репе с устаревшим софтом. Можете отключить эту репу (или переместить/удалить файл
    сentalt.repo из директории /etc/yum.repos.d/ или внутри него ставите enabled=0).
     
  9. illmano

    illmano

    Регистр.:
    20 июн 2012
    Сообщения:
    170
    Симпатии:
    14
    Это для меня не под силу)

    Я как-то по удалял символы
    теперь такое
    Код:
    sh backup_www.sh
    backup_www.sh: line 20: syntax error: unexpected end of file
    но 20 строки у меня нет. их всего 19.
     
  10. metsys

    metsys

    Регистр.:
    27 апр 2014
    Сообщения:
    380
    Симпатии:
    384
    там скорее всего тот же ^M
    и не запускайте через sh, делайте ./backup_www.sh (если вы в той же директории что и файл)
    в вашем листинге в первом посте, 20 строка это:
    find $WWW_BACKUP_DIR -type f -mtime +$FILES_OLDER_THAN -exec rm {} \;