Инструменты пользователя

Инструменты сайта


bash_скриптов

Создание bash скриптов

В bash есть последовательность из двух символов – shebang. Два этих символа говорят о том, какой интерпретатор будет выполнять код в скрипте. Так как в данном руководстве используется bash, путь до интерпретатора будет такой

#!/bin/bash

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

#!/bin/bash
 
# Question scipt
# Author: Jerk
# Date create: 17.08.20
 
echo 'Want to play a game of MTG?'
read VALUE
if [$VALUE = 'yes'];
then
echo "Let's play a party"
else
echo "Continue work"
fi

Даем владельцу право на исполнение скрипта

chmod u+x bin/script1

И установим suid бит, чтобы все пользователи могли запускать это файл от имени его владельца

chmod u+s bin/script1

Программа test

программа тест может проверять файл по различным условия

Ключи Описание
-x Исполняемый файл
-e Файл существует
-eq Значения равны
-ne Значения не равны
-z Существует ли значение

На выходе дает значение переменной $?

  • 0 – Если результат положительный
  • не 0 – Если результат отрицательный

Пример. Проверим, больше ли первое число второго

test 5 -gt 2
# Либо
[ 5 -gt 2 ]

ответ получаем с помощью echo

echo $?
0

Пример чутка посложнее.

test 100 -gt 99 && echo "Yes, that's true." || echo "No, that's false."
Yes, that's true.

В примере приведенном выше, появились дополнительные операторы, поясним их значения:

  • && - Все что идет после него, выполнится только в случае успеха того что идет до него;
  • || - Все что идет после него, выполняется только если все, что шло до него не выполнилось.

Создадим простенький скрипт, в котором будем проверять, существует ли директория или нет

#!/bin/bash
 
# Search directory scipt
# Author: Jerk
# DAte: 180820
 
if [ -e /home/johndoe/bin ];
then
echo 'Directory exist!'
else
echo 'Directory not found:('
fi

Условные выражения и подстановка команд

Условные выражения

Стандартная конструкция выглядит так

if  [ условие ]
then
    набор команд
else
    набор команд
fi

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

#!/bin/bash
 
echo 'Want to play a game of MTG?'
read VALUE
if [ $VALUE = 'yes' ];
then
echo "Let's play a party"
else
echo "Continue work"
# Для того, чтобы отправлять почту в Ubuntu должен быть установлен пакет  mailutils
echo "He don't want play MTG :(" | mail -s 'info' root
fi

Подстановка команд

Делаем скрипт

#!/bin/bash
 
x=$(date)
y=`uptime -p`
echo "Today is $x and system $y"
  • x – принимает значение у вывода команды date
  • y – принимает значение у вывода команды uptime -p

Циклы

for

Оболочка bash поддерживает циклы for, которые позволяют организовывать перебор последовательностей значений. Базовая структура такого цикла:

for var in list
do
команды
done

В каждой итерации цикла в переменную var будет записываться следующее значение из списка list. В первом проходе цикла, таким образом, будет задействовано первое значение из списка. Во втором — второе, и так далее — до тех пор, пока цикл не дойдёт до последнего элемента.

Пожалуй, самый простой пример цикла for в bash-скриптах — это перебор списка простых значений:

#!/bin/bash
 
for x in  5 6 7
do
echo "nimber $x"
done

вывод

nimber 5
nimber 6
nimber 7

с подстановкой команды seq (последовательность) в апострофах

#!/bin/bash
 
for x  in `seq 5 10`
do
echo "number $x"
done

вывод

number 5
number 6
number 7
number 8
number 9
number 10

с подстановкой команды ls

#!/bin/bash
 
file=$(ls ~)
for x in $file
do
echo $x
done

Данный скрипт выведет содержание домашней директории у конкретного пользователя.

while

Конструкция for — не единственный способ организации циклов в bash-скриптах. Здесь можно пользоваться и циклами while. В таком цикле можно задать команду проверки некоего условия и выполнять тело цикла до тех пор, пока проверяемое условие возвращает ноль, или сигнал успешного завершения некоей операции. Когда условие цикла вернёт ненулевое значение, что означает ошибку, цикл остановится.

Схема организации циклов while

while команда проверки условия
do
другие команды
done

Пара простых примеров

#!/bin/bash
 
x=1
while [ $x -ne 6 ]
do
echo "value $x"
x=$(($x+1))
done
#!/bin/bash
echo "Type all you want, or type STOP to stop scipt!"
x="Go"
while [ $x != "STOP" ]
do
read x
echo $x
done

exec

В скриптах также часто используется команда exec, которая позволяет:

  • Выполнить определенную программу, не создавая отдельного процесса и заменяя собой оболочку
  • Изменить вывод для текущей оболочки или программы

misc

bash_скриптов.txt · Последнее изменение: 2020/08/21 11:30 — admin