Bash Скрипты

Содержание
Введение
Простой скрипт
Переменные
Как вызвать скрипт
Как вызвать скрипт из скрипта
Как назвать скрипт
Результат команды в переменную
Аргументы из командной строки
Цикл for
Объединить строки
Похожие статьи

Введение

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

Основы

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

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

Переменные

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

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

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

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

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

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

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

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 второй.

Чтобы записывать вообще все аргументы заменим $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

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

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

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

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

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

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

#!/bin/bash ERROR=$(grep -o -i ERROR 2021-10-28-log.txt | wc -l) WARNING=$(grep -o -i WARNING 2021-10-28-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 Scripting
-eq -gt …: Операторы сравнения
if else: Условные операторы
Цикл while
date: Дата
Переход на новую строку
Арифметические операции
Передать файл или пароль по SFTP в Bash скрипте
Мониторинг потребления памяти
Работа с файлами в директории
Ошибки Bash
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: