🏠 | 💻 IT | Linux | Bash |

Bash Scripting

Contents
Introduction
Простой скрипт
Переменные
Как вызвать скрипт
Как вызвать скрипт из скрипта
Как назвать скрипт
Результат команды в переменную
Аргументы из командной строки
Условные операторы if else
Цикл for
Объединить строки
Мониторинг потребления памяти
Работа с файлами в директории

Introduction

Перед тем как читать эту статью убедитесь, что вы знакомы с содержанием статьи «Основы Bash»

Основы

В начале скрипта нужно указать #!/bin/bash и желательно какой-то коментарий о назначении скрипта

#!/bin/bash # Пример комментария

Переменные

Допустим мы хотим вызвать скрипт из файла script_1 и передать туда какую-то переменную, а затем записать её в лог

#!/bin/bash # Читаем из терминала и записываем в лог echo $1 << ~/log.txt

echo $1 означает, что мы возьмём первую переменную

~/ означает, что файл log.txt будет в домашней директории

Как вызвать скрипт

Первым делом нужно убедиться, что файл script_1 является исполняемым

Если вы находитесь в той же диретории, что и script_1 execute

ls -la

-rw-rw-r--. 1 andrei andrei 5252 Nov 26 12:27 script_1

Если четвёртый символ это - то файл не является исполняемым.

Сделать его исполняемым можно командой

chmod u+x script_1

ls -la

-rwxrw-r--. 1 andrei andrei 5252 Nov 26 12:29 script_1

Обратите внимание на -rwx теперь четвёртый символ это x

В моей CentOS настроена подсветка исполняемых файлов, поэтому он теперь зелёный

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

./script_1

Конкретно этот скрипт должен принимать аргументы из командной строки , поэтому мы выполним

./script_1 word1 word2

word1 добавится в log.txt а word2 нет, потому что word1 это первый аргумент а word2 второй.

To записывать вообще все аргументы заменим $1 на $*

Добавим в лог время выполнения команд (подробности здесь)

#!/bin/bash # Читаем из терминала и записываем в лог echo $(date + "%Y-%m-%d %H:%M:%S,%3N") $* << ~/log.txt

./script_1 one two three
cat log.txt

2020-09-20 17:48:27,404 one two three

Как вызвать скрипт из другого скрипта

Допустим из скрипта parent.sh вам нужно вызвать скрипт child.sh

#!/bin/bash # parent bash ./child.sh

Это если они в одной директории, если в разных - пишите путь до скрипта

Как назвать скрипт

Проверить не занято ли имя системой можно командой type.

Например, вы решили назвать свой скрипт test

type test

test is a shell builtin

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

Вывод команды в переменную

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

To сделать это воспользуйтесь синтаксисом

ПЕРЕМЕННАЯ=$(КОМАНДА)

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

#!/bin/bash ERROR=$(grep -o -i ERROR 2024-04-20-log.txt | wc -l) WARNING=$(grep -o -i WARNING 2024-04-20-log.txt | wc -l) echo "Ошибок: $ERROR; Предупреждений: $ WARNING"

wc это команда, которая подсчитывает число слов

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

Скрипт может принимать аргументы из командной строки

Первый аргумент обозначается как $1 второй как $2 и так далее

Рассмотрим пример ar.sh

#!/bin/bash AR=$1 echo $AR $AR $AR

Этот скрипт ждёт один внешний аргумент и присваивает его значение переменной AR

Затем это же значение выводится три раза

./ar.sh hei

hei hei hei

В C аналогичную функцию выполняет int argc, char* argv[]

В Python - sys.argv

Цикл for

В самом привычном виде цикл for можно записать так

#!/bin/bash for i in `seq 0 9`; do echo $i done

Объединить строки

Конкатенация строк может быть сделана следующим образом

concat.sh

#!/bin/bash STR1="heihei" STR2=".ru" STR3=$STR1$STR2 echo $STR3

./concat.sh

heihei.ru

Статьи о Bash
Bash
-eq -gt …: Операторы сравнения
if else: Условные операторы
Цикл while
date
Переход на новую строку
Арифметические операции
Передать файл или пароль по SFTP в Bash скрипте
Errors Bash
Share in social media: