Как создать сценарий оболочки в Linux
Shell — это интерфейс операционной системы. Он принимает команды от пользователей и интерпретирует их в операционной системе. Если вы хотите запустить несколько команд вместе, вы можете сделать это, создав сценарий оболочки. Сценарии оболочки очень полезны, если вам нужно регулярно выполнять задачу, например создание резервной копии. Вы можете перечислить эти команды и выполнить их все с помощью всего одного скрипта. Давайте посмотрим, как вы можете создать сценарий оболочки и запустить его в Linux.
Создание сценария оболочки
Войдите на свой компьютер с Linux и откройте терминал, перейдите в папку, в которой вы хотите сохранить сценарий оболочки. Сценарии оболочки заканчиваются расширением «.sh». Давайте создадим наш первый сценарий оболочки. Введите
touch script.sh
Теперь этот файл скрипта не является исполняемым по умолчанию, мы должны дать этому файлу разрешение на выполнение. Введите
chmod +x script.sh
Теперь мы добавим несколько команд в этот сценарий оболочки. Откройте этот сценарий оболочки в любом текстовом редакторе по вашему выбору (на основе командной строки или на основе графического интерфейса) и добавьте несколько команд. Мы будем использовать нано. Введите
nano script.sh
Добавьте следующие команды, чтобы протестировать этот сценарий оболочки.
echo This is my first shell script touch testfile ls echo End of my shell script
Сохраните изменения и запустите сценарий оболочки, набрав
./script.sh
Как видите, он выполнил все указанные команды.
Комментарии в сценарии оболочки
Любая строка, начинающаяся с «#» в сценарии оболочки, рассматривается как комментарий и игнорируется оболочкой во время выполнения, за исключением строки shebang, которую мы увидим позже в этой статье. Давайте посмотрим пример. Сценарий оболочки создается со следующим содержимым.
# This is a comment echo Testing comments in shell script
Как видите, комментарий игнорируется.
Переменные в сценарии оболочки
Да, сценарии оболочки поддерживают использование переменных, и нам не нужно определять тип переменной во время ее объявления. Существует два типа переменных:
- Системные переменные
- Пользовательские переменные.
Системные переменные, также называемые переменными среды, обычно пишутся с большой буквы. Вы можете просмотреть все текущие переменные среды с помощью команды printenv. Пользовательские переменные задаются пользователем и существуют только во время выполнения скрипта. Вы можете определить переменную, просто набрав ее имя и присвоив значение со знаком =, и получить доступ к переменной, добавив $ перед именем переменной. Переменные демонстрируются в следующем примере скрипта.
# Accessing an Environment Variable echo $USER # Creating and accessing User defined Variable variable_name="Geeksforgeeks" echo $variable_name
Определение интерпретатора сценария оболочки
В Linux доступно множество оболочек, таких как оболочка Bourne (sh), оболочка Korn (ksh) и оболочка GNU Bourne-Again (bash). Сценарии, написанные для оболочки sh, называются сценариями оболочки, и они могут интерпретироваться как оболочками ksh, так и оболочками bash. ksh и Bash являются улучшенными версиями оригинальной оболочки sh и имеют больше возможностей, чем sh. Bash обычно является оболочкой по умолчанию в большинстве дистрибутивов Linux, а сценарии, написанные специально для оболочки bash, называются сценариями bash.
Вы можете указать, какую оболочку будет использовать сценарий, даже если сценарий выполняется из другого терминала оболочки. Для этого добавьте «#!» поверх файла сценария, за которым следует абсолютный путь к выбранной оболочке. Чтобы указать bash в качестве интерпретатора, добавьте следующую строку поверх сценария оболочки.
#!/bin/bash
Эта линия называется линией Шебанга.
Примечание. Это будет работать, только если в вашей системе установлен bash.
Операторы сравнения
Вы можете сравнить две переменные в сценариях оболочки. Мы делаем эти сравнения для принятия решений, мы увидим, как это сделать позже в этой статье, но перед этим вот список некоторых операторов сравнения.
Целочисленное сравнение
Оператор | Описание |
---|---|
-экв | равно |
-ne | не равно |
-gt | больше, чем |
-гэ | Больше или равно |
-lt | меньше чем |
-ле | меньше или равно |
Сравнение строк
Оператор | Описание |
---|---|
== | равно |
знак равно | не равно |
< | меньше чем в алфавитном порядке ASCII |
> | больше, чем в алфавитном порядке ASCII |
Мы добавляем перед < и >, потому что их нужно экранировать при вводе в конструкции [ ]. Теперь давайте посмотрим, где они используются.
Условные операторы
Условные операторы используются для выполнения блока кода только при соблюдении определенных условий. Сценарии оболочки поддерживают использование условных операторов. Мы используем операторы сравнения для проверки условий. Давайте посмотрим на несколько условных операторов.
Если заявление
Он проверяет условие и, если оно истинно, выполняет команды.
Синтаксис
if [ condition ] then #statements fi
Давайте посмотрим пример.
#!/bin/sh x=10 y=11 if [ $x -ne $y ] then echo "Not equal" fi
Оператор if-else
В операторе if-else вы можете указать набор команд, которые будут выполняться, если условие не выполняется.
Синтаксис
if [ condition ] then #set of statements if the condition is true else #set of statements if the condition is false fi
Давайте посмотрим на пример
#!/Syntaxbin/sh x=10 y=10 if [ $x -ne $y ] then echo "Not equal" else echo "They are equal" fi
Есть и другие условные операторы, вы можете прочитать о них здесь.
Примечание. Введите пробел после [ и перед ] при указании проверяемого условия, иначе вы получите сообщение об ошибке.
Петли
Используя циклы, вы можете повторять набор команд снова и снова, пока не будет выполнено определенное условие. Давайте посмотрим на некоторые петли.
Пока цикл
Он запускает указанные команды, если условие истинно, и повторяет их до тех пор, пока условие не станет ложным.
Синтаксис
while [ condition ] do #set of statements done
Давайте посмотрим пример.
#!/bin/sh x=2 while [ $x -lt 6 ] do echo $x x=`expr $x + 1` done
Мы заключаем оператор expr в ` ` при присвоении его переменной. Вы можете прочитать о команде expr здесь.
Для цикла
В цикле for переменная выполняет итерацию по списку значений и завершается, когда больше нет значений для итерации.
Синтаксис
for var in val1 val2 val3 do #statements done
Давайте посмотрим пример.
#!/bin/sh for var in 2 4 5 8 do echo $var done
Подробно о циклах можно прочитать здесь.
Позиционные аргументы
Позиционные аргументы — это аргументы или значения, которые мы передаем сценарию оболочки при выполнении сценария. Доступ к ним осуществляется через переменные $0, $1, $2…$9. Кроме того, на них ссылаются ${10}, ${11} и так далее. $# хранит количество переданных аргументов, а $0 хранит имя скрипта. Давайте посмотрим на пример, чтобы понять все это.
#!/bin/sh echo "No of arguments is $#" echo "Name of the script is $0" echo "First argument is $1" echo "Second argument is $2"
Чтобы передать аргументы, просто введите их в терминале после имени скрипта, как показано ниже.
Хранение вывода команд
Вы можете сохранить вывод команд внутри переменной в сценарии оболочки. Есть два способа сделать это.
Синтаксис
#Syntax 1 var=$(a valid linux command) #Syntax 2 var2=`a valid linux command`
Давайте посмотрим пример.
#!/bin/sh b=$(pwd) c=`pwd` echo $b echo $c d=$(ls /bin | grep bash) echo $d
Коды выхода команд оболочки
Всякий раз, когда команда завершается и возвращает управление родительскому процессу, она возвращает коды выхода от 0 до 255. Код выхода 0 означает, что команда выполнена успешно, а любой другой код выхода означает, что команда не выполнена. Вы можете просмотреть код выхода после выполнения любой команды, обратившись к #? переменная. См. пример ниже.
Вы можете вручную установить код выхода для вашего сценария оболочки. Это можно использовать с условными операторами, чтобы сообщить, была ли достигнута цель сценария или нет.
Пример
#!/bin/sh read x if [ $x -ne 10 ] then echo failed exit 1 else echo passed exit 0 fi