Type a bash что это
Перейти к содержимому

Type a bash что это

  • автор:

Type a bash что это

В отличие от большинства других языков программирования, Bash не производит разделения переменных по «типам» . По сути, переменные Bash являются строковыми переменными, но, в зависимости от контекста, Bash допускает целочисленную арифметику с переменными. Определяющим фактором здесь служит содержимое переменных.

Пример 4-4. Целое число или строка?

#!/bin/bash # int-or-string.sh: Целое число или строка? a=2334 # Целое число. let "a += 1" echo "a = $a " # a = 2335 echo # Все еще целое число. b=$ # замена "23" на "BB". # Происходит трансформация числа в строку. echo "b = $b" # b = BB35 declare -i b # Явное указание типа здесь не поможет. echo "b = $b" # b = BB35 let "b += 1" # BB35 + 1 = echo "b = $b" # b = 1 echo c=BB34 echo "c = $c" # c = BB34 d=$ # замена "BB" на "23". # Переменная $d становится целочисленной. echo "d = $d" # d = 2334 let "d += 1" # 2334 + 1 = echo "d = $d" # d = 2335 echo # А что происходит с "пустыми" переменными? e="" echo "e = $e" # e = let "e += 1" # Арифметические операции допускают использование "пустых" переменных? echo "e = $e" # e = 1 echo # "Пустая" переменная становится целочисленной. # А что происходит с необъявленными переменными? echo "f = $f" # f = let "f += 1" # Арифметические операции допустимы? echo "f = $f" # f = 1 echo # Необъявленная переменная трансформируется в целочисленную. # Переменные Bash не имеют типов. exit 0

Отсутствие типов — это и благословение и проклятие. С одной стороны — отсутствие типов делает сценарии более гибкими (чтобы повеситься — достаточно иметь веревку!) и облегчает чтение кода. С другой — является источником потенциальных ошибок и поощряет привычку к «неряшливому» программированию.

Бремя отслеживания типа той или иной переменной полностью лежит на плечах программиста. Bash не будет делать это за вас!

Назад К началу Вперед
Присваивание значений переменным Наверх Специальные типы переменных

Типы файлов Linux

В GNU/Linux как и других Unix-подобных операционных системах понятие типа файла не связано с расширением файла (несколькими буквами после точки в конце имени), как это обстоит в Windows.

Unix-подобная ОС не следит за расширениями файлов. Задача связать расширения файла с конкретным пользовательским приложением, в котором этот файл будет открываться, видимо лежит на какой-либо дополнительной программе. В свою очередь пользовательское приложение анализирует структуру данный файла, расширение ему также безразлично.

Таким образом, среди файловых атрибутов, хранящихся в операционной системе на базе ядра Linux, нет информации о типе данных в файле. Там есть информация о более существенном разделении, связанном с тем, что в Unix-подобных системах все объекты – это файлы. Все объекты весьма разнообразны. Поэтому тип файла в Linux – это скорее тип объекта, но не тип данных как в Windows.

В операционной системе GNU/Linux существуют следующие типы файлов: обычные файлы, каталоги, символьные ссылки, блочные устройства, символьные устройства, сокеты, каналы. Каждый тип имеет собственное обозначение одним символом. Знание этих символов нам пригодится в дальнейшем при изучении командной оболочки Bash.

Типы файлов Linux

Обычные файлы (-)

Сюда относятся все файлы с данными, играющими роль ценной информации сами по себе. Linux все-равно текстовый перед ним файл, исполняемый или картинка. В любом случае это будет обычный (regular) файл. Все они обозначаются знаком минус «-«. Остальные типы файлов считаются специальными (special).

Каталоги (d)

В Linux каталог представляет собой такой тип файла, данными которого является список имен других файлов и каталогов, вложенных в данный каталог. Напрямую, то есть через какой-либо редактор, пользователь не может редактировать данные файла-каталога. Редактированием занимается ядро операционной системы, получая, в том числе от пользователя, команды создания файла, удаления и др.

В файле каталога осуществляется связь между именами файлов (словесного обозначения для людей) и их индексными дескрипторами (истинным именем-числом, которым оперирует ОС).

В Unix-подобных системах один и тот же файл может существовать под разными именами и/или в разных каталогах: все имена будут связаны с одним и тем же индексным дескриптором (механизм жестких ссылок).

Также следует, что файлы всегда должны содержаться в каталогах, иначе станут недоступны, так как нигде не будет содержаться записи о них.

Символьные ссылки (l)

Символьная ссылка – это файл, в данных которого содержится адрес другого файла по его имени (а не индексному дескриптору).

Выполнение символьной ссылки приводит к открытию файла, на который она указывает. Это аналог ярлыков в операционной системе Windows.

Если удалить исходный файл, то символьная ссылка продолжит существовать. Она по-прежнему будет указывать на файл, которого уже нет.

Символьные ссылки не содержат атрибутов файлов, на которые они указывают. У них есть собственные атрибуты (свое время создания, размер, права доступа).

Символьные (c) и блочные устройства (b)

Файлы устройств предназначены для обращения к аппаратному обеспечению компьютера (дискам, принтерам, терминалам и др.). Когда происходит обращение к файлу устройства, то ядро операционной системы передает запрос драйверу этого устройства.

К символьным устройствам обращение происходит последовательно (символ за символом). Примером символьного устройства может служить терминал.

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

Сокеты (s) и каналы (p)

Чтобы понять, что такое канал и сокет, необходимо понимание процессов в операционной системе. И каналы и сокеты организуют их взаимодействие. Пользователь с данными типами файлов почти не сталкивается.

Ключевым отличием канала от сокета является то, что канал однонаправлен. Через канал один процесс всегда передает данные второму, но не наоборот. Сокеты позволяют передавать данные в разных направлениях, т. е. осуществляют связь.

Также следует отметить, что канал представлен в структуре каталогов файлом, только если он именован. Когда возникают безымянные каналы, то они существуют только внутри ядра Linux.

Команда file

Хотя выше было сказано, что Линукс не делает предположение о типе данных в обычном файле, есть специальная утилита, которая выполняет эту задачу, – программа file. Для этого она анализирует начало содержимого файла и находит в нем специальные «сигналы», характерные для определенного типа – бинарного файла, текстового, изображения и др.

Команда file

На скриншоте также показано, что расширение для программы file безразлично. Файл flag – копия flag.png , и программа успешно его идентифицировала как изображение.

Команда file имеет множество различных ключей.

Использование команды file с символьной ссылкой

В примере файл 2020.ods является символьной ссылкой на файл, находящийся в другом каталоге, о чем нам говорит команда file без ключей. С помощью ключа -L мы можем узнать тип файла, на который ссылается файл-ссылка.

Курс с ответами к заданиям и дополнительными уроками в PDF

X Скрыть Наверх

Введение в Linux и Bash. Курс

Основы BASH. Часть 1

Безусловно, все те кто общается с ОС Linux хоть раз да имели дело(во всяком случае слышали точно) с командной оболочкой BASH. Но BASH не только командная оболочка, это еще и превосходный скриптовый язык программирования.
Цель этой статьи — познакомить поближе юзеров с bash, рассказать про синтаксис, основные приемы и фишки языка, для того чтобы даже обычный пользователь смог быстренько написать простой скрипт для выполнения ежедневной(-недельной, -месячной) рутинной работы или, скажем, «на коленке» наваять скриптик для бэкапа директории.

Введение

BASH — Bourne-Again SHell (что может переводится как «перерожденный шел», или «Снова шел Борна(создатель sh)»), самый популярный командный интерпретатор в юниксоподобных системах, в особенности в GNU/Linux. Ниже приведу ряд встроенных команд, которые мы будем использовать для создания своих скриптов.

break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
exit выход из оболочки
export отмечает аргументы как переменные для передачи в дочерние процессы в среде
hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
kill посылает сигнал завершения процессу
pwd выводит текущий рабочий каталог
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
return заставляет функцию оболочки выйти с указанным значением
shift перемещает позиционные параметры налево
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
unset вызывает уничтожение переменных оболочки
wait ждет выхода из дочернего процесса и сообщает выходное состояние.

И конечно же кроме встроенных команд мы будем использовать целую кучу внешних, отдельных команд-программ, с которыми мы познакомимся уже в процессе

Что необходимо знать с самого начала

1. Любой bash-скрипт должен начинаться со строки:

#!/bin/bash
в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте(где, вы можете узнать набрав whereis bash) поменяйте её на ваш путь.
2. Коментарии начинаются с символа # (кроме первой строки).
3. В bash переменные не имеют типа(о них речь пойдет ниже)

Переменные и параметры скрипта

Приведу как пример небольшой пример, который мы разберем:

#!/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 самого скрипта

Условия

Условные операторы, думаю, знакомы практически каждому, кто хоть раз пытался на чем-то писать программы. В bash условия пишутся след. образом (как обычно на примере):
#!/bin/bash
source=$1 #в переменную source засовываем первый параметр скрипта
dest=$2 #в переменную dest засовываем второй параметр скрипта

if [[ «$source» -eq «$dest» ]] # в ковычках указываем имена переменных для сравнения. -eq — логическое сравнение обозначающие «равны»
then # если они действительно равны, то
echo «Применик $dest и источник $source один и тот же файл!» #выводим сообщение об ошибке, т.к. $source и $dest у нас равны
exit 1 # выходим с ошибкой (1 — код ошибки)
else # если же они не равны
cp $source $dest # то выполняем команду cp: копируем источник в приемник
echo «Удачное копирование!»
fi #обозначаем окончание условия.

Результат выполнения скрипта:
ite@ite-desktop:~$ ./primer2.sh 1 1
Применик 1 и источник 1 один и тот же файл!
ite@ite-desktop:~$ ./primer2.sh 1 2
Удачное копирование!

Структура if-then-else используется следующим образом:
if
then

else

В качестве команд возвращающих код возврата могут выступать структуры [[ , [ , test, (( )) или любая другая(или несколько) linux-команда.
test — используется для логического сравнения. после выражения, неоьбходима закрывающая скобка «]»
[ — синоним команды test
[[ — расширенная версия «[» (начиная с версии 2.02)(как в примере), внутри которой могут быть использованы || (или), & (и). Долна иметь закрывающуб скобку «]]»
(( )) — математическое сравнение.
для построения многоярусных условий вида:
if .
then .
else
if .
then.
else .

для краткости и читаемости кода, можно использовать структуру:
if ..
then .
elif .
then .
elif .

Условия. Множественный выбор

Если необходимо сравнивать какоую-то одну переменную с большим количеством параметров, то целесообразней использовать оператор case.
#!/bin/bash
echo «Выберите редатор для запуска:»
echo «1 Запуск программы nano»
echo «2 Запуск программы vi»
echo «3 Запуск программы emacs»
echo «4 Выход»
read doing #здесь мы читаем в переменную $doing со стандартного ввода

case $doing in
1)
/usr/bin/nano # если $doing содержит 1, то запустить nano
;;
2)
/usr/bin/vi # если $doing содержит 2, то запустить vi
;;
3)
/usr/bin/emacs # если $doing содержит 3, то запустить emacs
;;
4)
exit 0
;;
*) #если введено с клавиатуры то, что в case не описывается, выполнять следующее:
echo «Введено неправильное действие»

esac #окончание оператора case.

Результат работы:
ite@ite-desktop:~$ ./menu2.sh
Выберите редатор для запуска:
1 Запуск программы nano
2 Запуск программы vi
3 Запуск программы emacs
4 Выход

После выбор цифры и нажатия Enter запуститься тот редактор, который вы выбрали(если конечно все пути указаны правильно, и у вас установлены эти редакторы 🙂 )
Прведу список логических операторв, которые используются для конструкции if-then-else-fi:
-z # строка пуста
-n # строка не пуста
=, (==) # строки равны
!= # строки неравны
-eq # равно
-ne # неравно
-lt,( < ) # меньше
-le,( <=) # меньше или равно
-gt,(>) #больше
-ge,(>=) #больше или равно
! #отрицание логического выражения
-a,(&&) #логическое «И»
-o,(||) # логическое «ИЛИ»

С основами языка и условиями мы разобрались, чтобы не перегружать статью, разобью её на несколько частей(допустим на 3). Во второй части разберем операторы цикла и выполнение математических операций.

UPD: Исправил некоторые ошибки
UPD: Обновил часть про условия if-then-else

Bash скрипты

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

В этой статье мы обсудим основы написания сценариев bash, включая переменные, команды, ввод/вывод и отладку. Каждый пункт сопроводим примерами.

Оглавление

  1. Минимальные требования
  2. Введение
  • Определение Bash-скрипта
  • Преимущества Bash-скриптов
  • Обзор оболочки Bash и интерфейса командной строки
  • Как запускать команды Bash из командной строки
  • Как создавать и выполнять сценарии Bash
  • Комментарии в сценариях bash
  • Переменные и типы данных в Bash
  • Ввод и вывод в Bash-скриптах
  • Основные команды Bash (echo, read и т. д.)
  • Условные операторы (если/иначе)
  • Цикл While
  • Цикл For
  • Оператор Case

Минимальные требования

Чтобы следовать этому руководству, необходимо иметь следующее:

Работающая версия Linux с доступом к командной строке.
Если у вас не установлен Linux или вы только начинаете его изучать, вы можете легко получить доступ к командной строке Linux через Replit. Replit — это браузерная IDE, в которой вы можете получить доступ к оболочке bash за несколько минут.

Вы также можете установить Linux поверх вашей системы Windows, используя WSL (подсистема Windows для Linux). Инструкция по ссылке.

Введение

Определение Bash-скрипта

Bash-скрипт — это файл, содержащий последовательность команд, которые выполняются программой bash построчно. Он позволяет выполнять ряд действий, таких как переход к определенному каталогу, создание папки и запуск процесса с помощью командной строки.

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

Преимущества Bash-скриптов

Сценарии Bash — это мощный и универсальный инструмент для автоматизации задач системного администрирования, управления системными ресурсами и выполнения других рутинных задач в системах Unix/Linux. Некоторые преимущества сценариев оболочки:

  • Автоматизация: сценарии оболочки позволяют автоматизировать повторяющиеся задачи и процессы, экономя время и снижая риск ошибок, которые могут возникнуть при ручном выполнении.
  • Портативность: сценарии оболочки можно запускать на различных платформах и операционных системах, включая Unix, Linux, macOS и даже Windows, с помощью эмуляторов или виртуальных машин.
  • Гибкость: сценарии оболочки легко настраиваются и могут быть легко изменены в соответствии с конкретными требованиями. Их также можно комбинировать с другими языками программирования или утилитами для создания более мощных сценариев.
  • Доступность. Сценарии оболочки легко писать и не требуют специальных инструментов или программного обеспечения. Их можно редактировать с помощью любого текстового редактора, а в большинстве операционных систем есть встроенный интерпретатор оболочки.
  • Интеграция: сценарии оболочки можно интегрировать с другими инструментами и приложениями, такими как базы данных, веб-серверы и облачные службы, что позволяет решать более сложные задачи автоматизации и управления системой.
  • Отладка: сценарии оболочки легко отлаживать, и большинство оболочек имеют встроенные инструменты отладки и сообщения об ошибках, которые помогают быстро выявлять и устранять проблемы.

Обзор оболочки Bash и интерфейса командной строки

Термины «оболочка» и «bash» взаимозаменяемы. Но между ними есть тонкая разница.

Термин «оболочка» относится к программе, которая предоставляет интерфейс командной строки для взаимодействия с операционной системой. Bash (Bourne Again SHell) является одной из наиболее часто используемых оболочек Unix/Linux и является оболочкой по умолчанию во многих дистрибутивах Linux.

Интерфейс оболочки zsh или командной строки выглядит следующим образом:

Оболочка принимает команды от пользователя и отображает вывод

В приведенном выше выводе clockber::~>> — это приглашение оболочки zsh. Когда оболочка используется в интерактивном режиме, в Linux она отображает $, когда ожидает команды от пользователя.

Если оболочка запущена от имени пользователя root (пользователь с правами администратора), приглашение меняется на #. Приглашение оболочки суперпользователя выглядит следующим образом:

[root@host ~]#

Хотя Bash — это тип оболочки, существуют и другие доступные оболочки, такие как оболочка Korn (ksh), оболочка C (csh) и оболочка Z (zsh). Каждая оболочка имеет свой собственный синтаксис и набор функций, но все они имеют общую цель — предоставить интерфейс командной строки для взаимодействия с операционной системой.

Вы можете определить свой тип оболочки с помощью команды ps:

Пример вывода моего терминала:

Проверка типа оболочки. Я использую оболочку zsh

Таким образом, в то время как «оболочка» — это широкий термин, относящийся к любой программе, предоставляющей интерфейс командной строки, «Bash» — это особый тип оболочки, который широко используется в системах Unix/Linux.

Примечание: в этом руководстве мы будем использовать оболочку «bash».

Как начать работать с Bash-скриптами

Как запускать команды Bash из командной строки
Как упоминалось ранее, приглашение оболочки выглядит примерно так:

[user@host ~]$

Вы можете ввести любую команду после знака $ и увидеть результат на терминале.

Как правило, команды имеют следующий синтаксис:

command [OPTIONS] arguments

Давайте рассмотрим несколько основных команд bash и посмотрим их результаты. Обязательно попробуйте выполнить их в своем терминале.

  • date : отображает текущую дату
admin@user-new:/$ date Sat 25 Mar 2023 14 12:04:17 PM MSK
  • pwd : Отображает текущий рабочий каталог.
admin@user-new:/usr/lib$ pwd /usr/lib
  • ls : Выводит содержимое текущего каталога.
admin@user-new:/home$ ls clockber
  • echo : Выводит на терминал строку текста или значение переменной.
admin@user-new:/home$ echo "Hello bash" Hello bash

Вы всегда можете обратиться к руководству по командам с помощью команды man.

Например, руководство по echo выглядит примерно так:

Как создавать и выполнять сценарии Bash

Соглашения об именах сценариев

По соглашению об именах сценарии bash заканчиваются на .sh. Однако сценарии bash могут прекрасно работать без расширения sh.

Добавляем Шебанг(Shebang)

Скрипты Bash начинаются с шебанга. Шебанг(Shebang) — это комбинация bash # и bang ! за которым следует путь оболочки bash. Это первая строка скрипта. Шебанг говорит оболочке выполнить его через оболочку bash. Shebang — это просто абсолютный путь к интерпретатору bash.

Ниже приведен пример оператора шебанг.

#!/bin/bash

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

which bash

Наш первый bash-скрипт

Наш первый скрипт предлагает пользователю ввести путь. В свою очередь он вернет все содержимое указанного каталога.

Создайте файл с именем show_all.sh с помощью команды vi . Вы можете использовать любой редактор по вашему выбору.

vi show_all.sh

Добавьте следующие команды в свой файл и сохраните его:

#!/bin/bash echo "сегодня " `date` echo -e "\n введите путь к директории:" read path_to echo -e "\n ваша директория содержит файлы и папки:" ls $path_to

Скрипт отобразит текущую дату и содержимое предоставленного пользователем каталога.

Давайте более подробно рассмотрим сценарий построчно. Я снова привожу тот же сценарий, но на этот раз с номерами строк.

#!/bin/bash echo "Сегодня " `date` echo -e "\n введите путь к директории:" read path_to echo -e "\n ваша директория содержит файлы и папки:" ls $path_to
  • Строка #1: Шебанг (#!/bin/bash) указывает на путь к оболочке bash.
  • Строка #2: команда echo отображает текущую дату и время на терминале. Обратите внимание, что дата указана в обратных кавычках.
  • Строка #4: мы хотим, чтобы пользователь ввел правильный путь.Строка #5: Команда чтения считывает ввод и сохраняет его в переменной path_to.
  • строка #8: Команда lh берет переменную с сохраненным путем и отображает текущие файлы и папки.

Выполнение bash-скрипта

Чтобы сделать скрипт исполняемым, назначьте права на выполнение своему пользователю с помощью команды:

chmod u+x show_all.sh
  • chmod изменяет владельца файла для текущего пользователя u: .
  • +x добавляет права на выполнение текущему пользователю. Это означает, что пользователь, являющийся владельцем, теперь может запустить сценарий.
  • show_all.sh — это файл, который мы хотим запустить.

Вы можете запустить скрипт любым из указанных способов:

  • sh show_all.sh
  • bash show_all.sh
  • ./show_all.sh

Давайте посмотрим, как он работает��

Основы Bash скриптов

Комментарии в сценариях bash

Комментарии начинаются с # в сценариях bash. Это означает, что любая строка, начинающаяся с #, является комментарием и будет игнорироваться интерпретатором.

Комментарии очень полезны при документировании кода, и рекомендуется добавлять их, чтобы помочь другим понять код.

Вот примеры комментариев:

# This is an example comment # Можно комментить на русском # These lines will be ignored by the interpreter

Переменные и типы данных в Bash

Переменные позволяют хранить данные. Вы можете использовать переменные для чтения, доступа и управления данными во всем сценарии.

В Bash нет типов данных. В Bash переменная может хранить числовые значения, отдельные символы или строки символов.

В Bash вы можете использовать и устанавливать значения переменных следующими способами:

  1. Назначьте значение напрямую:
country=Russia

2. Присвоение значение на основе вывода, полученного от программы или команды, используя подстановку команд. Обратите внимание, что $ требуется для доступа к значению существующей переменной.

same_country=$country

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

admin@user-new:/$ country=Russia admin@user-new:/$ echo $country Russia admin@user-new:/$ new_country=$country admin@user-new:/$ echo $new_country Russia

Соглашения об именах переменных

В сценариях Bash следующие соглашения об именах переменных:

  1. Имена переменных должны начинаться с буквы или символа подчеркивания ().
  2. Имена переменных могут содержать буквы, цифры и символы подчеркивания ().
  3. Имена переменных чувствительны к регистру.
  4. Имена переменных не должны содержать пробелов или специальных символов.
  5. Используйте описательные имена, отражающие назначение переменной.
  6. Избегайте использования зарезервированных ключевых слов, таких как if, then, else, fi и т. д., в качестве имен переменных.

Вот несколько примеров допустимых имен переменных в Bash:

name count _var myVar MY_VAR

А вот несколько примеров недопустимых имен переменных:

2ndvar (начинается с цифры) my var (содержит пробел) my-var (содержит дефис)

Соблюдение этих соглашений об именах помогает делать сценарии Bash более читабельными и простыми в использовании.

Ввод и вывод в Bash-скриптах

Обработка входных данных

В этом разделе мы обсудим некоторые методы ввода данных в наши сценарии.

  1. Чтение пользовательского ввода и сохранение его в переменной

Мы можем прочитать пользовательский ввод с помощью команды чтения.

#!/bin/bash echo -e "\n Enter your name:" read the_name echo -e "\n welcome to Medium $the_name"

2. Чтение из файла

Этот код считывает каждую строку из файла с именем input.txt и выводит ее на терминал. Мы изучим циклы while позже в этой статье.

while read line do echo $line done < input.txt

3. Аргументы командной строки

В скрипте или функции bash $1 обозначает переданный начальный аргумент, $2 обозначает переданный второй аргумент и так далее.

Этот сценарий принимает имя в качестве аргумента командной строки и печатает персонализированное приветствие.

echo "Hello, $1!"

Мы передаем скрипту clockber как аргумент.

#!/bin/bash echo "Hello, $1!"

Отображение вывода

Здесь мы обсудим некоторые методы получения вывода из скриптов.

  1. Печать в терминал:
echo "Hello, World!"

Этой командой напечатаем текст “Hello, World!” в терминале.

2. Запись в файл:

echo "let's write text." > output.txt

Эта команда запишет текст “let’s write text.” в файл с именем output.txt. Обратите внимание, что оператор > перезапишет файл, если в нем уже есть содержимое.

3. Добавление в файл:

echo "More text." >> output.txt

Добавляем текст “More text.” в конец файла output.txt.

4. Перенаправление вывода:

ls > files.txt

Перечисляем файлы в текущем каталоге и записываем вывод в файл с именем files.txt. Таким образом вы можете перенаправить вывод любой команды в файл.

Основные команды Bash (echo, read и т. д.)

Вот список некоторых наиболее часто используемых команд bash:

  1. cd : Изменение директории на другую.
  2. ls : Отображение содержимого в текущей директории.
  3. mkdir : Создание новой директории.
  4. touch : Создать новый файл.
  5. rm : Удаление файла или директории.
  6. cp : Копирование файла или директории.
  7. mv : Перемещение или переименование файла или директории.
  8. echo : Печать текста в терминал.
  9. cat : Читает данные из файла и выводит их на экран.
  10. grep : Поиск в файлах.
  11. chmod : Изменение прав доступа к файлу или директории.
  12. sudo : Запуск команд с правами администратора.
  13. df : Отображение дискового пространства.
  14. history : Отображение истории предыдущих комманд.
  15. ps : Отображение информации о запущенных процессах.

Условные операторы (if/else)

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

if [[ condition ]]; then statement elif [[ condition ]]; then statement else do this by default fi

Можно использовать логические операторы, такие как AND -a и OR -o , чтобы делать сравнения, которые имеют большее значение.

if [ $a -gt 60 -a $b -lt 100 ]

Давайте рассмотрим пример сценария Bash, который использует операторы if , if-else , if-elif-else , чтобы определить, является ли введенное пользователем число положительным, отрицательным или нулевым:

#!/bin/bash echo "Please enter a number: " read num if [ $num -gt 0 ]; then echo "$num is positive" elif [ $num -lt 0 ]; then echo "$num is negative" else echo "$num is zero" fi

Сначала скрипт предлагает пользователю ввести число. Затем он использует оператор if , чтобы проверить, больше ли число, чем 0. Если это так, сценарий выводит, что число положительное. Если число не больше 0, скрипт переходит к следующему оператору, который является оператором if-elif . Здесь скрипт проверяет, меньше ли число 0. Если да, то скрипт выводит отрицательное число. Наконец, если число не больше 0 и не меньше 0, скрипт использует оператор else для вывода того, что число равно нулю.

Циклы и ветвление в Bash

Цикл While

Циклы while проверяют условие в цикле, пока это условие остается true . Для управления циклом принято использовать счетчики.

В приведенном ниже примере (( i += 1 )) — это оператор счетчика, который увеличивает значение i. Цикл будет выполняться ровно 10 раз.

#!/bin/bash i=1 while [[ $i -le 10 ]] ; do echo "$i" (( i += 1 )) done

Цикл For

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

В приведенном ниже примере цикл повторяется 5 раз.

#!/bin/bash for i in do echo $i done

Оператор Case

В Bash операторы case используются для сравнения заданного значения со списком шаблонов и выполнения блока кода на основе первого совпавщего шаблона. Синтаксис оператора case в Bash следующий:

case expression in pattern1) # code to execute if expression matches pattern1 ;; pattern2) # code to execute if expression matches pattern2 ;; pattern3) # code to execute if expression matches pattern3 ;; *) # code to execute if none of the above patterns match expression ;; esac

Здесь expression — это значение, которое мы хотим сравнить, а pattern1 , pattern2 , pattern3 и т. д. — это шаблоны, с которыми мы хотим его сравнить.

Двойная точка с запятой “;;” отделяет каждый блок кода для выполнения для каждого шаблона. Звездочка “*” представляет случай по умолчанию, который выполняется, если ни один из указанных шаблонов не соответствует выражению.

Давайте посмотрим пример.

fruit="apple"case in "apple") echo "This is a red fruit." ;; "banana") echo "This is a yellow fruit." ;; "orange") echo "This is an orange fruit." ;; *) echo "Unknown fruit." ;;esac

В данном примере, поскольку значение “fruit” является “apple”, чему соответствует первый шаблон и блок кода, следовательно в терминале мы увидем “This is a red fruit.”. Если бы значением “fruit” было “banana”, второй шаблон соответствовал бы и блоку кода, который повторяет “This is a yellow fruit.”. будет выполняться и так далее. Если значение “fruit”не соответствует ни одному из указанных шаблонов, выполняется случай по умолчанию, который повторяет “Unknown fruit.”.

Планирование сценариев с помощью Сron

Cron — мощная утилита для планирования заданий, доступная в Unix-подобных операционных системах. Настроив cron, вы можете настроить автоматические задания для запуска ежедневно, еженедельно, ежемесячно или в определенное время. Возможности автоматизации, предоставляемые cron, играют решающую роль в системном администрировании Linux.

Ниже приведен синтаксис для планирования crons:

# Cron job example* * * * * sh /path/to/script.sh

Здесь * представляют собой минуты (минуты), часы (часы), день (дни), месяцы и дни недели соответственно.

Ниже приведены несколько примеров планирования заданий cron.

schedule description example0 0 * * * Run a script at midnight every day 0 0 * * * /path/to/script.sh*/5 * * * * Run a script every 5 minutes */5 * * * * /path/to/script.sh0 6 * * 1-5 Run a script at 6 am from Monday to Friday 0 6 * * 1-5 /path/to/script.sh0 0 1-7 * * Run a script on the first 7 days of every month 0 0 1-7 * * /path/to/script.sh0 12 1 * * Run a script on the first day of every month at noon

Использование crontab
Утилита crontab используется для добавления и редактирования заданий cron.

crontab -l перечисляет уже запланированные сценарии для конкретного пользователя.

Вы можете добавлять и редактировать cron через crontab -e .

Вы можете прочитать больше о работе с Cron здесь.

Как отлаживать и устранять неполадки Bash-скриптов

Отладка и устранение неполадок являются важными навыками для любого Bash-скриптора. Хотя сценарии Bash могут быть невероятно мощными, они также могут быть подвержены ошибкам и неожиданному поведению. В этом разделе мы обсудим некоторые советы и методы по отладке и устранению неполадок сценариев Bash.

Установите параметр set -x

Один из наиболее полезных способов отладки сценариев Bash — установка параметра set -x в начале сценария. Эта опция включает режим отладки, в котором Bash печатает каждую команду, которую он выполняет, на терминал, перед которой ставится знак +. Это может быть невероятно полезно для определения того, где в сценарии возникают ошибки.

#!/bin/bashset -x# Your script goes here

Проверьте код выхода

Когда Bash обнаруживает ошибку, он устанавливает код выхода, который указывает характер ошибки. Вы можете проверить код выхода самой последней команды, используя $? переменная. Значение 0 указывает на успех, а любое другое значение указывает на ошибку.

#!/bin/bash# Your script goes hereif [ $? -ne 0 ]; then echo "Error occurred."fi

Используйте операторы echo

Другой полезный метод отладки скриптов Bash — вставка echo-оператора в ваш код. Это может помочь вам определить, где возникают ошибки и какие значения передаются в переменные.

#!/bin/bash# Your script goes hereecho "Value of variable x is: " >x"# More code goes here

Используйте опцию set -e

Если вы хотите, чтобы ваш сценарий завершался немедленно, когда какая-либо команда в сценарии не удалась, вы можете использовать опцию set -e. Этот параметр заставит Bash завершить работу с ошибкой, если какая-либо команда в сценарии завершится неудачно, что упростит выявление и исправление ошибок в вашем сценарии.

#!/bin/bashset -e# Your script goes here

Устранение неполадок Cron путем проверки log журналов

Мы можем устранять неполадки crons с помощью файлов журнала. Журналы ведутся для всех запланированных заданий. Вы можете проверить и проверить в журналах, выполнялось ли конкретное задание должным образом или нет.

Для Ubuntu/Debian вы можете найти cronlogs по адресу:

/var/log/syslog

Расположение отличается для других дистрибутивов.

Файл журнала заданий cron может выглядеть следующим образом:

2022-03-11 00:00:01 Task started2022-03-11 00:00:02 Running script /path/to/script.sh2022-03-11 00:00:03 Script completed successfully2022-03-11 00:05:01 Task started2022-03-11 00:05:02 Running script /path/to/script.sh2022-03-11 00:05:03 Error: unable to connect to database2022-03-11 00:05:03 Script exited with error code 12022-03-11 00:10:01 Task started2022-03-11 00:10:02 Running script /path/to/script.sh2022-03-11 00:10:03 Script completed successfully

Заключение

В этой статье мы начали с того, как получить доступ к терминалу, а затем выполнили некоторые основные команды bash. Также изучили, что такое оболочка bash. Кратко рассмотрели ветвление кода с использованием циклов и условий. Наконец, мы обсудили автоматизацию сценариев с помощью cron, а затем некоторые методы устранения неполадок.

Надеюсь вся вышеперечисленная информация вам помогла 🙂

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

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