В каждой ОС существуют различные командные оболочки (shell), их назначение одинаково (администрирование, автоматизация, вычисления, мониторинг и т.д.). BASH это не сам скриптовой язык, это надстройка на языком SH, которая просто расширяет его функционал, добавляя такие плюшечки как диалоговые окна, чекбоксы, прогрессбары и т.д. На bash (sh) можно даже написать какую нибудь простенькую математическую задачку, но это глупо и неэффективно. Bash это скриптовой язык исключительно для автоматизации выполнения рутинных задач и нужен он исключительно системным администраторам.

Начнем с того, что все скрипты начинаются с одной и той-же строки:

#!/bin/bash

это заголовок, он должен присутствовать в каждом скрипте. Ниже пример самого простого скрипта:

#!/bin/bash
# # # Это просто для показа 
# Запуск: ./hello 
clear 
echo hello world     # печатаем привет мир
exit 0

 Как мы видим, строки ЗА решеткой, считаются комментариями. В конце скрипта я включил инструкцию exit 0. Оператор выхода сообщает родительской оболочке, был ли сценарий успешным. Полезно знать, что вы можете работать с exit, чтобы сообщить родительской оболочке, как все прошло.

Введённая в родительской оболочке, команда echo $? позволяет запросить состояние выхода последнего запущенного сценария.

 При запуске скрипта можно использовать аргументы. Аргумент — это всё, что вы помещаете за командой сценария. Аргументы могут быть использованы для того, чтобы сделать скрипт более гибким. В тексте сценария первый аргумент обозначается $1, второй аргумент — $2 и т. д.

#!/bin/bash
echo The first argument is $1
echo The second argument is $2
echo The third argument is $3

 Под параметрами подразумевается ввод данных перед запуском скрипта. В этом примере есть один недостаток — в нем выводятся ровно три аргумента. Если вы введете больше, или меньше — часть данных будет потеряна. Правильнее сделать так:

#!/bin/bash
echo you have entered $# arguments
for i in $@
 do
       echo $i
 done
exit 0
  • $# — это счетчик, который показывает, сколько аргументов было использовано при запуске скрипта.
  • $@ — список всех аргументов, которые использовались при запуске скрипта.

 Переменные…. им можно присваивать различные значения

  • Используйте ключевое слово read в скрипте, чтобы запросить данные у пользователя, запускающего скрипт и присвоить их какой либо переменной.
  • Используйте подстановку команд, чтобы использовать результат команды и назначить его переменной. Например, команда date +%d-%m-%y показывает текущую дату в формате день-месяц-год. Чтобы сделать это в сценарии, вы можете использовать переменную TODAY=$(date +%d-%m-%y). Для подстановки команд вам просто нужно поместить команду, результат которой вы хотите использовать, между скобками.
#!/bin/bash
if [ -z $1 ]; then
     echo enter a text
     read TEXT
else
     TEXT=$1
fi
echo вы ввели  $TEXT
exit 0

 В bash есть несколько условных операторов и циклов, которые часто используются.

  • if… then… else — используется для выполнения кода, если определенное условие выполняется
  • for — используется для выполнения команд для диапазона значений
  • while — используется для выполнения кода, если выполняется определенное условие
  • before — используется для выполнения кода, пока не выполнено определенное условие
  • case — используется для оценки ограниченного количества конкретных значений
#!/bin/bash
# if... then... else...
if [ -f $1 ]
then
    echo "$1 is a file"
elif [ -d $1 ]
then
    echo "$1 is a directory"
else
    echo "I do not know what \$1 is"
fi
exit 0
#!/bin/bash
# for...
for (( COUNTER=100; COUNTER>1; COUNTER-- )); do
     echo $COUNTER
done
exit 0

оператор case

В операторе case вы определяете каждый ожидаемый вами конкретный аргумент, за которым следует команда, которую необходимо выполнить, если этот аргумент использовался.
ниже  вы можете увидеть работу оператора case, который использовался в ранней версии для запуска практически любой службы.

case "$1" in
     start)
          start;;
     stop)
          rm -f $lockfile
          stop;;
     restart)
          restart;;
     reload)
          reload;;
     status)
          status
          ;;
     *)
          echo "Usage: $0 (start|stop|restart|reload|status)"
          ;;
esac

ну а теперь, небольшой практический пример

#!/bin/bash
#указываем где у нас хранится bash-интерпретатор
parametr1=$1 #присваиваем переменной parametr1 значение первого параметра скрипта
script_name=$0 #присваиваем переменной script_name значение имени скрипта
echo "Вы запустили скрипт с именем $script_name и параметром $parametr1" # команда echo выводит определенную строку, обращение к переменным осуществляется через $имя_переменной.
echo 'Вы запустили скрипт с именем $script_name и параметром $parametr1' # здесь мы видим другие кавычки, разница в том, что в одинарных кавычках не происходит подстановки переменных.
exit 0 #Выход с кодом 0 (удачное завершение работы скрипта)

результат

ite@ite-desktop:~$ ./test.sh qwerty
Вы запустили скрипт с именем ./test.sh и параметром qwerty
Вы запустили скрипт с именем $script_name и параметром $parametr1
Зарезервированные переменные
$DIRSTACK - содержимое вершины стека каталогов
$EDITOR - текстовый редактор по умолчанию
$EUID - Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя, в то время как...
$UID - ...содержит реальный идентификатор, который устанавливается только при логине.
$FUNCNAME - имя текущей функции в скрипте.
$GROUPS - массив групп к которым принадлежит текущий пользователь
$HOME - домашний каталог пользователя
$HOSTNAME - ваш hostname
$HOSTTYPE - архитектура машины.
$LC_CTYPE - внутренняя переменная, котороя определяет кодировку символов
$OLDPWD - прежний рабочий каталог
$OSTYPE - тип ОС
$PATH - путь поиска программ
$PPID - идентификатор родительского процесса
$SECONDS - время работы скрипта(в сек.)
$# - общее количество параметров переданных скрипту
$* - все аргументы переданыне скрипту(выводятся в строку)
$@ - тоже самое, что и предыдущий, но параметры выводятся в столбик
$! - PID последнего запущенного в фоне процесса
$$ - PID самого скрипта

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *