Программим на Shell-е
 
Юниксовый 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 позволяет открывать и другие потоки вывода. Рассмотрим их:
 
>file - перенаправление стандартного вывода (далее: stdout) в файл file
>>file - перенаправление stdout для дозаписи в файл file
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
;;
....
*)
команды
;;
esac
 
 
Шаблоны могут включать в себя выражения, содержащие *, ? и [abc]. Иногда это бывает очень полезно.
Вот и всё. Это общая информация по Shell скриптам. Другие возможности желаешь? man sh or RTFM.
Удачи в программировании.
 
Источник: неизвестен
Collected by Naigo.All Rights Reserved. 2004 year
Soft By Naigo
Only The Best Soft
www.softbynaigo.narod.ru
GISMETEO.RU: график температуры на 10 дней для г. Москвы
Яндекс цитирования
NSD.ru - Безопасность в сети! Всё о хакерстве. Анонимность. Защита. Противостояние...
Официальный сервер еженедельной газеты "ЕвроФУТБОЛ"
Супер! >
Бесплатно размещу рекламу!
    пишите на fromsitesbn@front.ru
Бесплатная раскрутка сайтов
Топ-5 статей
 
Анонимность
 
Полное руководство по взлому IIS сервера
 
Список портов
 
Регулярные выражения в PERL
 
Программим на Shell-e
Главная | Internet | Work | Security | Media | Coding | Библиотека
Главная | Internet | Work | Security | Media | Coding | Библиотека
Hosted by uCoz