Как создать скрипт bash
1. Создайте файл
Удобно держать свои скрипты в папке ~/bin:
mkdir -p ~/bin
nano ~/bin/sysinfo.sh2. Напишите скрипт
#!/bin/bash
# Короткий отчёт о системе
echo "Дата: $(date '+%F %T')"
echo "Компьютер: $(hostname)"
echo "Место на системном диске:"
df -h /
echo "Память:"
free -hПервая строка #!/bin/bash обязательна и должна стоять самой первой: она говорит системе, что файл выполняет bash. Строки с # дальше — комментарии. Сохраните файл в nano: Ctrl+O, Enter, выход — Ctrl+X.
3. Дайте право на выполнение и запустите
chmod +x ~/bin/sysinfo.sh
~/bin/sysinfo.shИз папки со скриптом его запускают как ./sysinfo.sh. Без пути оболочка ищет команды только в папках из PATH.
4. Запуск из любой папки
Если ~/bin есть в PATH, скрипт запускается просто по имени: sysinfo.sh. Проверьте:
echo $PATHВ Ubuntu, Debian и Mint стандартный ~/.profile добавляет ~/bin в PATH сам, если папка существует, — но только при входе в систему: после создания папки выйдите из системы и войдите снова. Если папки в списке нет, добавьте её вручную — справка Как добавить папку в PATH.
5. На расписание
Чтобы скрипт выполнялся сам, например каждую ночь в 3:00, добавьте строку в расписание cron:
crontab -e0 3 * * * /home/ivan/bin/sysinfo.sh >> /home/ivan/sysinfo.log 2>&1Пять полей — минута, час, день месяца, месяц, день недели; * — «любой». В cron пишите полные пути к скрипту, файлам и командам: у cron свой, очень короткий PATH, и ваши настройки из .bashrc там не действуют.
Советы
- Переменные — в кавычках:
"$file", а не$file. Иначе имена с пробелами сломают команды. - Проверка синтаксиса без запуска —
bash -n script.sh; пошаговый вывод выполняемых команд —bash -x script.sh. - shellcheck — программа, которая находит типичные ошибки в скриптах. Ставится пакетом
shellcheck. - Остановка на ошибке. Строка
set -eпосле первой заставит скрипт прерваться, как только какая-то команда закончится ошибкой. Ловит не всё, но спасает от продолжения работы «вслепую». - Код возврата. Заканчивайте скрипт
exit 0при успехе иexit 1при ошибке — тогда cron и другие программы поймут, получилось ли. - Скрипты из Windows. Если скрипт написан в Windows, сохраните его с концами строк LF, иначе будет ошибка
bad interpreter(справка Ошибка No such file or directory).
Скрипт выполняет команды без вопросов и без возможности отмены. Скрипт с rm сначала запустите на копии или замените rm на echo rm и посмотрите, что он собирается удалить.
Подробно о переменных, аргументах, условиях и циклах — в уроках Скрипты bash: первый скрипт, переменные и аргументы и Условия и циклы в скриптах bash.