Основи роботи з 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