|
Ключевые слова: shell, (найти похожие документы)
From: iNo <ino@kodsweb.ru.> Newsgroups: email Date: Mon, 24 Oct 2007 14:31:37 +0000 (UTC) Subject: Shell-кодинг ---------------------------------------------------------------------- # # # Author: iNo // k0dsweb gr0up # # Статья является собственностью команды KodsWeb # # (www.kodsweb.ru) # # -= 06.09.2006 =- # # # # # # Shell-кодинг. # # # Intro... В данной статье я вкратце опишу shell-программирование,рассмотрю простейшие примеры и прокомментирую их.Сразу оговорюсь,что эта статья не является исчерпывающим руководством по shell- программированию.Но её будет достаточно чтобы освоить его основы. Несмотря на кажущуюся простоту shell-программирования,оно является достаточно мощным инструментом администратора unix-системы.Замечу,что для полноценного администрирования unix-системы,уметь программировать на shell просто необходимо. Все примеры протестированы на системе Slackware Linux 10.2 и полностью работоспособны. Общие положения. Комментарии начинаются с символа #,за исключением первой строки. Первой строкой сценария является путь к интерпретатору,начинающийся с #! с помошью которого будет запущен данный скрипт.Например: #!/bin/sh #А вот это уже комментарий Переменные,ввод и вывод данных. Для задания переменных используется оператор присваевания "=".Синтаксис следующий: <переменная>=<значение> Замечу,что в отличие от языков perl и php,между знаком "=" и остальными параметрами нельзя ставить пробел.В этом случае интерпретатор выдаст ошибку.Чтобы обратится к заданной переменной ,надо вызвать её поставив перед ней знак $.Удалить переменную можно с помощью оператора unset. Оператор Echo просто выводит строку(или переменную), идущую после него: #!/bin/sh var=Vasya echo $var >--------------------------------------< Vasya >--------------------------------------< #!/bin/sh echo My name is Vasya >--------------------------------------< My name is Vasya >--------------------------------------< В данный пример также можно добавить одинарные или двойные кавычки, от этого результат работы программы не изменится.Но не стоит использовать обратные кавычки,т.к.эти символы используются для выполнения команд: #!/bin/sh echo `My name is Vasya" >--------------------------------------< Error: My: command not found >--------------------------------------< #!/bin/sh echo 'ls -a' >--------------------------------------< . .. .bash_history script.sh >--------------------------------------< Оператор read присваевает значение переменной.Вот пример,который просит ввести переменную var,считывает её а затем выводит. #!/bin/sh echo "Input var:" read var echo "The var is $var" >--------------------------------------< Input var: 123 The var is 123 >--------------------------------------< Агрументы командной строки. Как и во всех консольных программах, в shell-сценарий можно передавать аргументы из командной строки.Переменные $1..$9 соответствуют параметрам, переданным из командной строки сценарию.Переменная $0 содержит имя интерпретируемого файла.$#-содержит количество переданных аргументов. $* и $@ содержат все аргументы,но в $@ все аргументы выделены кавычками. Напишем скрипт,который выводит 2 аргумента командной строки и имя исполняемого файла.Запуск скрипта: ./script.sh 1 2 #!/bin/sh echo "Name:$0" echo "First argument:$1" echo "Second argument:$2" >--------------------------------------< Name:./script.sh First argument:1 Second argument:2 >--------------------------------------< Арифметические операции. Арифметические операции производятся с использованием оператора let. Операции: * - умножение / - деление + - сложение - - вычитание % - деление с остатком Синтаксис: let <значение> <оператор> <значение> Пример: #!/bin/sh let res=2*7 echo $res >--------------------------------------< 14 >--------------------------------------< Оператор test или []. Данные операторы предназначены для выполнения сравнений двух значений. Если сравнение успешно-оператор возвращает 0,иначе 1.Код завершения последней выполненной команды хранится в специальной переменной $?. Синтаксис: test <значение> -опция <значение> или [<значение> -опция <значение>] Пример: #!/bin/sh var=10 [ $var -eq 8 ] echo $? >--------------------------------------< 1 >--------------------------------------< Ниже приведены все опции оператора test(или []): Сравнение целых чисел: -gt больше чем -lt меньше чем -ge больше чем либо равно -le меньше чем либо равно -eq равно -ne не равно Сравнение строк: -z проверка на наличие пустой строки -n проверка на наличие строки-значения = равенство != неравенство str проверка на наличие строки,состоящей из нулей Логические операции: -a И -o ИЛИ ! НЕ Проверка файлов: -f установка факта существования файла и его регулярности -s проверка,не является-ли файл пустым -r проверка возможности считывания файла -w проверка возможности записи файла -x проверка исполняемости файла -d проверка,является-ли файл каталогом -h проверка,является-ли файл ссылкой -c проверка,является-ли файл байт-ориентированным устройством -d проверка,является-ли файл блок-ориентированным устройством Условия. Ниже описан синтаксис всех условных операторов,с примерами. 1)if <команда> then <команда> fi Пример: #!/bin/sh if [ $1 -eq 10 ]; then echo var=10 fi Результат работы,при переданном параметре равном 10: >--------------------------------------< var=10 >--------------------------------------< 2)if <команда> then <команда> else <команда> fi Пример: #!/bin/sh if [ $1 -eq 10 ]; then echo var=10 else echo var!=10 fi Результат работы,при переданном параметре равном 10: >--------------------------------------< var=10 >--------------------------------------< Результат работы,при переданном параметре равном 7: >--------------------------------------< var!=10 >--------------------------------------< 3)if <команда> then <команда> elif <команда> else <команда> fi Пример: #!/bin/sh if [ $1 -eq 10 ]; then echo var=10 elif [ $1 -eq 9 ]; then echo var=9 else echo var!=10 and var!=9 fi Результат работы,при переданном параметре равном 10: >--------------------------------------< var=10 >--------------------------------------< Результат работы,при переданном параметре равном 9: >--------------------------------------< var=9 >--------------------------------------< Результат работы,при переданном параметре равном 8: >--------------------------------------< var!=10 and var!=9 >--------------------------------------< 4)case <строка> in <шаблон>) <команды> ;; *) <команды> ;; esac Case-конструкция позволяет выбирать один из нескольких альтернативных вариантов. #!/bin/sh case $1 in 1) echo arg is 1 ;; 2) echo arg is 2 ;; *) echo arg is other ;; esac Результат работы,при переданном параметре равном 1: >--------------------------------------< arg is 1 >--------------------------------------< Результат работы,при переданном параметре равном 2: >--------------------------------------< arg is 2 >--------------------------------------< Результат работы,при переданном параметре равном 10: >--------------------------------------< arg is other >--------------------------------------< Циклы. 1)while <условие> do <команды> done Выполняет команды пока условие истино. Пример: #!/bin/sh cont=yes while [ $cont = yes ] do echo -n "continue?" read cont done >--------------------------------------< continue? yes continue? no >--------------------------------------< 2)until <условие> do <команды> done Выполняет команды пока условие ложно. Пример: #!/bin/sh cont=yes until [ $cont = no ] do echo -n "continue?" read cont done >--------------------------------------< continue? yes continue? no >--------------------------------------< 3)for <переменная> do <команды> done Выполняет команды для каждого параметра,который был передан сценарию в командной строке. Пример: #!/bin/sh for var do echo $var done Результат работы программы,с параметрами 1 2 3 4 5: >--------------------------------------< 1 2 3 4 5 >--------------------------------------< 4)for <переменная> in <строка> do <команды> done Эта конструкция отличается от обычного for тем,что параметры берутся не из командной строки,а из строки после оператора in. 5)select <строка> in <перечень элементов> do <команды> done Конструкция select создаёт меню на основе элементов заданного списка,а затем выполняет для него указанную команду. Пример: #!/bin/sh select var in 1 2 3 do case $var in 1) echo Number 1 ;; 2) echo Number 2 ;; 3) echo Number 3 ;; *) echo Other ;; esac done >--------------------------------------< 1) 1 2) 2 3) 3 #? 3 Number 3 #? _ >--------------------------------------<
|
Обсуждение | [ Линейный режим | Показать все | RSS ] |
|
Добавить комментарий |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |