Bash (Bourne Again SHell) — это командный интерпретатор (shell) и язык командных файлов (скриптов) для операционных систем семейства Unix и Linux.
Рассмотрим несколько конструкций, которые часто применяются в скриптах.
Запись строк в файл.
Например создание ярлыка:
EXEC_PATH="/opt/Telegram/Telegram"
DESKTOP_PATH="$HOME/Desktop/Telegram.desktop"
# Создание ярлыка
cat <<EOF > "$DESKTOP_PATH"
[Desktop Entry]
Version=1.0
Type=Application
Name=Telegram
Exec=$EXEC_PATH
Terminal=false
Categories=Network;InstantMessaging;
EOF
chmod 700 "$DESKTOP_PATH"
Запись одной строки в файл.
Например, с проверкой есть ли уже подобная строка в файле .bashrc
Важно:
> (одиночный знак больше) перезаписывает файл, удаляя его предыдущее содержимое.
>> (двойной знак больше) добавляет (аппендит) новые данные в конец файла, не удаляя его содержимое.
Заметка:
Если нужно чтобы в файл записалось именно ${HOME} то экранируем косой чертой "", получим ${HOME}
Пример:
grep -qxF 'export PATH=\${HOME}/opt/binutils-${_ver}/bin:$PATH' ~/.bashrc || \
echo 'export PATH=\${HOME}/opt/binutils-${_ver}/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
Запись строк в файл.
Пример без проверки на повторы
Заметка:
2>&1 - В результате оба потока (stdout и stderr) попадут в один файл ${OUT_FN_PREFIX}-test.txt
Важно:
Скрипт читаем справа налево, сначала перенаправление stdout и stderr в файл, потом перезапись файла.
make test > ${OUT_FN_PREFIX}-test.txt 2>&1;
Пример записи в файлы требующими права администратора.
echo "${PREFIX_DIR}/${ZLIB}/lib" | sudo tee /etc/ld.so.conf.d/${ZLIB}.conf;
sudo ldconfig;
Обновление строки в файле.
# Обновляем версию в файле control
sed -i "s/Version: [0-9]\+\.[0-9]\+\.[0-9]\+-[0-9]\+/Version: $NEW_VERSION/" "$CONTROL_FILE"
Заметка:
sed -i — это утилита для потокового редактирования текста. (-i - in-place) редактирует на месте без создания временной копии.
Version: [0-9]+.[0-9]+.[0-9]+-[0-9]+ - Шаблон замены.
$NEW_VERSION - строка на замену
$CONTROL_FILE - путь к файл.
Чтение строки.
Например чтение строки из файла с версией.
Заметка:
head - команда для вывода первых строк файла. (head -n 1) - только первая строка
$(...) - подстановка команд (command substitution), которая позволяет использовать вывод команды как значение переменной
VERSION_FILE="${CURRENT_DIR}/version"
# Проверяем, существует ли файл версии
if [[ ! -f "$VERSION_FILE" ]]; then echo "Файл $VERSION_FILE не найден."; exit 1; fi
# Читаем новую версию из файла
NEW_VERSION=$(head -n 1 "$VERSION_FILE")
Надеюсь, что кому-то эта шпаргалка будет полезна.