Как стать автором
Обновить

Bash-типовые примеры работы с файлами

Уровень сложностиПростой

Bash (Bourne Again SHell) — это командный интерпретатор (shell) и язык командных файлов (скриптов) для операционных систем семейства Unix и Linux.

Рассмотрим несколько конструкций, которые часто применяются в скриптах.

  1. Запись строк в файл.

Например создание ярлыка:
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"
  1. Запись одной строки в файл.

Например, с проверкой есть ли уже подобная строка в файле .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
  1. Запись строк в файл.

    Пример без проверки на повторы
    Заметка:
    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;
  1. Обновление строки в файле.

# Обновляем версию в файле 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 - путь к файл.

  1. Чтение строки.

    Например чтение строки из файла с версией.
    Заметка:
    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")

Надеюсь, что кому-то эта шпаргалка будет полезна.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.