Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Синтаксическая ошибка в Bash-скрипте

61K
19 мая 2012 года
vahminator
25 / / 30.10.2011
Помогите найти ошибку... В строке:
 
Код:
case $global  in
ругается на ошибку синтаксиса...
Пишу под Ubuntu

Вот весь код:

Код:
#!/bin/bash
echo "1. Бекапим файлик"
echo "2. Создаем новый"
echo "3. Вносим настройки интернета"
echo
read global;
case $global  in  
1)
echo
cp -i -p  /etc/network/interfaces /home/vahminator # Бекапим файл в папку профиля
echo
ls -l
;;
2)  
echo
echo Ну что, создадим новый файл с настройками??
sudo touch interfaces
echo
echo Все создано!!
ls -l
;;
3)
echo
echo Динамичесий
echo Статический
echo Вторичный сетевой интерфейс
echo
read network_setting
case $network_setting in
1)
sudo /etc/init.d/networking restart #Рестарт системы и настройки DHCP появятся автоматически
2)

sudo chmod 777 * /etc/network/interfaces # Ставим права на запись
cat /dev/null > /etc/network/interfaces #Чистим файл от мусора
# Далее тупо записываем новое содержимое в interfaces с переменными
echo "# This file describes the network interfaces available on your system" >> /etc/network/interfaces
echo "# and how to activate them. For more information, see interfaces(5). " >> /etc/network/interfaces
echo " " >> /etc/network/interfaces
echo "# The loopback network interface" >> /etc/network/interfaces
echo "auto lo" >> /etc/network/interfaces
echo "iface lo inet loopback " >> /etc/network/interfaces
echo " " >> /etc/network/interfaces
echo "# The primary network interface " >> /etc/network/interfaces
echo "auto eth$eth_number " >> /etc/network/interfaces
echo "iface eth$eth_number inet static " >> /etc/network/interfaces
echo "        address $address " >> /etc/network/interfaces
echo "        netmask $netmask" >> /etc/network/interfaces
echo "        network $network" >> /etc/network/interfaces
echo "        broadcast $broadcast" >> /etc/network/interfaces
echo "        gateway $gateway" >> /etc/network/interfaces
echo "        dns-nameservers $dns " >> /etc/network/interfaces
echo " " >> /etc/network/interfaces
echo " " >> /etc/network/interfaces
echo "# The secondary network interface" >> /etc/network/interfaces
echo "auto eth$eth_number_two" >> /etc/network/interfaces
echo "iface eth$eth_number_two inet static" >> /etc/network/interfaces
echo "       address $ip_address" >> /etc/network/interfaces
echo "       netmask $net_mask" >> /etc/network/interfaces
echo
#******************************** Вводим значения в переменные ************************************
echo Введите данные:
read eth_number
read address
read netmask
read network
read broadcast
read gateway
read dns
echo $eth_number $address $netmask $network $broadcast $gateway $dns >> /etc/network/interfaces
echo
echo Показать настройки?
echo 1- Да
echo 2- НЕт
echo
read confirmation
case $confirmation in
1)
nano inet
;;
2)
exit
;;
esac

3)
echo Введите данные:
echo
echo Номер сетевого интерфейса:
read eth_number_two
echo IP адрес:
read ip_address
echo Маска:
read net_mask
echo $eth_number_two $ip_address $net_mask >> /etc/network/interfaces
echo
;;
esac
;;
esac
Прошу сильно не пинать мой код - я только учусь и еще не оч хорошо разобрался во всех тонкостях bash-a..
285
19 мая 2012 года
Romik
479 / / 24.11.2002
в case каждый блок должен завершаться строкой с ;;

 
Код:
case $network_setting in
1)
sudo /etc/init.d/networking restart #Рестарт системы и настройки DHCP появятся автоматически
# вот тут забыл ;;
2)

# аналогично и для второго вариант case
61K
20 мая 2012 года
vahminator
25 / / 30.10.2011
Цитата: Romik
в case каждый блок должен завершаться строкой с ;;

 
Код:
case $network_setting in
1)
sudo /etc/init.d/networking restart #Рестарт системы и настройки DHCP появятся автоматически
# вот тут забыл ;;
2)

# аналогично и для второго вариант case


Спасибо!! Все должно работать.. а вот ща начало ругаться на:

 
Код:
#!/bin/bash
Говорит что плохой интерпретатор, нет такого файла или каталога.
Хотя я все проверил - все правильно...
285
20 мая 2012 года
Romik
479 / / 24.11.2002
Скорее всего с этой строкой что-то не так - либо лишние пробелы вначале/середине, либо в конце строки добавлено ещё что-то.
Убедись, есть права на исполнения для твоего пользователя у /bin/bash
61K
20 мая 2012 года
vahminator
25 / / 30.10.2011
Цитата: Romik
Скорее всего с этой строкой что-то не так - либо лишние пробелы вначале/середине, либо в конце строки добавлено ещё что-то.
Убедись, есть права на исполнения для твоего пользователя у /bin/bash


