Командная строка
Скрипты автоматизации
Написание Bash-скриптов для автоматизации задач
Основы Bash-скриптов
#!/bin/bash
# Это комментарий
# Вывод текста
echo "Hello, World!"
# Переменные
NAME="SAIKYO"
echo "Welcome to $NAME OS"
# Чтение ввода
read -p "Enter your name: " USERNAME
echo "Hello, $USERNAME"Запуск скрипта
# Сделать исполняемым
chmod +x script.sh
# Запустить
./script.sh
bash script.shПеременные
#!/bin/bash
# Присваивание (без пробелов!)
VAR="value"
NUMBER=42
# Использование
echo $VAR
echo ${VAR}
echo "${VAR}_suffix"
# Специальные переменные
echo $0 # имя скрипта
echo $1 # первый аргумент
echo $# # количество аргументов
echo $@ # все аргументы
echo $? # код возврата последней команды
echo $$ # PID текущего процесса
# Подстановка команд
DATE=$(date +%Y-%m-%d)
FILES=`ls -1 | wc -l`Условия
#!/bin/bash
# if-then-else
if [ "$1" = "hello" ]; then
echo "Hello!"
elif [ "$1" = "bye" ]; then
echo "Goodbye!"
else
echo "Unknown command"
fi
# Сравнение чисел
if [ $NUM -eq 10 ]; then echo "Equal"; fi
if [ $NUM -ne 10 ]; then echo "Not equal"; fi
if [ $NUM -gt 10 ]; then echo "Greater"; fi
if [ $NUM -lt 10 ]; then echo "Less"; fi
if [ $NUM -ge 10 ]; then echo "Greater or equal"; fi
if [ $NUM -le 10 ]; then echo "Less or equal"; fi
# Сравнение строк
if [ "$STR" = "value" ]; then echo "Equal"; fi
if [ "$STR" != "value" ]; then echo "Not equal"; fi
if [ -z "$STR" ]; then echo "Empty"; fi
if [ -n "$STR" ]; then echo "Not empty"; fi
# Проверка файлов
if [ -f "/path/file" ]; then echo "File exists"; fi
if [ -d "/path/dir" ]; then echo "Directory exists"; fi
if [ -r "/path/file" ]; then echo "Readable"; fi
if [ -w "/path/file" ]; then echo "Writable"; fi
if [ -x "/path/file" ]; then echo "Executable"; fi
# Логические операторы
if [ $A -gt 0 ] && [ $B -gt 0 ]; then echo "Both positive"; fi
if [ $A -gt 0 ] || [ $B -gt 0 ]; then echo "At least one positive"; fiЦиклы
#!/bin/bash
# for
for i in 1 2 3 4 5; do
echo "Number: $i"
done
for file in *.txt; do
echo "Processing: $file"
done
for i in {1..10}; do
echo $i
done
for ((i=0; i<10; i++)); do
echo $i
done
# while
COUNT=0
while [ $COUNT -lt 5 ]; do
echo $COUNT
((COUNT++))
done
# Чтение файла построчно
while IFS= read -r line; do
echo "$line"
done < file.txt
# until
until [ $COUNT -ge 5 ]; do
echo $COUNT
((COUNT++))
doneФункции
#!/bin/bash
# Определение функции
greet() {
echo "Hello, $1!"
}
# Вызов
greet "World"
# Функция с возвратом
add() {
local result=$(($1 + $2))
echo $result
}
SUM=$(add 5 3)
echo "Sum: $SUM"
# Локальные переменные
my_function() {
local LOCAL_VAR="local"
GLOBAL_VAR="global"
}Обработка ошибок
#!/bin/bash
# Выход при ошибке
set -e
# Выход при использовании неопределённой переменной
set -u
# Проверка кода возврата
if ! command; then
echo "Command failed"
exit 1
fi
# Trap для очистки
cleanup() {
echo "Cleaning up..."
rm -f /tmp/tempfile
}
trap cleanup EXITПолезные примеры
Резервное копирование
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/backup"
SOURCE="/home"
tar -czvf "$BACKUP_DIR/home-$DATE.tar.gz" "$SOURCE"
find "$BACKUP_DIR" -name "home-*.tar.gz" -mtime +7 -delete
echo "Backup completed: home-$DATE.tar.gz"Мониторинг диска
#!/bin/bash
THRESHOLD=80
USAGE=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
if [ $USAGE -gt $THRESHOLD ]; then
echo "Warning: Disk usage is ${USAGE}%"
# Отправить уведомление
fi