В shell встроен язык программирования, называемый shell script. Поскольку, существуют две основные разновидности интерпретаторов shell: Bourne shell и С shell, имеются две разновидности языков программирования, встроенных в эти оболочки. Язык C shell, по своему синтаксису напоминает язык программирования C. Именно по этому оболочка и получила своё название. Язык Bourne shell — это самостоятельный язык со своим синтаксисом и особенностями. ====== Переменные в Bash ====== переменные не типизированы область видимости - весь код программы при обращениие С определенной переменной ошибка не выдается пример задания: PERM=10 \\ echo $PERM\\ ''#!/bin/bash\\ PERM=10\\ echo $PERM\\ echo '$PERM'\\ echo "$PERM"\\ echo "PERM"''\\ ====== Массивы переменных ====== MASS[0]=10\\ MASS[1]=11\\ MASS[2]=12\\ ====== обращение к массиву ====== echo ${MASS[0]} ''#!/bin/bash\\ MASS[0]=10\\ MASS[1]=11\\ echo ${MASS[0]}\\ echo "MASS[0]=${MASS[0]}"\\ MASS2=(10 11 12 13 14)\\ echo ${MASS2[2]}\\ '' ====== Переменные окружения ====== экспорт пере менных ''#!/bin/bash\\ STRING="Hello World"\\ echo $STRING\\ '' просмотр переменных окружения ''#! /bin/bash\\ clear\\ echo "Текущая директория = $PWD"\\ echo "Это UID = $UID"\\ echo "Текущий уровень исполнения = $SHLVL"\\ echo "Случайное число = $RANDOM"\\ echo "Текущая дата = `date`"\\ echo "Домашний каталог = $HOME"\\ echo "Регистрационное имя пользователя = $LOGNAME"\\ echo "Периодичность проверки почтового ящика = $MAILCHECK"\\ echo "Пути для поиска программ = $PATH"\\ echo "Внешний вид приглашения командной строки = $PS1"\\ echo "Внешний вид доп/ приглашения командной строки = $PS2"\\ echo "Текущий интерпретатор = $SHELL"\\ echo "Тип терминала = $TERM"'' ====== Чтение переменных ====== read[переменная] #!/bin/bash\\ read var1\\ echo "Вы ввели $var1"\\ ====== Подстановочные переменные ====== ''#!/bin/bash\\ # Примеры подстановки\\ clear\\ echo "*****************************************************************"\\ DATE=`date`\\ echo "Текущая дата = $DATE"\\ echo "*****************************************************************"\\ USERS=`who | wc -l`\\ echo "Пользователей в системе = $USERS"\\ echo "*****************************************************************"\\ UP=$(date; uptime)\\ echo "Текущие дата и uptime = $UP"\\ echo "*****************************************************************"\\ '' ====== Арифметические выражения ====== #!/bin/bash # Подстановка арифметических выражений PERM=2 echo "2*2=$(( 2*$PERM ))" echo "((2*3+5)-4)/2=$(( ((2*3+5)-4)/2 ))" ====== Условный оператор if ====== ''#!/bin/bash\\ # Пример if then else\\ if rm test 2> /dev/null\\ then\\ echo "Deleted"\\ else\\ echo "Not deleted"\\ fi\\ '' ====== Проверка условий test ====== выкажение test обычно используют в квадратных скобках проверка существования файла: '' #!/bin/bash \\ if [ -f test.sh ]; then\\ echo "File exist"\\ else\\ echo "File not found"\\ fi\\ '' ''#!/bin/bash read A\\ read B\\ if [ $A -ge $B ] \\ then \\ echo 'A > B'\\ else \\ echo 'A < B'\\ fi \\ '' для проверки на наличие файла, папки, ссылки и т.д. используются ключи: -d Папка\\ -e Существует (также -a)\\ -f Стандартный файл\\ -h Символьная ссылка (также -L)\\ -p Именованный канал\\ -r Доступный вам для чтенения\\ -s Не пустой\\ -S Сокет\\ -w Доступный вам для записи\\ -N Был изменен со времени последнего прочтения\\ Сравнение чисел и строк: Сравнение чисел происходит при помощи следующих операторов: число1 -eq число2 — истина, если числа равны.\\ число1 -ne число2 — истина, если числа не равны.\\ число1 -gt число2 — истина, если первое число больше второго.\\ число1 -ge число2 — истина, если первое число больше или равно второму.\\ число1 -lt число2 — истина, если первое число меньше второго.\\ число1 -le число2 — истина, если первое число меньше или равно второму.\\ Сравнение строк: -n строка — истина, если строка имеет не нулевую длину.\\ -z строка — истина, если строка имеет нулевую длину\\ строка1 = строка2 — истина, если строка1 идентична строке2.\\ Так же в условных операторах можно использовать логическое 'И' &&, логическое 'ИЛИ' || ====== Оператор выбора case ====== для '' #!/bin/bash\\ echo; echo "Нажмите клавишу и затем клавишу Return." \\ read Keypress\\ case "$Keypress" in\\ [a-z] ) echo "буква в нижнем регистре";;\\ [A-Z] ) echo "Буква в верхнем регистре";;\\ [0-9] ) echo "Цифра";;\\ * ) echo "Знак пунктуации, пробел или что-то другое";;\\ esac # Допускается указывать диапазоны символов в [квадратных скобках]\\ '' #!/bin/bash '' echo -e 'Для запуска Веб сервера нажмите s \n Для перезапуска нажмите r \n Для остановки нажмите d'\\ read Keypress\\ case "$Keypress" in\\ [s] ) /etc/init.d/httpd start;;\\ [r] ) /etc/init.d/httpd restart ;;\\ [d] ) /etc/init.d/httpd stop;;\\ esac '' '' #!/bin/bash\\ echo -e "Введите нужную букву \n a - для перезагрузки системы \n b -дл$\\ read bukva\\ echo -e "\n"\\ echo "Вы ввели $bukva"\\ echo -e "\n"\\ case "$bukva" in\\ a ) reboot ;;\\ b ) useradd ;;\\ * ) echo "Неверное значение!!! "\\ esac \\ '' ====== Цикл For ====== простой цикл ''#!/bin/bash\\ # Пример for\\ for I in 1 2 3 4 5 6 7 8 9 10\\ do\\ echo " $I "\\ touch $I.txt\\ done\\ exit 0\\ '' цикл для с выбором данных из файла файл с данными users ''kirill\\ roman\\ alexander\\ andrey\\ yrii\\ alexey\\ '' скрипт создания папок для пользователей ''#!/bin/bash\\ for I in `cat users`\\ do \\ mkdir $I\\ done \\ exit 0\\ '' ====== Цикл While====== #!/bin/bash # Primer while X=1 while [ $X -lt 10 ] do echo "--> $X <--" X=$(( $X+1 )) done exit 0 ====== Оператор select ====== '' #!/bin/bash\\ echo 'Выберите ваш любимый linux: '\\ select linux in "Gentoo" "Debian" "Centos" "Fedora" "CentOS" \\ do\\ echo\\ echo "Вы предпочитаете $linux."\\ echo ";-))"\\ echo\\ break # если 'break' убрать, то получится бесконечный цикл.\\ done\\ exit 0\\ ''