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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

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

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

Оффлайн ING

  • Активист
  • *
  • Сообщений: 366
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #45 : 08 Декабря 2009, 15:38:24 »
У меня вот такой вопрос:
Как в bash-скрипте вытащить имя файла-скрипта?
Т.е.
Есть у меня файлик-скрипт ... называется к примеру ws-001, содержит такой код:
#!/bin/sh
rdesktop -k en-us -u Admin -d ws-001 -a 16  ws-001

Нужно сделать так, чтоб, вместо ws-001 стаяла переменная-окружения (наверное) которая подставляла имя этого файл-скрипта ...

Смысл в том, что в сети более 100 машин, редактировать кучу скриптов и прописывать в каждой имя машины ... :( хотелось бы проще, просто меняешь имя файла на имя машины (и визуально понятно чей файл) и скрипт при выполнении уже знает к кому коннектиться :)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #46 : 08 Декабря 2009, 16:16:43 »
Запускаете скрипт
скрипт параметр

#!/bin/sh
rdesktop -k en-us -u Admin -d $1 -a 16  $1

Вместо $1 подставится параметр.
Если нужно куча файлов, то можно воспользоваться sed.

Оффлайн ING

  • Активист
  • *
  • Сообщений: 366
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #47 : 08 Декабря 2009, 16:29:22 »
Запускаете скрипт
скрипт параметр

#!/bin/sh
rdesktop -k en-us -u Admin -d $1 -a 16  $1

Вместо $1 подставится параметр.
Если нужно куча файлов, то можно воспользоваться sed.


Не-а ... мне не нужно что бы это была конструкция script param, мне нужно чтобы имя скрипт-файла подставлялось автоматом в качестве параметра ...

Представьте себе: у меня к примеру есть скрипт (как я уже писал выше) с именем той машины к которй я цепляюсь rdesktop. Появляется в сети еще пять машин (или десять, или как сегодня более тридцати) ... вместо того, чтобы копировать и РЕДАКТИРОВАТЬ файлы-скрипты, я просто их копирую и меняю им имена на имя рабочих станций. В о первых быстро, во вторых удобно (видно какой скрипт к какому компу имеет отношение). В третьих, так как у меня компы разбросаны по разным этажам, кабинетам и секторам, я создал простую иерархию каталогов :) по которым и раскидываю файл-скрипты. Т.е. возникает необходимость сотворить что нить удалено с компами того или иного отдела, я просто иду в соответствующий каталог и вижу все компы (их имена) могу запустить их скрипты и т.д.

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


Пользователь решил продолжить мысль [time]Tue Dec  8 14:52:45 2009[/time]:
Ну что ... я нашел :) Перелопатил кучу сайтов с howto как писать скрипты для shell и только в последнем нашел то, что нужно :) http://www.intuit.ru/department/se/pposix/2/2.html

А получается вот так:
wp1=$0
wp2=${wp1:2}
rdesktop -k en-us -u Admin -d $wp2 -a 16  $wp2

Поясняю ... в отличие от параметра $1 ... $9, параметр $0 - это имя интерпретируемой shell-процедуры. Т.е. имя файла-скрипта.

Может кому пригодиться :)
« Последнее редактирование: 08 Декабря 2009, 16:56:14 от ING »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #48 : 08 Декабря 2009, 16:55:51 »
Я ничего не понял.
Вас не устраивает 1 скрипт, а нужно 50.  Так ?

Оффлайн ING

  • Активист
  • *
  • Сообщений: 366
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #49 : 08 Декабря 2009, 16:59:15 »
Я ничего не понял.
Вас не устраивает 1 скрипт, а нужно 50.  Так ?

Ага, и даже не пятьдесят а гораздо больше, по количеству живых компов в компании :) По мимо это скрипты для ftp-доступа к принтерам (для обновления firmware), скрипты показывающие активность/не активность оборудования в сети и т.д., т.п. Все это раскидываю по иерархии каталогов, котрые отражают месторасположение оборудования или принадлежность их к определенной группе (в зависимости от того что мне нужно).

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #50 : 08 Декабря 2009, 17:05:21 »
Тогда сделайте скрипт генератор скриптов.

Оффлайн talifero

  • Участник
  • *
  • Сообщений: 181
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #51 : 08 Декабря 2009, 18:41:26 »
 Я так понял что ING имеет ввиду чтото вроде системной переменной (или как её там) :
echo $HOSTNAME
vasilij_terkin-desktop


Пользователь решил продолжить мысль 08 Декабря 2009, 16:50:28:
Нашел. В учебнике Advanced Bash-Scripting Guide Глава 9. К вопросу о переменных 9.1. Внутренние переменные
« Последнее редактирование: 08 Декабря 2009, 18:51:24 от talifero »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #52 : 09 Декабря 2009, 08:40:02 »
На всякий случай, может это требуется автору.
$0 - название скрипта.

Оффлайн ING

  • Активист
  • *
  • Сообщений: 366
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #53 : 09 Декабря 2009, 09:44:40 »
На всякий случай, может это требуется автору.
$0 - название скрипта.

Именно это и требовалось :)
Всем спасибо ...

Пользователь решил продолжить мысль [time]Wed Dec  9 07:49:10 2009[/time]:
Я так понял что ING имеет ввиду чтото вроде системной переменной (или как её там) :
echo $HOSTNAME
vasilij_terkin-desktop

Это для другого случая :)
« Последнее редактирование: 09 Декабря 2009, 09:50:22 от ING »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #54 : 09 Декабря 2009, 10:23:05 »
Именно это и требовалось :)
Неожиданно. :coolsmiley:

Оффлайн talifero

  • Участник
  • *
  • Сообщений: 181
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #55 : 09 Декабря 2009, 21:51:47 »
2ING Я понял что вам не $hostname нужен былл, ето я в качестве примера,  $0 ведь тоже внутренния переменная.

Оффлайн BorisPlus

  • Активист
  • *
  • Сообщений: 253
  • Болты вперед,болты назад,такой работе я очень рад!
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #56 : 09 Декабря 2009, 22:53:33 »
весьма полезненно! хочу еще)
Спасибо за помощь, товарищи!

Оффлайн Children of koRn

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #57 : 20 Декабря 2009, 03:00:29 »
захотел сделать скрипт для отсылания user tune из banshee в psi+ [сам код для пересылки есть под плеер амарок], но тут один ньюанс,
если banshee не запущен и выполнить команду banshee-1 --query-artist --query-title, то он запускается, поэтому, для начала, я решил написать скрипт для проверки запущен ли banshee, если запущен выводится информация о текущем треке, если нет - мессидж о том что не запущен, и заодно этот код заюзать для коньков :)
вот накидал два варианта, но оба не рабочие:
(Нажмите, чтобы показать/скрыть)

(Нажмите, чтобы показать/скрыть)
pgrep banshee поидее возвращает индикатор процесса если он запущен, если нет пустую строку.
как видно в первом случае вывод команды pgrep banshee пытался сранивался с "пустой" переменной, а во втором случае проверял пустая ли строка.
в первом случае всегда получаю "banshee is not running!", а во втором варианте наоборот всегда выполняется "banshee-1 --query-artist --query-title".
собственно прошу указать на ошибки :)
« Последнее редактирование: 20 Декабря 2009, 03:11:01 от Children of koRn »
Another year, another revolution.

Оффлайн Goren

  • Активист
  • *
  • Сообщений: 808
  • Unconditional Love
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #58 : 20 Декабря 2009, 03:19:34 »
b=" ";
a="`pgrep banshee`";
if [ "$a" == "$b" ]
Всё правильно делает. Если `pgrep banshee` - пустая строка, он возвращает true. Если хочешь, чтобы возвращал false, надо сделать наоборот if [ ! "$a" == "$b" ]

if [  -n "$a"  ]это означает "если переменная $a определена". Я сам так попадался, потому что в мане написано другое :) Вообще, я думаю, лучше сделать if [ ! -z "$a" ] это работает как ожидается.
Be a realist - denounce the obvious!

Оффлайн Children of koRn

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: HOWTO: Пишем bash скрипты
« Ответ #59 : 20 Декабря 2009, 03:32:47 »
Цитировать
Всё правильно делает.
правильно, да только не работает, как писал выше результат получается один всегда, в независимости запущен плеер или нет.
if [ ! -z "$a" ]
ситация не изменилась, опять же плеер не запущен, а вместо echo "banshee is not running!" выполняется `banshee-1 --query-artist --query-title` и идёт запуск плеера.

я вот думаю может ошибка кроется в "pgrep banshee"? может я не так что понимаю, вот результаты команды
Цитировать
banshee не запущен
leon@leon-desktop:~$ pgrep banshee
leon@leon-desktop:~$

banshee запущен
leon@leon-desktop:~$ pgrep banshee
10800
leon@leon-desktop:~$

Another year, another revolution.

 

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