Linux. Как создать простой Shell скрипт

Сценарий оболочки - это файл, содержащий текст в формате ASCII. Мы начнем с создания простого сценария оболочки, и для этого мы будем использовать текстовый редактор. Существует довольно много текстовых редакторов, как с командной строкой, так и с графическим интерфейсом. Я буду использовать редактор Nano.

1. Создайте простой сценарий оболочки

Начну с создания простого скрипта, который при выполнении отображает надпись "Привет, Мир!".

$ nano hello.sh

Вставьте следующее содержимое в файл и сохраните.

#!/bin/bash
# Выводим сообщение
echo "Привет, Мир!"

Давайте рассмотрим сценарий оболочки построчно.

  • Первая строка – #!/bin/bash - известна как заголовок shebang. Это специальная конструкция, которая указывает, какая программа будет использоваться для интерпретации скрипта. В этом случае это будет оболочка bash, указанная /bin/bash. Существуют и другие языки сценариев, такие как Python, который обозначается #!/usr/bin/python3, и Perl, заголовок shebang которого обозначается #!/usr/bin/perl.
  • Вторая строка - это комментарий. Комментарий - это инструкция, которая описывает, что делает сценарий оболочки, и не выполняется при запуске сценария. Комментариям всегда предшествует знак #.
  • Последняя строка - это команда, которая выводит сообщение "Привет, мир" на терминал.

Следующий шаг - сделать скрипт исполняемым, назначив разрешение на выполнение с помощью команды chmod.

$ chmod +x  hello.sh

Наконец, запустите сценарий оболочки, используя любую из команд:

$ bash hello.sh
OR
$ ./hello.sh

2. Использование условных операторов для выполнения кода

Как и в других языках программирования, условные операторы используются в сценариях bash для принятия решений, лишь с небольшими изменениями в синтаксисе. Рассмотрим условные операторы if, if-else и elif.

Пример оператора if

Оператор if может использоваться для проверки одного или нескольких условий. Начнем с использования оператора if для проверки одного условия. Оператор if определяется с помощью if ... fi завершается.

if command (если команда)
then (то)
  statement (действие)
fi (конец)

Рассмотрим пример сценария оболочки.

#!/bin/bash
echo 'Введите число'
read x

if [[ $x == 70 ]]; then
  echo 'Отличная работа!'
fi

Приведенный выше сценарий запрашивает у пользователя оценку, которая затем сохраняется в переменной x. Если оценка соответствует 70, скрипт возвращает вывод "Отличная работа!". Оператор сравнения == используется для проверки того, эквивалентен ли введенный балл, который хранится в переменной x.

Другие операторы сравнения, которые можно использовать:

  • -eq – Равный
  • -ne – Не равны
  • -lt – Меньше, чем
  • -le – Меньше или равно
  • -lt – Меньше, чем
  • -ge – Больше или равно

Например, приведенный ниже блок if-statement выводит "Работайте быстрее!", если входной балл составляет любое значение меньше 50.

if [[ $x -lt 50 ]]; then
  echo 'Работайте быстрее!'
fi

Пример инструкции if-else

Для ситуаций, когда есть 2 возможных результата: – будь то то или это – оператор if-else как раз для таких случаев пригодится.

if command (если команда)
then (то)
  statement1 (действие1)
else (иначе)
  statement2 (действие2)
fi (конец)

Приведенный ниже скрипт считывает введенный балл и проверяет, больше он или равен 70.

Если оценка больше или равна 70, вы получаете сообщение "Отличная работа, вы прошли!". Однако, если оценка упадет ниже 70, будет выведено сообщение "Вы потерпели неудачу!".

#!/bin/bash
echo 'Введите число'
read x

if [[ $x -ge 70 ]]; then
  echo 'Отличная работа, вы прошли!'
else
  echo  'Вы потерпели неудачу!'
fi

Пример инструкции if-elif-else

В сценариях, где существует несколько условий и разные результаты, используется оператор if-elif-else. И работает по такой схеме:

if condition1 (если условие1)
then (то)
  statement1 (действие1)
elif condition2 (иначе если условие2)
then (то)
  statement2 (действие2)
else (иначе)
  statement3 (действие3)
fi (конец)

Для примера сделаем небольшой скрипт для лотереи, который проверяет, является ли введенное выигрышными числа 90, 60 или 30.

#!/bin/bash
echo 'Введите свое число'

read x

if [[ $x -eq 90 ]];
then
  echo "Вы выиграли 1-й приз!"

elif [[ $x -eq 60 ]];
then
  echo "Вы выиграли 2-й приз!"

elif [[ $x -eq 30 ]];
then 
  echo "Вы снова выиграли 2-й приз!"
else
  echo "Попробуйте еще раз..."
fi

3. Использование оператора if с логикой AND

Вы можете использовать оператор if вместе с логическим оператором AND для выполнения задачи, если выполняются два условия. Оператор && используется для обозначения логики AND.

#!/bin/bash

echo 'Введите свой user_id'
read user_id

echo 'Введите свой tag_no'
read tag_id

if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]];
then
  echo "Авторизация успешна!"
else
  echo "Авторизация не удалась!"
fi

4. Использование оператора if с логикой OR

При использовании логики OR, которая представлена символом ||, сценарий должен выполнить одно из условий, чтобы получить результат.

#!/bin/bash

echo 'Введите любое число'
read number

if [[ (number -eq 55 || number -eq 80) ]];
then
 echo 'Поздравляем! Вы выиграли'
else
 echo 'Извините, попробуйте еще раз!'
fi

5. Циклические Конструкции

Циклы Bash позволяют пользователям выполнять ряд задач до тех пор, пока не будет достигнут определенный результат. Это удобно при выполнении повторяющихся задач.

Цикл While

Это один из самых простых циклов для работы. Синтаксис довольно прост:

while  
do (выполнить)
 commands (команда)
done (конец)

В приведенном ниже примере цикла while перечислены все числа от 1 до 10 при выполнении.

#!/bin/bash
# A simple while loop
counter=1
while [ $counter -le 10 ]
 do
echo $counter
 ((counter++))
done

Посмотрим, что делает цикл while:

Счетчик counter инициализируется равным 1. И пока переменная меньше или равна 10, значение счетчика будет увеличиваться до тех пор, пока условие не будет выполнено. Строка echo $counter выводит все числа от 1 до 10.

Цикл For

Как и цикл while, цикл for используется для итеративного выполнения кода. Т.е. повторит выполнение кода столько раз, сколько возможно, определенное пользователем.

for var in 1 2 3 4 5 N
do
 command1
 command2
done

Вместо ввода всех чисел можно определить диапазон с помощью двойных фигурных скобок { }.

#!/bin/bash
# Specify range in a for loop

for num in {1..10}
do
  echo $num
done

6. Позиционные параметры Bash

Позиционный параметр - это специальная переменная, на которую ссылаются в скрипте, когда значения передаются в оболочке, но не могут быть назначены. Позиционные параметры выполняются из $0 $1 $2 $3 ...... до $9. Помимо значения в $9, параметры должны быть заключены в фигурные скобки, например ${10}, ${11} ... и так далее.

При выполнении скрипта первый позиционный параметр, равный $0, принимает имя сценария оболочки. Параметр $1 принимает первую переменную, которая передается на терминал, $2 принимает вторую, $3 - третью и так далее.

Для примера, создадим сценарий test.sh:

#!/bin/bash
echo "Имя: " $0
echo "Первое имя: " $1
echo "Второе имя: " $2

Затем запускаем скрипт и указываем первое и второе имя в качестве аргументов:

# bash test.sh Margo Robie

Из выходных данных мы видим, что первая печатаемая переменная - это имя сценария оболочки, в данном случае test.sh . После этого, имена выводятся на печать в соответствии с позиционными параметрами, определенными в сценарии оболочки.

Позиционные параметры полезны тем, что они помогают вам настраивать вводимые данные вместо явного присвоения значения переменной.

7. Коды выхода команд оболочки

Что такое код выхода?

Каждая команда, выполняемая в командной оболочке пользователем или сценарием командной оболочки, имеет статус завершения. Статус выхода - это целое число.

Статус выхода, равный 0, означает, что команда выполнена успешно без каких-либо ошибок. Все, что находится в диапазоне от 1 до 255, показывает, что команда выполнена неудачно или выполнена неудачно.

Чтобы узнать статус завершения команды, используйте $? Переменная оболочки.

Статус выхода, равный 1, указывает на общую ошибку или любые недопустимые ошибки, такие как редактирование файлов без разрешений sudo.

Статус выхода, равный 2, указывает на неправильное использование команды или встроенной переменной оболочки.

Статус выхода 127 указывает на недопустимую команду, которая обычно выдает ошибку 'команда не найдена'.

8. Обработка вывода команд оболочки в скрипте

В сценариях bash можно сохранить выходные данные команды в переменной для дальнейшего использования. Это также называется заменой команд оболочки и может быть достигнуто следующими способами.

variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)

Например, можно сохранить команду date в переменной с именем today и вызвать сценарий оболочки для отображения текущей даты.

#!/bin/bash

today=$(date)

echo "Сегодня - $today"

Еще пример. Предположим, вы хотите найти активных пользователей для входа в систему Linux.

Во-первых, список всех пользователей (как системных, так и пользователей процесса и входа в систему) хранится в файле /etc/passwd.

Чтобы просмотреть файл, вам нужно будет использовать команду cat. Однако, чтобы сузить круг пользователей, входящих в систему, можно использовать команду grep для поиска пользователей с атрибутом /bin/bash и используйте команду cut -c 1-10, как показано, для отображения первых 10 символов имен.

И сохраним команду cat в переменной login_users.

#!/bin/bash
login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10)
echo 'This is the list of login users:
echo $login_users

Количество просмотров: 133


Понравилась статья?

Возврат к списку