Как создавать простые сценарии оболочки в Linux
Создание сценариев оболочки — один из наиболее важных навыков, которыми должны владеть пользователи Linux. Сценарии оболочки играют огромную роль в автоматизации повторяющихся задач, которые в противном случае было бы утомительно выполнять построчно.
В этом руководстве мы рассмотрим некоторые основные операции сценариев оболочки, которые должен иметь каждый пользователь Linux.
1. Создайте простой сценарий оболочки
Скрипт оболочки — это файл, содержащий текст ASCII. Мы начнем с создания простого сценария оболочки и для этого будем использовать текстовый редактор. Существует довольно много текстовых редакторов, как с командной строкой, так и с графическим интерфейсом. В этом руководстве мы будем использовать редактор vim.
Мы начнем с создания простого сценария, который при выполнении отображает «Hello world».
vim hello.sh
Вставьте следующее содержимое в файл и сохраните.
#!/bin/bash
Print Hello world message
echo "Hello World!"
Давайте рассмотрим сценарий оболочки построчно.
- Первая строка —
#!/bin/bash
— известна как заголовок shebang. Это специальная конструкция, указывающая, какая программа будет использоваться для интерпретации сценария. В данном случае это будет оболочка bash, обозначенная /bin/bash. Существуют и другие языки сценариев, такие как Python, который обозначается#!/usr/bin/python3
и Perl, чей заголовок shebang обозначается#!/usr/bin/perl
. - Вторая строка — комментарий. Комментарий — это оператор, который описывает действие сценария оболочки и не выполняется при запуске сценария. Комментарии всегда предваряются знаком решетки
#
. - Последняя строка — это команда, которая печатает сообщение «Hello World» на терминале.
Следующий шаг — сделать скрипт исполняемым, назначив разрешение на выполнение с помощью команды 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 'Enter the score'
read x
if [[ $x == 70 ]]; then
echo 'Good job!'
fi
Приведенный выше сценарий оболочки предлагает пользователю ввести оценку, которая затем сохраняется в переменной x. Если оценка соответствует 70, сценарий возвращает вывод «Хорошая работа!». Оператор сравнения ==
используется для проверки того, эквивалентен ли введенный балл, хранящийся в переменной x, значению 100.
Другие операторы сравнения, которые вы можете использовать, включают:
-eq
– равно-ne
– Не равно-lt
– Меньше чем-le
– Меньше или равно-lt
– Меньше чем-ge
– больше или равно
Например, блок if-statement ниже выводит «Работай усерднее», если входной балл меньше 50.
if [[ $x -lt 50 ]]; then
echo 'Work Harder!'
fi
Пример оператора if-else
В ситуациях, когда у вас есть два возможных результата: то или это, оператор if-else пригодится.
if command
then
statement1
else
statement2
fi
Сценарий ниже считывает входной балл и проверяет, больше или равен он 70.
Если оценка больше или равна 70, вы получите сообщение «Отличная работа, вы прошли!». Однако если оценка упадет ниже 70, будет напечатан вывод «Вы не справились».
#!/bin/bash
echo 'Enter the score'
read x
if [[ $x -ge 70 ]]; then
echo 'Great job, You passed!'
else
echo 'You failed'
fi
Пример оператора if-elif-else
В сценариях, где имеется несколько условий и разные результаты, используется оператор if-elif-else. Это утверждение имеет следующий формат.
if condition1
then
statement1
elif condition2
then
statement2
else
statement3
fi
Например, у нас есть сценарий лотереи, который проверяет, является ли введенное число 90, 60 или 30.
#!/bin/bash
echo 'Enter the score'
read x
if [[ $x -eq 90 ]];
then
echo “You have won the First Prize”
elif [[ $x -eq 60 ]];
then
echo “You have won the Second Prize”
elif [[ $x -eq 30 ]];
then
echo “You have won the Second Prize”
else
echo “Please try again”
fi
3. Использование оператора if с логикой AND
Вы можете использовать оператор if вместе с логическим оператором AND для выполнения задачи, если выполнены два условия. Оператор &&
используется для обозначения логики AND.
#!/bin/bash
echo 'Please Enter your user_id'
read user_id
echo 'Please Enter your tag_no'
read tag_id
if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]];
then
echo “Login successful”
else
echo “Login failure”
fi
5. Использование оператора if с логикой OR
При использовании логики ИЛИ, представленной символом ||
, для получения ожидаемых результатов в сценарии должно быть выполнено любое из условий.
#!/bin/bash
echo 'Please enter a random number'
read number
if [[ (number -eq 55 || number -eq 80) ]];
then
echo 'Congratulations! You’ve won'
else
echo 'Sorry, try again'
fi
Используйте циклические конструкции
циклы Bash позволяют пользователям выполнять ряд задач до тех пор, пока не будет достигнут определенный результат. Это пригодится при выполнении повторяющихся задач. В этом разделе мы рассмотрим некоторые циклы, которые вы также найдете в других языках программирования.
Пока цикл
Это один из самых простых в работе циклов. Синтаксис довольно прост:
while <some test>
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 используется для итеративного выполнения кода. Т.е. повторить выполнение кода максимальное количество раз, определенное пользователем.
Синтаксис:
for var in 1 2 3 4 5 N
do
command1
command2
done
Приведенный ниже цикл for выполняет итерацию от 1 до 10 и обрабатывает их значения на экране.
Лучший способ добиться этого — определить диапазон с помощью двойных фигурных скобок {
, как показано, вместо того, чтобы вводить все числа.
#!/bin/bash
Specify range in a for loop
for num in {1..10}
do
echo $num
done
Позиционные параметры Bash
Позиционный параметр — это специальная переменная, на которую ссылается сценарий, когда значения передаются в оболочку, но не могут быть назначены. Позиционные параметры варьируются от $0 $1 $2 $3 …… до $9. За пределами значения $9 параметры должны быть заключены в фигурные скобки, например $ {10}, $ {11} … и т. д.
При выполнении сценария первый позиционный параметр $0 принимает имя сценария оболочки. Параметр $1 принимает первую переменную, передаваемую на терминал, $2 принимает вторую, $3 третью и так далее.
Давайте создадим скрипт test.sh, как показано.
#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2
Затем выполните скрипт и укажите имя и второе имя в качестве аргументов:
bash test.sh James Kiarie
Из вывода мы видим, что первая выводимая переменная — это имя сценария оболочки, в данном случае test.sh. После этого распечатываются имена, соответствующие позиционным параметрам, определенным в сценарии оболочки.
Позиционные параметры полезны тем, что помогают настроить вводимые данные вместо явного присвоения значения переменной.
Коды выхода команд оболочки
Давайте начнем с ответа на простой вопрос: что такое код выхода?
Каждая команда, выполняемая в оболочке пользователем или сценарием оболочки, имеет статус завершения. Статус выхода представляет собой целое число.
Статус завершения 0 означает, что команда выполнена успешно и без ошибок. Любое значение от 1 до 255 означает, что команда не выполнена или выполнена неудачно.
Чтобы узнать статус завершения команды, используйте переменную оболочки $?
.
Статус выхода 1 указывает на общую ошибку или любые недопустимые ошибки, такие как редактирование файлов без разрешений sudo.
Статус выхода 2 указывает на неправильное использование команды или встроенной переменной оболочки.
Статус выхода 127 указывает на недопустимую команду, которая обычно приводит к ошибке «команда не найдена».
Обработка вывода команд оболочки в сценарии
В сценариях bash вы можете сохранить вывод команды в переменной для использования в будущем. Это также называется заменой команд оболочки и может быть достигнуто следующими способами.
variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)
Например, вы можете сохранить команду date в переменной с именем today и вызвать сценарий оболочки, чтобы узнать текущую дату.
#!/bin/bash
today=$(date)
echo “Today is $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
На этом наше руководство по созданию простых сценариев оболочки подходит к концу. Мы надеемся, что вы нашли это ценным.