The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Bash-программирование (shell howto)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: shell, howto,  (найти похожие документы)
From: Докучаев Дмитрий <forb@k-uralsk.ru> Subject: Bash-программирование http://kamensk.net.ru/forb/info/linux/programm/bash.html Bash-программирование _________________________________________________________________ Юниксовый Bourne Shell (/bin/sh) является не только стандартным интерфейсом твоего пристанища на *nix, но и замечательным средством для программирования. С помощью sh-скриптов можно с лёгкостью решить сложнейшие задачи в несколько строк текста. Если ты работаешь под Win32, то порядок составления скриптов чем то напоминает написание BAT файлов, но не копирует его. Многочисленные параметры значительно облегчают работу с составлением скриптов, в чём ты сам убедишся прочитав эту статью. Здесь я изложу лишь азы, с помощью которых ты сможешь разбираться в чужих sh-скриптах и с успехом составлять свои. Итак, приступим. Как и в perl-скриптах, начало скрипта начинается с полного пути к интерпретатору, этот путь в нашем случае будет #!/bin/sh - путь к шелл-интерпретатору. Переменные. В скрипте Shell можно использовать переменные. Самый простой способ присвоения значения переменной - написать следующее: perem=value При этом переменная perem получит значение value. Значением переменной можно воспользоваться в виде $perem. Чтобы отделить имя переменной от следующих символов, применяется ${perem}. Приятной особенностью Shell является то, что в переменную можно поместить вывод любой команды. Для этого используются обратные кавычки `` и следующий формат: perem=`command` Например, чтобы поместить в архив все файлы, новее oldfile, используется команда: tar czf new.tgz `find . newer oldfile -print` Если строку завершить символом "амперсенд" &, то Shell не будет ждать завершения команды, а отправит её в background (фоновый режим). Если же ты хочешь выполнить другой shell-скрипт в текущем, то просто вставь команду в скрипт: ./path/to/other/script В Shell содержатся встроенные переменные, которые значительно упрощают написание скриптов. Рассмотрим некоторые из них: $0 - название скрипта $1,$2,...,$n - параметры, переданные скрипту $# - число параметров, переданных скрипту $? - код возврата последнего процесса $$ - PID текущего процесса (PID - номер процесса в таблице процессов) $! - PID последнего процесса, запущенного в фоновом режиме $@ - список параметров, переданных скрипту $* - все параметры единой строкой Встроенные параметры значительно упрощают всю сложность задач. Пример: проверка существования пользователя $username в системе: #!/bin/sh grep $username /etc/passwd >/dev/null if [ $? -ne 0 ] then echo Пользователь не найден exit 1 fi Как видно из скрипта, если переменная возвратила ненулевое значение, то пользователь был обнаружен. Перенаправление ввода/вывода Существует 3 стандартных файловых дескриптора: ввод, вывод и вывод ошибки (stdin, stdout, stderr), но Shell позволяет открывать и другие потоки вывода. Рассмотрим их: &ltfile - перенаправление стандартного вывода (далее: stdout) в файл file <<file - перенаправление stdout для дозаписи в файл file >file - перенаправление стандартного ввода (далее: stdin) из файла file proc1|proc2 - перенаправление stdout процесса proc1 на stdin процесса proc2 n<file - перенаправление дескриптора с номером n в файл file n<<file - то же с дозаписью n1<&n2 - слияние потоков с дескрипторами n1 и n2 >>string - ввод до подстроки string "Ввод здесь". Форму перенаправления "Ввод здесь" очень удобно использовать. Пример: mail -s "Hello" >> TheEnd >message.txt root@localhost mail1@mail.ru mail2@mail.ru mail3@mail.ru TheEnd Условия. Для условия используется конструкция if..fi. Её формат такой: if условие then команда1 ..... командаN [elif условие ......] [else условие ......] fi Условие может быть любой командой, например if grep vasya /etc/passwd >/dev/null 2>&1 ; then echo Пользователь опознан ; fi Циклы Циклы в Shell бывают следующие: while, until и for. Цикл while выполняется пока условие истинно, например: while условие do команды done Цикл until - пока условие ложно. For - для всех элементов списка: for переменная in список do команды done Пример массовой рассылки (mess.txt) всех пользователей из файла user.txt, за исключением тех, кто есть в файле stop.txt: for user in `cat users.txt` do if grep $user stop.txt</dev/null 2<&1 then echo Skip $user else mail -s "Рассылка" $user >message.txt fi done Выбор. За выбором следит оператор case. Его использование: case значение in шаблон1) команды1 ;; шаблон2) команды2 ;; .... *) команды ;; ecas Шаблоны могут включать в себя выражения, содержащие *, ? и [abc]. Иногда это бывает очень полезно. Вот и всё. Это общая информация по Shell скриптам. Другие возможности желаешь? man sh or RTFM. http://kamensk.net.ru/forb/

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
 
  • 1, BigShadow, 12:06, 22/03/2006 [ответить] [смотреть все]
  • +/
    - список параметров, переданных скрипту - все параметры единой строкой т... весь текст скрыт [показать]
     
  • 3, bot, 14:29, 28/05/2006 [ответить] [смотреть все]  
  • +/
    Может не туда запостил, но все равно думаю кому-то очень облегчит жизнь Делалос... весь текст скрыт [показать]
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



    ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Оформить подписку на год


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList