Готовые скрипты на shell linux. Как создать собственный script (скрипт-сценарий) в Linux. Начнем с простых примеров

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

Возможно пойти еще дальше и распланировать машинальное выполнение script-a. В случае, если вы уже более опытный user, то, скорее всего, довольно часто проделываете разные цели через terminal. Это только пример и таких действий очень много, даже взять резервное копирование и загрузку скопированных файлов на удаленный сервер. Зачастую встречаются задачи, для которых нужно выполнять несколько команд по очереди, например, для обновления системы необходимо сначала выполнить обновление репозиториев, а уже затем скачать новые версии пакетов.

Это такая командная оболочка, где вы имеете возможность производить разные команды, которые начнут на высокой скорости и плодотворно осуществлять разные работы. Абсолютно вся мощь ОС linux в применении терминала. Поэтому, чтобы не набирать одни и те же команды несколько раз можно использовать скрипты. Это очень удобно, вы просто объединяете несколько команд, которые осуществляют некоторое воздействие, а затем выполняете их одной и той же командой или даже с помощью ярлычка. Для операционной системы linux было создано много скриптов, которые исполняются в разнообразных командных оболочках. Ну в принципе, вы очевидно это уже понимаете.

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

В этом случае не нужно даже флага исполняемости. Взамен подобного, применяются сигнатуры начала файла и специальные флаги. У нас есть несколько различающихся методов произвести включение script-a в ОС Linux. В ОС Linux практически не применяется расширение файла для определения его вида на системном уровне. Это могут делать файловые менеджеры и то не всегда. Операционная система считает исполняемыми только те файлы, которым присвоена характеристика исполняемости. Это обыкновенные файлы, которые содержат в себе текст.

Bash скрипты Linux для чайников

Конструкцию bash допускается описать в 7 обязательствах подобным типом: «вызов командного интерпретатора - тело bash скрипта - окончание скрипта». Сочиняются скрипты с поддержкой различного текстового редактора, хранятся они как текстовые компьютерные данные. Но, чтобы было комфортнее, я храню их в совокупности с расширением «*.sh». Но давайте поглядим на все это на образце определенной цели. Есть использование, которое нужно запускать с достаточно большим комплектом характеристик. Стартовать потребуется зачастую, а каждый раз вводить эти характеристики лень. Чтоб являлось определеннее, поглядим, как выглядит это воздействие:

/home/Admin/soft/sgconf/sgconf -s 10.10.10.1 -p 5555 -a Admin -w 112233 -u user -c 100

Для этого script-a давайте использовать интерпретатор bash. Первостепенным процессом нам с вами необходим вызов интерпретатора. Открываем текстовый редактор и пишем код.

Добавим эту операцию с учетом введенных переменных:

/home/Admin/soft/sgconf/sgconf -s 10.10.10.1 -p 5555 -a Admin -w 112233 -u $user -c $cash

Текст, который будем вносить в логи будет таким:text=»Баланс пользователя «user» пополнен на «cash» рублей в time»

Аргумент text варьируется в связи от переменных user, cash и time

if [ -e /home/Admin/scripts/sgconf/sgconf.log] then echo text >> /home/Admin/scripts/sgconf/sgconf.log else echo text > /home/Admin/scripts/sgconf/sgconf.logfi

Теперь, когда нам нужно положить кому-нибудь денежку, мы запускаем скрипт командой «sh sgconf.sh», вводим имя плательщика и сумму платежа. Никаких длинных строчек, никакой головной боли с постоянным вводом одних и тех же значений.

Создать bash скрипт в ОС Linux

Для сочинения бесхитростного script-a на bash, нам понадобится произвести такие обыкновенные процедуры. Создадим в командной строчке Linux бессодержательный файл (именуем его для образца firstscript) и раскроем его на редактирование в любимом текстовом редакторе (vi/vim, nano, gedit и так далее). Для разработки скрипта не понадобится много напряжений, но чтобы набросать сценарий (программу), то понадобится изучать вспомогательную различную литературу. Мы опишем наиболее базу написания скриптов, таким образом приступаем, но если вы не знаете что такое терминал и как им использовать то вам сюда. В самом старте для того чтобы писать bash нам нужно создать каталог для наших скриптов и файл куда мы будем все писать, для этого раскрываем терминал и создаем каталог.

Переключаемся в только-что созданную директорию

И создаем файл

sudo gedit script.sh

В моем примере я создам скрипт обновления системы, запишу в этот файл. у нас откроется текстовый редактор gedit, я люблю больше vim, но у вас он больше всего не будет общепринят, поэтому показываю на стандартном.

sudo apt update;sudo apt full-upgrade;

Сделать файл скрипта исполняемым (если он еще таковым не является). Запускать скрипты sh из командной строки легко. Запустить bash скрипт linux.

chmod +x script.sh

Запускаем скрипт, просто указав путь до него:

path/to/script.sh

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

Иногда требуются права суперпользователя для запуска скрипта, тогда просто перед скриптом пишем команду sudo:

sudo./script.shsudo path/to/script.sh

Можно конечно стартовать script, напрямую предписывая интерпретатор: sh, bash и прочие:

bash script.shsh path/to/script.sh

Как видите, старт скрипта sh в linux — это достаточно обычная задача, даже если вы еще не плотно ознакомлены с терминалом. Имеется действительно масса скриптов и некоторые из них вам допускается потребуется выполнять. В данной руководстве мы рассмотрели полезные bash скрипты ОС Linux, которые вы сможете применять при использовании ОС Linux. В этой статье мы рассмотрели полезные bash скрипты linux, которые вы можете использовать при работе с системой. Определенные из них состоят из нескольких строчек, немногочисленные помещаются в одну строку. Здесь есть как незначительные сниппеты, которые вы можете применить в своих скриптах, так и полноценные диалоговые скрипты, для работы с ними через консоль.

Прежде всего давайте разберём, что такое script и для чего он нужен.

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

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

Для начала давайте создадим самый, что ни на есть, простейший скрипт-Shell для обновления системы.

Все действия я буду проводить с системе Ubuntu , но они применимы и к другим системам Linux , производных от Ubuntu . Для этого нам понадобятся: Текстовый редактор , чтобы наполнить его нужными задачами для создания скрипта (кода) и Терминал - для выполнения созданного скрипта. Эти инструменты установлены в любом дистрибутие Linux по умолчанию.

Итак, открываем текстовый редактор Gedit и вводим в него первые обязательные символы под названием shebang .
shebang в программировании, это последовательность из двух символов: решётки и восклицательного знака (#! ) в начале файла скрипта. И добавляем к данным символам без пробелов /bin/sh - интерпретатор, где будет выполняться скрипт. /bin/sh - это обычно Bourne shell или совместимый интерпретатор командной строки, который передаёт "path/to/script" как первый параметр.
Первая обязательная строка скрипта будет выглядеть следующим образом:

# Мой первый Script обновления Ubuntu

Знак решётки (#) в самом начале строки даёт понять интерпретатору/терминалу, что эту строку читать и выполнять не нужно. Строка нужна в коде данного скрипта для того чтобы сам создатель скрипта знал, что он собирается выполнить на данном отрезке/сценке в коде, чтобы не запутаться в дальнейшем, когда таких строк будет много. Такие строки с знаком решётки называются - закомментированные .

sudo apt update
sudo apt upgrade -y

-y в конце второй команды даёт понять интерпретатору/терминалу, что это действие/команду нужно выполнить автоматически, без дополнительного подтверждения пользователем, нажатия клавиши Ввод . y - сокращённо от английского yes , т.е. да .

Вот и всё. Ваш первый скрипт создан. У вас должно получиться как на снимке:


Остаётся сохранить созданный файл/скрипт и дать ему Имя с обязательным расширением в конце - .sh . Расширение .sh присваивается исполняемому файлу.
Я дал ему Имя - обновление.sh , сохранив в Домашней папке пользователя:


Для того чтобы созданный файл/скрипт был исполняемый, ему нужно дать на это разрешение. Сделать это можно двумя способами.

1. Выполнить следующую команду в терминале:

sudo chmod +x обновление.sh

2. Либо открыть файловый менеджер в Домашней папке (где вы сохранили созданный скрипт), правый клик на файле, в контекстном меню - Свойства - Права и активировать пункт - Выполнение : Разрешить выполнение файла как программы :


Чтобы выполнить созданный скрипт, нужно открыть терминал (о чём я писал в самом начале статьи, что терминал - необходимый атрибут/инструмент для выполнения скрипта), ввести sh , через пробел название скрипта - обновление.sh и нажать клавишу Ввод :


Либо в терминале вводим sh и перетаскиваем из файлового менеджера созданный файл с скриптом (также через пробел):


После того как путь к файлу отобразится после команды sh и пробела, достаточно нажать клавишу Enter (Ввод), чтобы выполнить обновление системы:


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

Да, кто-то может возразить, что обновление системы не сложно сделать выполнением этих двух команд в терминале, зачем пыжиться и создавать какие-то скрипты? Всё верно. Но это пример создания простейшего скрипта, чтобы показать, что "не боги горшки обжигают" 😃.

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

Многие из вас, скорее всего, пользуются сайтами по настройке системы, типа тех что я публикую после выхода очередного релиза Ubuntu - Ubuntu после установки или подобными сайтами. Откройте один из таких сайтов: , затем текстовый редактор для создания скрипта.
Для примера я сделал следующую заготовку.

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

# Настройка Ubuntu после уставновки
# Обновление системы

Ниже следуют команды обновления системы:

sudo apt update
sudo apt upgrade -y

Строка описания: Добавление репозиториев:

# Добавление репозиториев

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

sudo add-apt-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner" -y
sudo add-apt-repository ppa:atareao/telegram -y
sudo add-apt-repository ppa:atareao/atareao -y

sudo add-apt-repository ppa:nemh/systemback -y
sudo add-apt-repository ppa:gerardpuig/ppa -y
sudo add-apt-repository ppa:haecker-felix/gradio-daily -y

После того как необходимые репозитории добавлены (повторюсь, у вас могут быть свои репозитории, у меня пример), необходимо обновить систему:

Строка с описанием:

# Обновление системы после подключения репозиториев

И команда на выполнение:

sudo apt update

Теперь, когда репозитории добавлены и система обновлена, наступила очередь в установке программ:

# Установка программ

Для установки программ достаточно один раз ввести команду sudo apt install , а затем через пробел в данную строку добавлять сколько угодно программ, главное чтобы они были правильно составлены. Если какая-то программа состоит из нескольких слов, её команда должна быть монолитной, т.е. все слова в ней должны вводится через чёрточку, например: unity-tweak-tool :

sudo apt install my-weather-indicator telegram skype lm-sensors hddtemp psensor gdebi systemback unity-tweak-tool ubuntu-cleaner gradio -y

Установка дополнительных кодеков

# Мультимедиа и кодеки

sudo apt install ubuntu-restricted-extras -y

Отключение о сбоях в системе

# Отключить отчёты о сбоях в системе

sudo sed -i "s/enabled=1/enabled=0/g" "/etc/default/apport"

Ну вот, пожалуй, и всё. Данный созданный файл сценария должен выглядеть следующим образом:


Необходимо сохранить его (нажать кнопку Сохранить ) и дать Имя с расширением .sh . Я назвал его Настройка\ Ubuntu.sh (вы можете назвать по-другому, но обязвтельно с расширением.sh):


Делаем созданный скрипт исполняемым:

sudo chmod +x Настройка\ Ubuntu.sh

Для выполнения созданного скрипта введите в терминале sh и название созданного скрипта через пробел, либо sh , пробел и перетащить в терминал созданный файл, как объяснялось ранее в простейшем скрипте и нажмите клавишу Ввод , для его выполнения.

Примечание . Обратный слэш в команде Настройка\ Ubuntu.sh экранирует пробел в названии файла для терминала между двумя отдельными словами.

После того как скрипт будет выполнен, хранить его на будущее, для возможной переустановки системы и повторной настройки, лучше всего на отдельном разделе ж/диска в папке /home . Если таковой нет, то в облачном сервисе (Облачное хранилище данных) типа: DropBox, Облако Mail.Ru, Mega.co и т.п., чтобы в любой момент воспользоваться скриптом самому, либо помочь знакомым или родственникам в настройке системы.

Пишем скрипты в Linux (обучение на примерах)

———————————————————————————-

1. Введение

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

Зачем нужны скрипты
Во-первых, администрирование linux-сервера в той или иной степени сводится к систематическому выполнению одних и тех же команд. Причем не обязательно, чтобы эти команды выполнял человек. Их можно запрограммировать на выполнение машиной.
Во-вторых, даже просто выполнение обычной задачи, которая (вдруг) составляет 20-1000… однообразных операций ГОРАЗДО проще реализовать в скрипте.

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

Как писать скрипт
В нашем случае скрипт будет представлять из себя текстовый файл с атрибутами выполнения. Если файл сценария начинается с последовательности #!, которая в мире UNIX называется sha-bang, то это указывает системе какой интерпретатор следует использовать для исполнения сценария. Если это трудно понять, то просто запомните, что все скрипты мы будем начинать писать именно со строчки #!/bin/bash или #!/bin/sh, а далее пойдут команды и комментарии к ним.

Напутствие
Я Вам искренне советую писать как можно больше комментариев чуть ли ни к каждой строчке в скрипте. Пройдет время и Вам понадобится изменить или модернизировать написанный когда-то скрипт. Если не помнишь или не понимаешь, что написано в скрипте, то становится сложно его изменять, проще писать с нуля.

Какие скрипты могут нам понадобиться:

    устанавливающий правила файервола при загрузке системы.
    выполняющий backup настроек и данных.
    добавляющий почтовые ящики в почтовый сервер (точнее в базу mysql)
    запускающий в определенное время (лучше каждую ночь) программу, которая сканирует логи прокси-сервера и выдает удобный web-отчет по количеству скачанного трафика.
    отправляющий нам на почту информацию о том, что кто-то получил доступ к нашему серверу по ssh, время подключения и адрес клиента.

О методике написания скриптов
Создаем текстовый файл, редактируем его, устанавливаем права на выполнение, запускаем, смотрим ошибки, исправляем, запускаем, смотрим ошибки…
Когда все вылизано и работает правильно, ставим его в автозагрузку либо в планировщик на определенное время.

———————————————————————————-

2. Обучение написанию сценариев на внутреннем языке BASH
оригинал: https://www.linuxconfig.org/Bash_scripting_Tutorial

Это руководство предполагает отсутствие предварительных знаний о методике написания сценариев (далее скриптов) с помощью внутреннего языка Bash. С помощью данного руководства вы обнаружите в скором времени, что написание скриптов очень простая задача. Давайте начнем наше обучение с простого сценария, выполняющего вывод строки «Hello World!» (в перев. с англ. — Всем привет!)

1. Сценарий «Всем привет»
Вот ваш первый пример bash-скрипта:

#!/bin/bash
echo «Hello World»

Переходим в директорию, содержащую наш файл hello_world.sh и делаем его исполняемым:

Код: Выделить всё $ chmod +x hello_world.sh

Запускаем скрипт на выполнение

Код: Выделить всё $ ./hello_world.sh

2. Простой архивирующий bash-скрипт

#!/bin/bash
tar -czf myhome_directory.tar.gz /home/user

Код: Выделить всё $ ./backup.sh

$ du -sh myhome_directory.tar.gz
41M myhome_directory.tar.gz

3. Работа с переменными
В данном примере мы объявляем простую переменную и выводим её на экран с помощью команды echo

#!/bin/bash
STRING=»HELLO WORLD!!!»
echo $STRING

Код: Выделить всё $ ./hello_world.sh
HELLO WORLD!!!

Наш архивирующий скрипт с переменными:

#!/bin/bash
OF=myhome_directory_$(date +%Y%m%d).tar.gz
IF=/home/user
tar -czf $OF $IF

Код: Выделить всё $ ./backup.sh
tar: Removing leading "\" from member names
$ du -sh *tar.gz
41M myhome_directory_20100123.tar.gz

3.1 Глобальные и локальные переменные

#!/bin/bash
# Объявляем глобальную переменную
# Такая переменная может использоваться в любом месте этого скрипта
VAR=»global variable»
function bash {
# Объявляем локальную переменную
# Такая переменная действительна только для функции, в которой её объявили
local VAR=»local variable»
echo $VAR
}
echo $VAR
bash
# Обратите внимание, что глобальная переменная не изменилась
echo $VAR

Код: Выделить всё $ ./variables.sh
global variable
local variable
global variable

4. Передаем аргументы в скрипт

#!/bin/bash
# Используйте предопределенные переменные для доступа к аргументам
# Выводим аргументы на экран
echo $1 $2 $3 ‘ -> echo $1 $2 $3’

#Мы так же можем получить доступ к аргументам через специальный массив args=(«$@»)
# Выводим аргументы на экран
echo ${args} ${args} ${args} ‘ -> args=(«$@»); echo ${args} ${args} ${args}’

# Используйте переменную $@ для вывода всех аргументов сразу
echo $@ ‘ -> echo $@’

Используйте переменную $# для вывода количества переданный в скрипт аргументов
echo Number of arguments passed: $# ‘ -> echo Number of arguments passed: $#’

Код: Выделить всё $ ./arguments.sh Bash Scripting Tutorial
Bash Scripting Tutorial -> echo $1 $2 $3
Bash Scripting Tutorial -> args=("$@"); echo ${args} ${args} ${args}
Bash Scripting Tutorial -> echo $@
Number of arguments passed: 3 -> echo Number of arguments passed: $#

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

#!/bin/bash
# используйте обратные кавычки » ` ` » для выполнения команды оболочки
echo `uname -o`
# теперь попробуем без кавычек
echo uname -o

Код: Выделить всё $ uname -o
GNU/Linux
$ ./bash_backtricks.sh
GNU/Linux
uname -o

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

6. Читаем пользовательский ввод (интерактивность)

#!/bin/bash
echo -e «Hi, please type the word: \c »
read word
echo «The word you entered is: $word»
echo -e «Can you please enter two words? »
read word1 word2
echo «Here is your input: \»$word1\» \»$word2\»»
echo -e «How do you feel about bash scripting? »
# read command now stores a reply into the default build-in variable $REPLY
read
echo «You said $REPLY, I’m glad to hear that! »
echo -e «What are your favorite colours ? »
# -a makes read command to read into an array
read -a colours
echo «My favorite colours are also ${colours}, ${colours} and ${colours}:-)»

Код: Выделить всё $ ./read.sh
Hi, please type the word: something
The word you entered is: something
Can you please enter two words?
Debian Linux
Here is your input: "Debian" "Linux"
How do you feel about bash scripting?
good
You said good, I"m glad to hear that!
What are your favorite colours ?
blue green black
My favorite colours are also blue, green and black:-)

7. Использование ловушки

#!/bin/bash
# объявляем ловушку
trap bashtrap INT
# очищаем экран
clear;
# функция ловушки выполняется, когда пользователь нажимает CTRL-C:
# На экран будет выводиться => Executing bash trap subrutine !
# но скрипт будет продолжать выполняться
bashtrap()
{
echo «CTRL+C Detected !…executing bash trap !»
}
# скрипт будет считать до 10
for a in `seq 1 10`; do
echo «$a/10 to Exit.»
sleep 1;
done
echo «Exit Bash Trap Example!!!»

Код: Выделить всё $ ./trap.sh
1/10
2/10
3/10
4/10
5/10
6/10

7/10
8/10
9/10
CTRL+C Detected !...executing bash trap !
10/10
Exit Bash Trap Example!!!

Как видим, сочетание клавишь Ctrl-C не остановило выполнение скрипта.

8. Массивы
8.1 Объявляем простой массив

#!/bin/bash
# Объявляем простой массив с 4 элементами
ARRAY=(‘Debian Linux’ ‘Redhat Linux’ Ubuntu Linux)
# Получаем количество элементов в массиве
ELEMENTS=${#ARRAY[@]}

# выводим в цикле каждый элемент массива
for ((i=0;i<$ELEMENTS;i++)); do
echo ${ARRAY[${i}]}
done

Код: Выделить всё $./arrays.sh
Debian Linux
Redhat Linux
Ubuntu
Linux

8.2 Заполняем массив значениями из файла

#!/bin/bash
# Объявляем массив
declare -a ARRAY
# Команда exec # stdin (обычно это клавиатура), будет производиться из этого файла. Это дает возможность читать
# содержимое файла, строку за строкой, и анализировать каждую введенную строку с помощью sed и/или awk.
exec 10 let count=0

while read LINE <&10; do

ARRAY[$count]=$LINE
((count++))
done

echo Number of elements: ${#ARRAY[@]}
# Вывод значений массива
echo ${ARRAY[@]}
# закрываем файл
exec 10>&-

Код: Выделить всё $ cat bash.txt
Debian Linux
Redhat Linux
Ubuntu
Linux
$ ./arrays.sh
Number of elements: 4
Debian Linux Redhat Linux Ubuntu Linux

9. Условия «если-то-иначе»
9.1. Простое использование «если-иначе» условий
Обратите внимание на пробелы в квадратных скобках, без которых условие работать не будет.

#!/bin/bash
directory=»./BashScripting»

# проверяем наличие директории
if [ -d $directory ]; then
echo «Directory exists»
else
echo «Directory does not exists»
fi

Код: Выделить всё $ ./if_else.sh
Directory does not exists
$ mkdir BashScripting
$ ./if_else.sh
Directory exists

9.2 Вложенные «если-иначе» условия

#!/bin/bash
# Объявляем переменную со значением 4
choice=4
# Выводим на экран
echo «1. Bash»
echo «2. Scripting»
echo «3. Tutorial»

# Выполняем, пока переменная равна четырем
# Зацикливание
while [ $choice -eq 4 ]; do

# читаем пользовательский ввод
read choice
# вложенное «если-иначе» условие
if [ $choice -eq 1 ] ; then

echo «You have chosen word: Bash»

if [ $choice -eq 2 ] ; then
echo «You have chosen word: Scripting»
else

if [ $choice -eq 3 ] ; then
echo «You have chosen word: Tutorial»
else
echo «Please make a choice between 1-3 !»
echo «1. Bash»
echo «2. Scripting»
echo «3. Tutorial»
echo -n «Please choose a word ? »
choice=4
fi
fi
fi
done

Код: Выделить всё $ ./nested.sh
1. Bash
2. Scripting
3. Tutorial

5

1. Bash
2. Scripting
3. Tutorial
Please choose a word ?
4
Please make a choice between 1-3 !
1. Bash
2. Scripting
3. Tutorial
Please choose a word ?
3
You have chosen word: Tutorial

Таким образом сначала тело цикла «while» выполняется, т.к. переменная choice изначально равна четырем. Потом читаем в неё пользовательский ввод, и если ввод не равен 1,2 или 3 то делаем нашу переменную снова равную 4, в связи с чем тело цикла повторяется (снова необходимо вводить 1,2 или 3).

10. Сравнения
10.1 Арифметические сравнения

Lt <
-gt >
-le <=
-ge >=
-eq ==
-ne !=

#!/bin/bash

NUM1=2
NUM2=2
if [ $NUM1 -eq $NUM2 ]; then
echo «Both Values are equal»
else
echo «Values are NOT equal»
fi

Код: Выделить всё $ ./equals.sh
Both Values are equal

#!/bin/bash
# Объявляем переменные с целочисленными значениями
NUM1=2
NUM2=3
if [ $NUM1 -eq $NUM2 ]; then
echo «Both Values are equal»
else
echo «Values are NOT equal»
fi

Код: Выделить всё $ ./equals.sh
Values are NOT equal

#!/bin/bash
# Объявляем переменные с целочисленными значениями
NUM1=2
NUM2=1
if [ $NUM1 -eq $NUM2 ]; then
echo «Both Values are equal»
elif [ $NUM1 -gt $NUM2 ]; then
echo «$NUM1 is greater then $NUM2»
else
echo «$NUM2 is greater then $NUM1»
fi

Код: Выделить всё $ ./equals.sh
2 is greater then 1

10.2 Символьно-текстовые сравнения

Одинаковые
!= не одинаковые
< меньще чем
> больше чем
-n s1 переменная s1 не пустая
-z s1 переменная s1 пустая

#!/bin/bash

S1=»Bash»

S2=»Scripting»
if [ $S1 = $S2 ]; then

else
echo «Strings are NOT equal»
fi

Код: Выделить всё $ ./statement.sh
Strings are NOT equal

#!/bin/bash
# Объявляем символьную переменную S1
S1=»Bash»
# Объявляем символьную переменную S2
S2=»Bash»
if [ $S1 = $S2 ]; then
echo «Both Strings are equal»
else
echo «Strings are NOT equal»
fi

Код: Выделить всё $ ./statement.sh
Both Strings are equal

11. Проверка файлов

B filename Block special file
-c filename Special character file
-d directoryname Check for directory existence
-e filename Check for file existence
-f filename Check for regular file existence not a directory
-G filename Check if file exists and is owned by effective group ID.
-g filename true if file exists and is set-group-id.
-k filename Sticky bit
-L filename Symbolic link
-O filename True if file exists and is owned by the effective user id.
-r filename Check if file is a readable
-S filename Check if file is socket
-s filename Check if file is nonzero size
-u filename Check if file set-ser-id bit is set
-w filename Check if file is writable
-x filename Check if file is executable

#!/bin/bash
file=»./file»
if [ -e $file ]; then
echo «File exists»
else
echo «File does not exists»
fi

Код: Выделить всё $ ls
file.sh
$ ./file.sh
File does not exists
$ touch file
$ ls
file file.sh
$ ./file.sh
File exists

Аналогично для примера мы можем использовать «в то время как» петли, чтобы проверить, если файл не существует. Этот сценарий будет спать, пока файл не существует. Обратите внимание на Bash отрицатель «!» что сводит на нет (инвертирует) -e опцию.

12. Циклы
12.1. Цикл For

#!/bin/bash
# for цикл
for f in $(ls /var/); do
echo $f
done

Запуск for-цикла из командной строки bash:

Код: Выделить всё $ for f in $(ls /var/); do echo $f; done Код: Выделить всё $ for f in $(ls /var/); do echo $f; done
backups
cache
crash
games
lib
local
lock
log
mail
opt
run
spool
tmp
www

12.2. While цикл

#!/bin/bash
COUNT=6
# while цикл
while [ $COUNT -gt 0 ]; do

let COUNT=COUNT-1
done

Код: Выделить всё $ ./while_loop.sh
Value of count is: 6
Value of count is: 5
Value of count is: 4
Value of count is: 3
Value of count is: 2
Value of count is: 1

12.3. Until цикл

#!/bin/bash
COUNT=0
# until цикл
until [ $COUNT -gt 5 ]; do
echo Value of count is: $COUNT
let COUNT=COUNT+1
done

Код: Выделить всё $ ./until_loop.sh
Value of count is: 0
Value of count is: 1
Value of count is: 2
Value of count is: 3
Value of count is: 4
Value of count is: 5

12.4. Циклы с неявными условиями
В следующем примере условием while-цикла является наличие стандартного ввода.
Тело цикла будет выполняться пока есть чему перенаправляться из стандартного вывода в команду read.

#!/bin/bash
# Данный скрипт будет искать и удалять пробелы
# в файлах, заменяя их на подчеркивания
DIR=».»
Управление циклом с командой read путем перенаправления вывода в цикле.
find $DIR -type f | while read file; do
# используем POSIX-класс [:space:] чтобы найти пробелы в именах файлов
if [[ «$file» = *[[:space:]]* ]]; then
# замена пробелов подчеркиваниями
mv «$file» `echo $file | tr ‘ ‘ ‘_’`
fi;
done

Код: Выделить всё $ ls -1
script.sh
$ touch "file with spaces"
$ ls -1
file with spaces
script.sh
$ ./script.sh
$ ls -1
file_with_spaces
script.sh

13. Функции

#!/bin/bash
# Функции могут быть объявлены в любом порядке
function function_B {
echo Function B.
}
function function_A {
echo $1
}
function function_D {
echo Function D.
}
function function_C {
echo $1
}
# Вызываем функции
# передаем параметр в функцию function A
function_A «Function A.»
function_B
# передаем параметр в функцию function C
function_C «Function C.»
function_D

Код: Выделить всё $ ./functions.sh
Function A.
Function B.
Function C.
Function D.

14. Оператор выбора — Select

#!/bin/bash
PS3=’Choose one word: ‘
# select
select word in «linux» «bash» «scripting» «tutorial»
do
echo «The word you have selected is: $word»
# Прерываем, в противном случае цикл будет бесконечный.
break
done
exit 0

Код: Выделить всё $ ./select.sh
1) linux
2) bash
3) scripting
4) tutorial
Choose one word: 4
The word you have selected is: tutorial

15. Оператор выбора — Case

#!/bin/bash
echo «What is your preferred programming / scripting language»
echo «1) bash»
echo «2) perl»
echo «3) phyton»
echo «4) c++»
echo «5) I do not know !»
read case;
# простая структура case-выбора
# обратите внимание, что в данном примере $case — всего лишь переменная
# и не обязана так называться. Это лишь пример
case $case in
1) echo «You selected bash»;;
2) echo «You selected perl»;;
3) echo «You selected phyton»;;
4) echo «You selected c++»;;
5) exit
esac

Код: Выделить всё $ ./case.sh
What is your preferred programming / scripting language
1) bash
2) perl
3) phyton
4) c++
5) I do not know !
4
You selected c++

———————————————————————————-

Более подробную информацию можно получить из различных источников, например отсюда
оригинал: https://www.linuxconfig.org/Bash_scripting_Tutorial
https://ruslandh.narod.ru/howto_ru/Bash-Prog-Intro/
https://bug.cf1.ru/2005-03-17/programmin … -book.html

https://ubuntologia.ru/forum/viewtopic.php?f=109&t=2296

Для написания простого скрипта на bash , нам потребуется выполнить следующие простые действия:

Как это все работает:

первая строка нашего скрипта #!/bin/bash крайне необходима, для того, чтобы наш скрипт успешно выполнился.

вторая строка mkdir testdir создает каталог testdir

третья строка cd testdir позволяет перейти в созданный каталог testdir

команда touch в следующей строке touch file1 file2 file3 создает три файла

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

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

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



Просмотров