PDA

Просмотр полной версии : Shell-кодинг


baltazar
15.08.2007, 03:50
[Пролог]
Вот сижу я тут в 2-23,и думаю о чем бы статейку написать,поюзал поиск ачата что было,А чего не было,и оказывается что шелл кодинга не было,или я так искал,ну да не об этом щас...я ведь завтра уеду,а это важно,а вы без мну не сможете,ну я и решил оставить о себе память,хорошую\плохую,эт уже второй вопрос,но она будети это главное,полазил по форумам,и наткнулся на название шелл-коддинг,что -то чертовски знакомое подумал я и меня осенило...
Сразу скажи скажу что статья написана мною на 60%,коментировал и все остальное делал,я но коды брал готовые:)эт так чтоб не говорили что копирайтов нету,если что)
Вобщем в пару словах
Shell-програмирование-это Умение создавать скрипты на входных языках командных интерпретаторов
[Общие положения]
Комментарии начинаются с символа #,за исключением первой строки.
Первой строкой сценария является путь к интерпретатору,начинающий я
с #! с помошью которого будет запущен данный скрипт.Например:
#!/bin/sh
#А вот это уже комментарий

[Переменные,ввод и вывод данных]
Для задания переменных используется оператор присваевания "=".Синтаксис
следующий:

<переменная>=<значение>

Замечу,что в отличие от языков perl и php,между знаком "=" и остальными
параметрами нельзя ставить пробел.В этом случае интерпретатор выдаст
ошибку.Чтобы обратится к заданной переменной ,надо вызвать её поставив
перед ней знак $.Удалить переменную можно с помощью оператора unset.

Оператор Echo просто выводит строку(или переменную), идущую после него:
#!/bin/sh
var=baltazar
echo $var

>--------------------------------------<
baltazar
>--------------------------------------<

#!/bin/sh
echo My name is baltazar

>--------------------------------------<
My name is baltazar
>--------------------------------------<
В данный пример также можно добавить одинарные или двойные кавычки,
от этого результат работы программы не изменится.Но не стоит
использовать обратные кавычки,т.к.эти символы используются для
выполнения команд:
#!/bin/sh
echo 'My name is baltazar"

>--------------------------------------<
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
>--------------------------------------<
)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
>--------------------------------------<

ВОт собственно и фсе...)сильно не бить(

-=lebed=-
15.08.2007, 09:22
http://www.kodsweb.ru/texts/sh-coding.txt

================================================== ====================
# #
# Author: iNo // k0dsweb gr0up #
# Статья является собственностью команды KODSWEB #
# Любое распространение без нашего ведома строго запрещено. #
# -= 06.09.2006 =- #
# #
================================================== ====================
# #
# Shell-кодинг. #
# #
================================================== ====================


Автор, а ты спросил разрешения у команды KODSWEB?

Резюме: Замена чужих комментов к примерам чужого кода на свои - это не статья! Статья скорее всего будет перенесена или удалена, так как не соответсвует правилам раздела...

Tid0Wlas
15.08.2007, 09:40
интерестно, но -=lebed=- прав, НЕТ ПЛАГИАТУ