Основы работы с Linux. / Решение типовых задач. / Решение типовых задач на BASH.

Решение типовых проблем на BASH.

Любой bash-скрипт должен начинаться со строки:

#!/bin/bash

Вы хотите знать значение всех знаков пунктуации в консоле.

Внешний вид консоли во многом зависит от ОС.

Разберем основные знаки для ОС Linux.

$ - в конце командной строки означает что вы залогинены как обычный пользователь # - как суперпользователь.

~ - обозначает домашнюю директорию.

Вы хотите знать в какой директории находитесь.

Команда pwd.

У нее есть 2 аргумента -L и -P которые будут показывать разные каталоги если вы используете символическую ссылку.

Вы хотите найти и запустить определенную команду в BASH

Все пути к исполняемым командам находятся в переменной PATH.

Существует ряд полезных комманд.

type - покажет тип команды (файл, встроенная команда или ключевое слово) проведя поиск в PATH

$ type ls
ls is aliased to `ls -F -h'

man - документация по любой комманде.

man ls

apropos и whatis - (apropos переводится как кстати) обе команды производят контекстный поиск по ключевой фразе (whatis ищет полное совпадение)

compgen - выводит список всех ключевых слов, команд и функций языка.

-с - комманды

-b - функции

-k - ключевые слова

Необходимо вывести более подробную информацию о файле.

Используем ls, stat, file или find комманды.

ls -l /tmp/sample_file

stat /tmp/sample_file

file /tmp/sample_file

Ключи для ls

-a - отображает скрытые файлы, начинающиеся с .

-l - длинный формат

-R - рекурсия по поддиректориям

-S - сортирует по размеру

Для того, чтобы вывести файлы по шаблону нужно использовать -d

ls -d .*
ls -d .r*

Необходимо в строку поместить переменную наряду со знаком $

Используется экранирование.

echo "$USER won't pay \$5 for coffee."

Необходимо переопределить существующую комманду.

Переопределить можно в .bashrc

cd () {
    builtin cd "$@"
    echo "$OLDPWD --> $PWD"
}

$@ - зарезервированная переменная в которой содержаться все переменные командной строки.

Список зарезервированных переменных.

$UID - …содержит реальный идентификатор, который устанавливается только при логине.

$FUNCNAME - имя текущей функции в скрипте.

$GROUPS - массив групп к которым принадлежит текущий пользователь

$HOME - домашний каталог пользователя

$HOSTNAME - ваш hostname

$HOSTTYPE - архитектура машины.

$LC_CTYPE - внутренняя переменная, котороя определяет кодировку символов

$OLDPWD - прежний рабочий каталог

$OSTYPE - тип ОС

$PATH - путь поиска программ

$PPID - идентификатор родительского процесса

$SECONDS - время работы скрипта(в сек.)

$# - общее количество параметров переданных скрипту

$* - все аргументы переданыне скрипту(выводятся в строку)

$@ - тоже самое, что и предыдущий, но параметры выводятся в столбик

$! - PID последнего запущенного в фоне процесса

$$ - PID самого скрипта

$- - строка, содержащая все текущие флаги коммандной оболочки.

К примеру флаг i указывает об интерактивном режиме.

Можно проверить интерактивность в программе так.

#!/usr/bin/env bash

case "$-" in
    *i*) # Code for interactive shell here
    ;;
    *)
    # Code for noninteractive shell here
    ;;
esac

Вам необходим более полный контроль над форматированием строки.

Используйте оператор printf который работает так же как в С++

printf '%s = %d\n' Lines $LINES

printf '%-10.10s = %4.2f\n' 'Gigahertz' 1.92735