Основи роботи з 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 - домашній каталог користувача

$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