FreeBSD — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «== rc.conf== Статические маршруты <pre> static_routes="gp" route_gp="-net 192.168.128.0/22 10.1.1.1" </pre> Алиасы на vlan <pre> clon…») |
Admin (обсуждение | вклад) |
||
Строка 78: | Строка 78: | ||
test | test | ||
+ | |||
+ | |||
+ | == Shell-программирование == | ||
+ | |||
+ | Автор: iNo // k0dsweb gr0up | ||
+ | Статья является собственностью команды KodsWeb (www.kodsweb.ru) | ||
+ | -= 06.09.2006 =- | ||
+ | |||
+ | 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. Операции: | ||
+ | |||
+ | |||
+ | * - умножение | ||
+ | / - деление | ||
+ | + - сложение | ||
+ | - - вычитание | ||
+ | % - деление с остатком | ||
+ | |||
+ | Синтаксис арифметических операций в Shell: | ||
+ | |||
+ | |||
+ | let <значение> <оператор> <значение> | ||
+ | |||
+ | |||
+ | Пример sh let: | ||
+ | |||
+ | |||
+ | #!/bin/sh | ||
+ | let res=2*7 | ||
+ | echo $res | ||
+ | |||
+ | >--------------------------------------< | ||
+ | 14 | ||
+ | >--------------------------------------< | ||
+ | |||
+ | Оператор test или []. | ||
+ | |||
+ | Данные операторы предназначены для выполнения сравнений двух значений. Если сравнение успешно-оператор возвращает 0,иначе 1.Код завершения последней выполненной команды хранится в специальной переменной $?. | ||
+ | |||
+ | |||
+ | |||
+ | Синтаксис оператора test: | ||
+ | |||
+ | |||
+ | 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 | ||
+ | |||
+ | Пример условия if ... then: | ||
+ | |||
+ | |||
+ | #!/bin/sh | ||
+ | if [ $1 -eq 10 ]; then | ||
+ | echo var=10 | ||
+ | fi | ||
+ | |||
+ | Результат работы,при переданном параметре равном 10: | ||
+ | |||
+ | |||
+ | >--------------------------------------< | ||
+ | var=10 | ||
+ | >--------------------------------------< | ||
+ | |||
+ | |||
+ | 2) if <команда> then <команда> else <команда> fi | ||
+ | |||
+ | Пример if ... then ... else: | ||
+ | |||
+ | |||
+ | #!/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 | ||
+ | |||
+ | Пример if ... then ... elif ... else: | ||
+ | |||
+ | |||
+ | #!/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 | ||
+ | |||
+ | Оператор языка shell-программирования while выполняет команды, пока условие истино. | ||
+ | Пример: | ||
+ | |||
+ | |||
+ | #!/bin/sh | ||
+ | cont=yes | ||
+ | while [ $cont = yes ] | ||
+ | do | ||
+ | echo -n "continue?" | ||
+ | read cont | ||
+ | done | ||
+ | |||
+ | >--------------------------------------< | ||
+ | continue? | ||
+ | yes | ||
+ | continue? | ||
+ | no | ||
+ | >--------------------------------------< | ||
+ | |||
+ | |||
+ | 2) until <условие> do <команды> done | ||
+ | |||
+ | Оператор until выполняет команды, пока условие ложно. | ||
+ | Пример: | ||
+ | |||
+ | |||
+ | #!/bin/sh | ||
+ | cont=yes | ||
+ | until [ $cont = no ] | ||
+ | do | ||
+ | echo -n "continue?" | ||
+ | read cont | ||
+ | done | ||
+ | |||
+ | >--------------------------------------< | ||
+ | |||
+ | continue? | ||
+ | yes | ||
+ | continue? | ||
+ | no | ||
+ | >--------------------------------------< | ||
+ | |||
+ | |||
+ | 3) for <переменная> do <команды> done | ||
+ | |||
+ | Цикл for - выполняет команды для каждого параметра, который был передан сценарию в командной строке. | ||
+ | Пример: | ||
+ | |||
+ | |||
+ | #!/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 | ||
+ | #? _ | ||
+ | >--------------------------------------< | ||
+ | |||
+ | Оригинал статьи http://www.opennet.ru/base/dev/shell_coding.txt.html |
Версия 09:06, 27 мая 2015
rc.conf
Статические маршруты
static_routes="gp" route_gp="-net 192.168.128.0/22 10.1.1.1"
Алиасы на vlan
cloned_interfaces="vlan80 vlan81" ifconfig_vlan80="inet 192.168.168.10 netmask 255.255.255.0 vlan 80 vlandev em2" ifconfig_vlan80_alias0="alias 192.168.168.11 netmask 255.255.255.0" ifconfig_vlan81="inet 192.168.169.10 netmask 255.255.255.0 vlan 81 vlandev em2" ifconfig_vlan81_alias0="alias 192.168.169.11 netmask 255.255.255.0" при этом не забываем echo 'ifconfig em2 up' >> /etc/rc.local
sysctl.conf
kern.coredump=0 net.inet6.ip6.auto_linklocal=0
gmirror + GPT
Источник [[1]]
- gmirror label -v -b round-robin gm0 /dev/ad0\\
- gmirror load\\
- gpart create -s gpt mirror/gm0\\
- gpart add -t freebsd-boot -s 128k mirror/gm0\\
- gpart add -t freebsd-ufs -s 1G mirror/gm0\\
- gpart add -t freebsd-swap -s 4G -l swap mirror/gm0\\
- gpart add -t freebsd-ufs -s 1G mirror/gm0\\
- gpart add -t freebsd-ufs -s 4G mirror/gm0\\
- gpart add -t freebsd-ufs -s 20G mirror/gm0\\
- gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 mirror/gm0\\
- newfs -L rootfs /dev/mirror/gm0p2\\
- newfs -L tmpfs /dev/mirror/gm0p4\\
- newfs -L varfs /dev/mirror/gm0p5\\
- newfs -L usrfs /dev/mirror/gm0p6\\
- mkdir /mnt/root; mkdir /mnt/var; mkdir /mnt/usr\\
- mount /dev/ufs/rootfs /mnt/root\\
- mount /dev/ufs/varfs /mnt/var\\
- mount /dev/ufs/usrfs /mnt/usr\\
Либо с нуля создаем\\
- cd /usr/src\\
- make DESTDIR=/mnt installworld distribution installkernel KERNCONF="YOUR_KERNEL_HERE"\\
Либо копируем существующую систему\\
- cd /; pax -p eme -X -rw . /mnt/root\\
- cd /var; pax -p eme -X -rw . /mnt/var\\
- cd /usr; pax -p eme -X -rw . /mnt/usr\\
- echo 'geom_mirror_load="YES"' >> /mnt/root/boot/loader.conf\\
- echo 'vfs.root.mountfrom="ufs:/dev/ufs/rootfs"' >> /mnt/root/boot/loader.conf\\
- cat > /mnt/root/etc/fstab\\
- Device Mountpoint FStype Options Dump Pass#\\
/dev/gpt/swap none swap sw 0 0\\ /dev/ufs/rootfs / ufs rw 1 1\\ /dev/ufs/usrfs /usr ufs rw 2 2\\ ^D\\
shutdown -r now
Убираем текущий загрузочный диск, делаем загрузочным созданый.
- chmod 1777 /tmp
fail2ban
test
Shell-программирование
Автор: iNo // k0dsweb gr0up Статья является собственностью команды KodsWeb (www.kodsweb.ru) -= 06.09.2006 =-
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. Операции:
- - умножение
/ - деление + - сложение - - вычитание % - деление с остатком
Синтаксис арифметических операций в Shell:
let <значение> <оператор> <значение>
Пример sh let:
#!/bin/sh let res=2*7 echo $res
>--------------------------------------< 14 >--------------------------------------<
Оператор test или [].
Данные операторы предназначены для выполнения сравнений двух значений. Если сравнение успешно-оператор возвращает 0,иначе 1.Код завершения последней выполненной команды хранится в специальной переменной $?.
Синтаксис оператора test:
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
Пример условия if ... then:
#!/bin/sh if [ $1 -eq 10 ]; then echo var=10 fi
Результат работы,при переданном параметре равном 10:
>--------------------------------------< var=10 >--------------------------------------<
2) if <команда> then <команда> else <команда> fi
Пример if ... then ... else:
#!/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
Пример if ... then ... elif ... else:
#!/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
Оператор языка shell-программирования while выполняет команды, пока условие истино. Пример:
#!/bin/sh cont=yes while [ $cont = yes ] do echo -n "continue?" read cont done
>--------------------------------------< continue? yes continue? no >--------------------------------------<
2) until <условие> do <команды> done
Оператор until выполняет команды, пока условие ложно. Пример:
#!/bin/sh cont=yes until [ $cont = no ] do echo -n "continue?" read cont done
>--------------------------------------<
continue? yes continue? no >--------------------------------------<
3) for <переменная> do <команды> done
Цикл for - выполняет команды для каждого параметра, который был передан сценарию в командной строке. Пример:
#!/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 #? _ >--------------------------------------<
Оригинал статьи http://www.opennet.ru/base/dev/shell_coding.txt.html