Добавил права на исполнение + полный доступ (777) - всеравно ругаеться((

285
20 мая 2012 года
Romik
479 / / 24.11.2002
Полный доступ - это лишнее, достаточно 0755
Как именно ругается? Было бы хорошо увидеть первые 3 строки скрипта, в том числе и пустые. А лучше выложить его полностью (с отступами)
61K
20 мая 2012 года
vahminator
25 / / 30.10.2011
Вот полный код...
Код:
#!/bin/bash
echo "1. Бекапим файлик"
echo "2. Создаем новый"
echo "3. Вносим настройки интернета"
echo
    read bla;
case $bla  in
    1)
    echo
# Бекапим файл в папку профиля
        cp -i -p  /etc/network/interfaces /home/vahminator
    echo
        ls -l
    ;;
    2)  
    echo
    echo Ну что, создадим новый файл с настройками??
        sudo touch interfaces
    echo
    echo Все создано!!
        ls -l
    ;;
    3)
    echo
    echo Динамичесий
    echo Статический
    echo Вторичный сетевой интерфейс
    echo
    read network_setting
        case $network_setting in
        1)
            sudo /etc/init.d/networking restart #Рестарт системы и настройки DHCP появятся автоматически
        2)

            sudo chmod 777 * /etc/network/interfaces # Ставим права на запись
            cat /dev/null > /etc/network/interfaces #Чистим файл от мусора
        # Далее тупо записываем новое содержимое в interfaces с переменными
        echo "# This file describes the network interfaces available on your system" >> /etc/network/interfaces
        echo "# and how to activate them. For more information, see interfaces(5). " >> /etc/network/interfaces
        echo " " >> /etc/network/interfaces
        echo "# The loopback network interface" >> /etc/network/interfaces
        echo "auto lo" >> /etc/network/interfaces
        echo "iface lo inet loopback " >> /etc/network/interfaces
        echo " " >> /etc/network/interfaces
        echo "# The primary network interface " >> /etc/network/interfaces
        echo "auto eth$eth_number " >> /etc/network/interfaces
        echo "iface eth$eth_number inet static " >> /etc/network/interfaces
        echo "        address $address " >> /etc/network/interfaces
        echo "        netmask $netmask" >> /etc/network/interfaces
        echo "        network $network" >> /etc/network/interfaces
        echo "        broadcast $broadcast" >> /etc/network/interfaces
        echo "        gateway $gateway" >> /etc/network/interfaces
        echo "        dns-nameservers $dns " >> /etc/network/interfaces
        echo " " >> /etc/network/interfaces
        echo " " >> /etc/network/interfaces
        echo "# The secondary network interface" >> /etc/network/interfaces
        echo "auto eth$eth_number_two" >> /etc/network/interfaces
        echo "iface eth$eth_number_two inet static" >> /etc/network/interfaces
        echo "       address $ip_address" >> /etc/network/interfaces
        echo "       netmask $net_mask" >> /etc/network/interfaces
        echo
        #******************************** Вводим значения в переменные ************************************
        echo Введите данные:
            read eth_number
            read address
            read netmask
            read network
            read broadcast
            read gateway
            read dns
        echo $eth_number $address $netmask $network $broadcast $gateway $dns >> /etc/network/interfaces
        echo
        echo Показать настройки?
        echo 1- Да
        echo 2- НЕт
        echo
        read confirmation
            case $confirmation in
            1)
                nano inet
            ;;
            2)
                exit
            ;;
            esac

        3)
        echo Введите данные:
        echo
        echo Номер сетевого интерфейса:
            read eth_number_two
        echo IP адрес:
            read ip_address
        echo Маска:
            read net_mask
        echo $eth_number_two $ip_address $net_mask >> /etc/network/interfaces
        echo
        ;;
        esac
    ;;
    esac
285
20 мая 2012 года
Romik
479 / / 24.11.2002
Как именно ругается?

Немного о code-style
Неужели отступы - это так сложно? Читать ваш код неудобно, не ясно где какой блок завершается.
Рекомендую придерживаться правила, брать в кавычки строки.
К тому же у вас не обработки варианта, который не входит в перечисленные: *)
Комментарии лучше использовать над целевой строкой, а не в конце. Если уж в конце, то в отдельной колонке.
Вообще рекомендую к прочтению Style Guide Shell
61K
20 мая 2012 года
vahminator
25 / / 30.10.2011
Вот что пишет..
285
20 мая 2012 года
Romik
479 / / 24.11.2002
Глядя на представленный код, я не могу найти ошибку. Однако я не уверен, что всё верно, так как разобраться в неотформатированном коде сложно.
61K
20 мая 2012 года
vahminator
25 / / 30.10.2011
Цитата: Romik
Глядя на представленный код, я не могу найти ошибку. Однако я не уверен, что всё верно, так как разобраться в неотформатированном коде сложно.


код выше исправил на отформатированый... Может так будет лучше видно...

285
21 мая 2012 года
Romik
479 / / 24.11.2002
В 32 и 86 строках у вас по прежнему нет завершающих символов ;;
Но я так и не увидел, что могло бы вызвать представленную вами ошибку.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог