Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: помогите со скриптом bash [РЕШЕНО]  (Прочитано 1344 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DimmKo

  • Автор темы
  • Активист
  • *
  • Сообщений: 260
    • Просмотр профиля
    • Image Hosting
помогите со скриптом bash [РЕШЕНО]
« : 07 Сентября 2015, 09:04:32 »
Добрый день,
пожалуйста, помогите написать скрипт.
вот что я сам накатал, но думаю что тут не все правильно, как хотелось бы.
#!/bin/bash
udevadm info /dev/ttyUSB0 &> ~/usb_detect
cat ~/usb_detect | grep N:
if [N: ttyUSB0]
then return0
else
cat ~/usb_detect | grep Unknow
        if [Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.]
            then
            udevadm info /dev/ttyUSB1 &> ~/usb_detect && cat ~/usb_detec | grep N:
                                if [N: ttyUSB1]
    then
                                    cp /etc/smsd.conf.usb1 /etc/smsd.conf && service sms3 restart
fi                                                     
суть скрипта:
(Нажмите, чтобы показать/скрыть)
Спасибо.
« Последнее редактирование: 07 Сентября 2015, 11:12:38 от DimmKo »
Ubuntu Server 20.04.2 LTS | x86_64

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: помогите со скриптом bash
« Ответ #1 : 07 Сентября 2015, 09:20:25 »
Поясни строку
if [Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.]

Пользователь решил продолжить мысль 07 Сентября 2015, 09:24:55:
Можно обойтись без файла
Код: (bash) [Выделить]
#!/bin/bash

A="$(udevadm info /dev/ttyUSB*)"

echo "$A" | grep -q '^N: ttyUSB0' && exit 0
echo "$A" | grep Unknow
        ???if [Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.]
         
echo "$A" | grep -q '^N: ttyUSB1' && cp /etc/smsd.conf.usb1 /etc/smsd.conf && service sms3 restart
« Последнее редактирование: 07 Сентября 2015, 09:24:55 от Cxms »

Оффлайн DimmKo

  • Автор темы
  • Активист
  • *
  • Сообщений: 260
    • Просмотр профиля
    • Image Hosting
Re: помогите со скриптом bash
« Ответ #2 : 07 Сентября 2015, 09:25:04 »
Cxms,
если на данном USB ничего нет, то выводится вот такая строка.
Прилагаю скрин.
(Нажмите, чтобы показать/скрыть)
Ubuntu Server 20.04.2 LTS | x86_64

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: помогите со скриптом bash
« Ответ #3 : 07 Сентября 2015, 09:33:16 »
Код: (bash) [Выделить]
#!/bin/bash

udevadm info /dev/ttyUSB* | grep -q '^N: ttyUSB0' && exit 0

udevadm info /dev/ttyUSB* || grep -q Unknow && grep -q '^N: ttyUSB1' && cp /etc/smsd.conf.usb1 /etc/smsd.conf && service sms3 restart

Оффлайн DimmKo

  • Автор темы
  • Активист
  • *
  • Сообщений: 260
    • Просмотр профиля
    • Image Hosting
Re: помогите со скриптом bash
« Ответ #4 : 07 Сентября 2015, 09:41:17 »
Cxms,
спасибо.
Я правильно понимаю ход мысли?:
1) udevadm info /dev/ttyUSB* | grep -q '^N: ttyUSB0' && exit 0
выполняется опрос, ищется строка и если строка есть, то выход.

2) udevadm info /dev/ttyUSB* || grep -q Unknow && grep -q '^N: ttyUSB1' && cp /etc/smsd.conf.usb1 /etc/smsd.conf && service sms3 restart
выполняется опрос, ищется строка и если строка есть, то копируется конфиг и перезапускается сервис.

Отсюда у меня вопрос:
если он на USB1 не найдет устройство, а найдет на USB0, то как тогда скопируется конфиг и перезапустится служба?
Ubuntu Server 20.04.2 LTS | x86_64

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: помогите со скриптом bash
« Ответ #5 : 07 Сентября 2015, 09:52:41 »
1. Да
2.(код пока работать не будет)
Цитировать
если на данном USB ничего нет, то выводится вот такая строка.
Т.е вообще не подключен или на ttyUSB1?

Как будет искать в выводе строку ttyUSB1, если вывод только
Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.?

Пользователь решил продолжить мысль [time]07 Сентябрь 2015, 09:58:10[/time]:
Код: (bash) [Выделить]
#!/bin/bash
udevadm info /dev/ttyUSB* | grep -q '^N: ttyUSB0' && exit 0

udevadm info /dev/ttyUSB0 &>/dev/null || {
cp /etc/smsd.conf.usb1 /etc/smsd.conf && service sms3 restart
}


Пользователь решил продолжить мысль 07 Сентября 2015, 10:03:56:
Должно работать.
1. Если в выводе найдена строка N: ttyUSB0 - Выход
2. Если код завершения при вызове команды с потром ttyUSB0 не ноль (false)
выполнится копирование и перезапуск службы.
« Последнее редактирование: 07 Сентября 2015, 10:03:56 от Cxms »

Оффлайн DimmKo

  • Автор темы
  • Активист
  • *
  • Сообщений: 260
    • Просмотр профиля
    • Image Hosting
Re: помогите со скриптом bash
« Ответ #6 : 07 Сентября 2015, 10:05:42 »
Cxms,
спасибо за помощь.
Вот скрин как выглядит команда на разных USB
(Нажмите, чтобы показать/скрыть)
Ubuntu Server 20.04.2 LTS | x86_64

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: помогите со скриптом bash
« Ответ #7 : 07 Сентября 2015, 10:17:19 »
Работает?

Оффлайн DimmKo

  • Автор темы
  • Активист
  • *
  • Сообщений: 260
    • Просмотр профиля
    • Image Hosting
Re: помогите со скриптом bash
« Ответ #8 : 07 Сентября 2015, 10:23:59 »
Cxms,
нет.
Вот смотрите: сейчас устройство на USB0, а до этого было на USB1. Соответственно конфиг (smsd.conf) сейчас выглядит так:
(Нажмите, чтобы показать/скрыть)
но устройство же на USB0. Соответственно строка должна быть "device = /dev/ttyUSB0"
Ubuntu Server 20.04.2 LTS | x86_64

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: помогите со скриптом bash
« Ответ #9 : 07 Сентября 2015, 10:34:05 »

Замена ttyUSB1 на ttyUSB0
sed -i 's/ttyUSB1/ttyUSB0/g' /etc/smsd.conf

и перезапуск службы
service sms3 restart

Оффлайн DimmKo

  • Автор темы
  • Активист
  • *
  • Сообщений: 260
    • Просмотр профиля
    • Image Hosting
Re: помогите со скриптом bash
« Ответ #10 : 07 Сентября 2015, 10:49:35 »
Cxms,
заменил, выполнил команды - ничего не произошло. Почему-то не копируется конфиг.
#!/bin/bash
udevadm info /dev/ttyUSB* &> ~/usb_detect
cat ~/usb_detect | grep -iE "(N:|Unknow)"
if [N: ttyUSB0]
then
                        cp /etc/smsd.conf.usb0 /etc/smsd.conf && service sms3 restart
else
                if [N: ttyUSB1]
                        then
                        cp /etc/smsd.conf.usb1 /etc/smsd.conf && service sms3 restart
fi
а если так вот, как считаете?
наверное и Unknow можно убрать  :crazy2:
« Последнее редактирование: 07 Сентября 2015, 10:57:39 от DimmKo »
Ubuntu Server 20.04.2 LTS | x86_64

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: помогите со скриптом bash
« Ответ #11 : 07 Сентября 2015, 11:01:18 »
Сам то хоть пробывал?
Синтаксис не верен (test, переменные, конструкция if/then)
Тогда уж так:
Код: (bash) [Выделить]
#!/bin/bash
udevadm info /dev/ttyUSB* | grep -q '^N: ttyUSB0' && {
cp /etc/smsd.conf.usb0 /etc/smsd.conf && service sms3 restart
}
udevadm info /dev/ttyUSB* | grep -q '^N: ttyUSB1' && {
cp /etc/smsd.conf.usb1 /etc/smsd.conf && service sms3 restart
}

Оффлайн DimmKo

  • Автор темы
  • Активист
  • *
  • Сообщений: 260
    • Просмотр профиля
    • Image Hosting
Re: помогите со скриптом bash
« Ответ #12 : 07 Сентября 2015, 11:03:41 »
Cxms,
да сам попробовал и получил в ответ
root@host110:~# bash usb.sh
N: ttyUSB0
usb.sh: line 12: syntax error: unexpected end of file
Потому и обратился на форум за помощью.

Сейчас попробую ваш код.

Пользователь решил продолжить мысль [time]07 Сентябрь 2015, 12:07:43[/time]:
Спасибо!!!  :smiley6600:
Ваш код заработал!!! Просто супер.
(Нажмите, чтобы показать/скрыть)

Огромное спасибо.
Ща я его в cron поставлю, пусть выполняется раз в 4 часа.

Пользователь решил продолжить мысль 07 Сентября 2015, 11:13:13:
Cxms,
сразу же поставил.
В тему тоже добавил.

Еще раз спасибо!!!
« Последнее редактирование: 07 Сентября 2015, 11:13:14 от DimmKo »
Ubuntu Server 20.04.2 LTS | x86_64

 

Страница сгенерирована за 0.058 секунд. Запросов: 23.