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


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

Автор Тема: [HOWTO] Пишем bash скрипты  (Прочитано 220528 раз)

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

Оффлайн Сперанский

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4055
  • Dictum ac factum
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #225 : 21 Января 2013, 12:04:23 »
blackride,
Пункт 1 не понял практического применения (может пример приведете?), возможно к нему тоже относится сказанное ниже, а пункт 2 точно проще и правильнее реализовывать через правила udev, они специально для этого созданы, то есть алгоритм получится следующий:
1) в правилах udev задаете выполнение какого-либо действия на системное событие (подключение жесткого диска с заданным UUID)
2) выполнение данного дейсвтия (это уже простейшим скриптом или даже командой сразу из правила udev)

Оффлайн blackride

  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #226 : 21 Января 2013, 12:14:45 »
blackride,
Пункт 1 не понял практического применения (может пример приведете?), возможно к нему тоже относится сказанное ниже, а пункт 2 точно проще и правильнее реализовывать через правила udev, они специально для этого созданы, то есть алгоритм получится следующий:
1) в правилах udev задаете выполнение какого-либо действия на системное событие (подключение жесткого диска с заданным UUID)
2) выполнение данного дейсвтия (это уже простейшим скриптом или даже командой сразу из правила udev)
Если бы хотел через udev сюда бы не зашел. Т.к. эти udev организованы в любом лайф сд. Но просто порядок к примеру при перезагрузке будет меняться. А UUID - тут уже железно!
1. Вообще не знаю почему этого лиши Ubuntu/дебиан и др. линукс системы. Но на гигбоксе это реализовано. При переходе с windows очень раздражало, что каждый новый диск мне приходится в ручную монтировать, точнее прописывать в fstab автомонтирование для определенного uuid. Но ладно бы это было если у меня было 1-2 жестких дисков, а то мне приносят по 5-10 штук каждый день и разные. Не буду говорить зачем приносят и для чего - сугубо личное))).
Но вот такой бы скриптик спас меня от ручного добавления в fstab
« Последнее редактирование: 21 Января 2013, 12:21:13 от blackride »

Оффлайн Сперанский

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4055
  • Dictum ac factum
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #227 : 21 Января 2013, 12:20:29 »
blackride, вы, наверно, не правильно понимаете понятия правило udev и менеджер udev

Оффлайн blackride

  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #228 : 21 Января 2013, 13:44:42 »
Ясно. Как всегда никто не поможет. :-[
Хотя знающим людям написать такой скрипт не составит особого труда.

P.S. Дописал, чуть чуть. Правильно или нет...
!/bin/bash
# объявляем переменную STRING
STRING="Добавление нового диска в автозагрузку"
# вывод на экран
echo $STRING
echo `blkid`
blkid="ext2","ext3","ext4"
if [[ $blkid = "ext2" -o $blkid = "ext3" -o $blkid = "ext4" ]] ; then
    echo "... | sudo nano /etc/fstab"
fi
# Продолжение не могу осилить.
« Последнее редактирование: 21 Января 2013, 14:23:03 от blackride »

Оффлайн denis@desktop

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #229 : 24 Января 2013, 13:45:18 »
Можно ли в скрипте использовать несколько интерпретаторов? Например есть скрипт, который построчно считывает текстовый файл и по очереди отправляет эти данные по telnet на устройство с помощью expect. Если ввести оба нужных интерпретатора, то конечно второй игнорируется:
#!/bin/bash
#!/usr/bin/expect -f
Или выход только пару скриптов делать, вызывающих друг друга?

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #230 : 24 Января 2013, 20:33:53 »
Можно ли в скрипте использовать несколько интерпретаторов?
#!/bin/bash
#!/usr/bin/expect -f
Нельзя. Механизм примерно такой: читается первая строка файла скрипта, и если она начинается с символов "#!" (sha-bang), то всё что идёт после этих символов считается командной строкой, которую нужно выполнить, добавив к ней в качестве параметра имя файла скрипта (в этом примере запускается /bin/bash <имя-файла-скрипта>). Интерпретатор читает файл скрипта и просто-напросто игнорирует все строки, которые начинаются с "#" (решётки), т.к. для интерпретатора эти строки - обычные комментарии (даже строка "#!/bin/bash").

Axa-Ru

  • Автор темы
  • Гость
Re: [HOWTO] Пишем bash скрипты
« Ответ #231 : 24 Января 2013, 20:41:12 »
Вот стандартный механизм использования expect внутри bash скрипта:

#!/bin/bash

[выражения скрипта на bash]
expect <<EOF

[выражения скрипта на expect]

# EOF указывает на завершение скрипта на expect
EOF
[ опять выражения скрипта на bash]


Оффлайн denis@desktop

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #232 : 25 Января 2013, 09:47:20 »
Спасибо! Теперь работает как надо.

Оффлайн shkostya

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #233 : 12 Февраля 2013, 10:43:51 »
Подскажите начинающему :), почему не работает :((?
test="cp ~/test/* ~/test_arh"
echo $test
>cp ~/test/* ~/test_arh
${test}
>cp: cannot stat '~/test/*' : No such file or directory # Почему так?
#А команда cp ~/test/* ~/test_arh отрабатывает без проблем?
#При замене ~ на путь ничего не меняется...


Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #234 : 12 Февраля 2013, 11:01:04 »
test="`cp -v ~/test/* ~/test_arh`"
Wars ~.o

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: [HOWTO] Пишем bash скрипты
« Ответ #235 : 12 Февраля 2013, 11:04:19 »
shkostya, сравните:
Код: (bash) [Выделить]
set -x
CMD="ls ~" ; $CMD
CMD="ls ~" ; bash -c "$CMD"

Оффлайн shkostya

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #236 : 12 Февраля 2013, 11:45:33 »
ArcFi Спасибо. Как писать понятно. Если еще пару слов теории добавите, буду оч.благодарен.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: [HOWTO] Пишем bash скрипты
« Ответ #237 : 12 Февраля 2013, 13:08:12 »
Если еще пару слов теории добавите, буду оч.благодарен.
Смысл в том, что тильда при экранировании не преобразуется в путь.
В первом случае получается неявное экранирование при подстановке значения переменной.
Во втором случае вызывается отдельный экземпляр интерпретатора, которому строка передаётся уже после подстановки.

Оффлайн shkostya

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #238 : 12 Февраля 2013, 13:11:16 »
Спасибо. В примере с ls теперь все понятно. И еще конечно моя ошибка - смотреть значение переменной эхом, вместо включения дебагирования. Буду иметь в виду
« Последнее редактирование: 12 Февраля 2013, 13:13:29 от shkostya »

Оффлайн vitalmar

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #239 : 15 Февраля 2013, 21:34:37 »
Доброго времени суток! Нужна помощь в написании скрипта. Есть некоторое кол-во файлов, от 5 до 30, необходимо составить список файлов и записать их в формате плейлиста m3u.
Примерную последовательность представляю так:
1. Ищем файлы по маске с помощью find /zzz/yyy/xxx/video/ -iregex '.*\.\(avi\|mkv\)';
2. Записываем этот список в массив или временный файл (?)
3. Форматируем входящие данные из /zzz/yyy/xxx/video/1.avi в http://ip_test/video/1.avi (т.е. необходимо заменить /zzz/yyy/xxx/video/ на http://ip_test/video/)
4. Записываем в плейлист(play.m3u) в формате:
#EXTM3U
#EXTINF:0,1
http://ip_test/video/1.avi
#EXTINF:0,2
http://ip_test/video/2.mkv
#EXTINF:0,3
http://ip_test/video/3.avi

Можно еще проверять на существует файл плейлиста или нет, если существует то удалить/очистить его и записать данные, если нет, то создать.
Буду очень благодарен!

=====
Набросал временный вариант
find /zzz/yyy/xxx/video/ -iregex '.*\.\(avi\|mkv\)' > play.m3u
sleep 1
sed -i 's/\/zzz\/yyy\/xxx/http:\/\/77\.77\.77\.257/g' play.m3u
sed -i '1i #EXTM3U' play.m3u
« Последнее редактирование: 15 Февраля 2013, 23:49:35 от vitalmar »

 

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