Хотите научиться программированию на Linux? Освойте Bash.
Сценарии Bash - это один из самых популярных и доступных способов программирования вашего компьютера под управлением Linux. Эти простые примеры сценариев помогут вам понять процесс и ознакомят вас с основами программирования на Bash.
Пример "Hello World" - отличный способ изучить любой язык программирования, и Bash не является исключением.
Вот как вывести "Hello World" с помощью Bash:
Откройте текстовый редактор и начните редактировать новый файл, содержащий следующие строки кода.
Первая строка вашего сценария Bash всегда должна выглядеть так:
Команда Shebang (#!/bin/bash
) необходима, так как оболочка использует ее для определения того, как выполнить сценарий. В данном случае используется интерпретатор Bash.
Любая строка, начинающаяся с символа #
, является комментарием. Shebang-строка - это особый случай, но вы можете использовать свои собственные комментарии для объяснения вашего кода. Добавьте комментарий на строке 2, например:
# Вывод текста из сценария Bash
Вы можете выводить текст в стандартный вывод с помощью команды echo
, за которой следует значение, которое вы хотите вывести. Добавьте следующее на строке 3:
echo "Hello World"
Сохраните сценарий, предпочтительно с расширением .sh
, например, hello_world.sh
. Расширение не является обязательным, но это соглашение, которое полезно придерживаться.
Чтобы запустить сценарий, сделайте файл исполняемым. Используйте команду chmod
("change mode") вместе с аргументом +x
("исполняемый") и именем вашего сценария:
chmod +x hello_world.sh
Используйте эту команду, чтобы запустить сценарий из его каталога:
./hello_world.sh
Когда сценарий выполняется, он выведет текст "Hello World" в ваш терминал.
Из ваших сценариев вы можете выполнять любую программу, которую вы обычно запускаете в командной строке. Например, вы можете создать новый каталог из своего сценария с использованием команды mkdir
.
Начнем с той же строки shebang, что и раньше:
Пригласите пользователя ввести имя каталога, используя команду echo
, как и раньше:
echo "Введите новое имя каталога:"
Используйте встроенную команду read
для получения ввода пользователя. Единственный аргумент называет переменную, в которой оболочка сохранит ввод:
read newdir
Когда вам нужно использовать значение, сохраненное в переменной, предварите ее имя символом доллара ($
). Вы можете передавать содержимое переменной ввода в качестве аргумента команде mkdir
, чтобы создать новый каталог:
mkdir $newdir
Когда вы запускаете этот сценарий, он запросит ввод. Введите допустимое имя каталога, и вы увидите, что сценарий создает его в текущем каталоге.
Как альтернативу интерактивному вводу, большинство команд Linux поддерживают аргументы. Вы можете предоставить аргумент при запуске программы, чтобы управлять ее поведением.
В пределах вашего сценария вы можете использовать $1
для обращения к специальной переменной, содержащей значение первого аргумента. $2
будет ссылаться на второй аргумент и так далее.
Создайте каталог с использованием команды mkdir
из предыдущего примера. Однако на этот раз используйте встроенную переменную $1
:
mkdir $1
Запустите сценарий, передаваемый выбранным вами именем нового каталога в качестве аргумента:
./arg_dir.sh Test
Возможно, вы задаетесь вопросом, что произойдет, если вы запустите сценарий, не предоставив аргумент вообще. Попробуйте и посмотрите; вы должны получить сообщение об ошибке, начинающееся с "usage: mkdir":
Без аргументов командной строки значение $1
будет пустым. Когда ваш сценарий вызывает mkdir
, он не будет передавать ему аргумент, и команда mkdir
вернет эту ошибку. Чтобы избежать этого, вы можете проверить условие самостоятельно и предоставить более дружелюбное сообщение об ошибке:
if [ "$1" = "" ]; then
echo "Пожалуйста, укажите новое имя каталога в качестве первого аргумента"
exit
fi
Немного странное ключевое слово "fi" ("if" наоборот) сигнализирует конец оператора if
в Bash:
fi
Теперь ваш сценарий может продолжиться, как и раньше, чтобы обработать случай, когда аргумент присутствует:
mkdir $1
Когда вы запускаете эту новую версию сценария, вы получите сообщение, если забудете включить аргумент.
Если вы оказываетесь повторяющим тот же код, рассмотрите возможность упаковки его в функцию. Вы можете вызвать эту функцию в любое время.
Вот пример функции, которая удаляет заданный файл.
Начнем с строки shebang:
Определите функцию, написав ее имя, за которым следуют пустые скобки и команды внутри фигурных скобок:
del_file() {
echo "удаляется $1"
rm $1
}
Затем вы можете вызвать функцию и передать ей имя файла для удаления:
del_file test.txt
Когда вы вызываете функцию, она устанавливает специальное значение $?
с кодом выхода последней выполненной ею команды. Код выхода полезен для проверки ошибок; в этом примере вы можете проверить, успешно ли выполнена команда rm
:
if [ $? -ne 0 ]; then
echo "Извините, не удалось удалить файл"
fi
Этот последний пример демонстрирует очень простой калькулятор. Когда вы его запускаете, вы вводите два значения, а затем выбираете арифметическую операцию, которую нужно выполнить с ними.
Вот код для calc.sh
:
# Принимаем операнды как входные данные
echo "Введите первое число:"
read a
echo "Введите второе число:"
read b
# Тип ввода операции
echo "Введите выбор арифметической операции :"
echo "1. Сложение"
echo "2. Вычитание"
echo "3. Умножение"
echo "4. Деление"
read choice
# Операции калькулятора
case $choice in
1)
result=`echo $a + $b | bc`
;;
2)
result=`echo $a - $b | bc`
;;
3)
result=`echo $a \* $b | bc`
;;
4)
result=`echo "scale=2; $a / $b" | bc`
;;
esac
echo "Результат: $result"
Обратите внимание на использование case ... esac
, который является эквивалентом оператора switch
из других языков. Он позволяет вам тестировать значение - в данном случае переменную choice
- относительно нескольких фиксированных значений и выполнять соответствующий код.
Этот сценарий использует команду bc
для выполнения каждого вычисления.
Добавить комментарий