From OpenSCADAWiki
Jump to: navigation, search

At.png Перенесення, переклад та актуалізація

Contents

1 Конфігураційні та інформаційні файли і каталоги

1.1 Загальносистемні

  • /dev/ — містить спеціальні файли пристроїв:
    • pts/ — файли пристроїв відкритих псевдотерміналів.
  • /etc/ — основний каталог конфігураційних файлів:
    • anacrontab — конфігурація завдань виконуваних anacron;
    • crontab, cron.d/ — конфігурація та тека окремих файлів конфігурації завдань планового виконання cron;
    • cron.daily/ — тека окремих файлів конфігурації завдань щоденного виконання cron;
    • cron.hourly/ — тека окремих файлів конфігурації завдань щогодинного виконання cron;
    • cron.monthly/ — тека окремих файлів конфігурації завдань щомісячного виконання cron;
    • cron.weekly/ — тека окремих файлів конфігурації завдань щотижневого виконання cron;
    • fstab — конфігурація файлових систем(ФС) автоматичного монтування при завантажені;
    • group — системні групи користувачів;
    • hostname — поточна назва машини, може перевизначатися у /etc/hosts через зворотне вирішення внутрішньої IP адреси;
    • hosts — внутрішнє-первинне вирішення іменованої мережевої адреси у IP та навпаки, може перевизначати /etc/hostname;
    • issue — повідомлення видаване перед локальною реєстрацією;
    • issue.net — повідомлення видаване перед мережевою реєстрацією;
    • logrotate.conf, logrotate.d/ — конфігурація та тека окремих конфігураційних файлів демону автоматичної ротації (пакування, видалення) логів;
    • ld.so.conf — конфігурація динамічного лінкувальника поділюваних бібліотек;
    • motd — повідомлення видаване після вдалої реєстрації;
    • mtab — актуальна інформація щодо змонтованих ФС, зазвичай посилання на /proc/self/mounts;
    • nologin — наявність цього файлу забороняє користувачам входити до системи із видачею повідомлення у цьому файлі;
    • nsswitch.conf — конфігурація послідовності пошуку імен за різними джерелами, саме тут визначається первинність /etc/hosts;
    • pam.conf, pam.d/ — конфігурація та тека окремих конфігураційних файлів змінних модулів розпізнавання (PAM):
    • password — системні користувачі;
    • profile, profile.d — конфігурація та тека окремих конфігураційних файлів профілю системи для BASH, (виконується після реєстрації;
    • rc.d/, rcN.d/ — загальна тека та теки за рівнями N до системи ініціалізації-запуску init або нових замість неї, часто містить посилання на відповідні сценарії запуску у /etc/init.d;
    • init.d/ — містить сценарії керування сервісами;
    • security/ — містить файли опису безпеки системи:
      • limits.conf — конфігурація лімітів користувачів.
    • sysctl.conf — містить команди для автоматичної ініціалізації системних параметрів ядра;
    • shadow — містить закодовані паролі користувачів;
    • skel/ — шаблон каталогу користувача, вміст копіюється звідси до теки новоствореного користувача;
    • sudoers, sudoers.d — конфігурація та тека окремих конфігураційних файлів системного доступу з привілеями суперкористувача (root) за допомогою sudo.
  • /proc/ — віртуальна ФС віддзеркалення параметрів ядра:
    • sys/ — містить файли із параметрами системи, більша частина допускає модифікацію:
      • kernel/ — містить файли параметрів ядра:
        • hostname — ім'я хосту-системи;
        • osrelease — версія ядра системи;
        • ostype — тип ОС (Linux, *BSD, ...);
        • panic — ознака паніки ядра;
        • version — дата складання ядра.
      • fs/ — мітить файли параметрів ФС:
        • file-max — максимальна кількість відкривуваних файлів.
    • devices — типи пристроїв у системі;
    • modules — модулі підключені до ядра;
    • cpuinfo — інформація о процесорах системи.
  • /home/user/ — домашній каталог користувача user.

2 Процедури

2.1 Використання OpenSSL

openssl rand 5  #Генерація послідовності випадкових байтів
openssl ciphers HIGH  #Запит переліку алгоритмів для вказаного рівня
# Генерація секретного RSA та DSA ключа key.pem, зашифрованого des3
# У якості джерела випадкових даних використовується /var/log/messages
openssl genrsa -out key.pem -des3 -rand /var/log/messages 2048
openssl dsaparam -rand /var/log/messages -out dsaprm 1024
openssl gendsa -out key.pem -idea -rand /var/log/messages dsaprm
# Створення публічного RSA т DSA ключа на основі секретного
openssl rsa -in key.pem -out pubkey.pem -pubout
openssl dsa -in key.pem -out pubkey.pem -pubout
# Зміна паролю та алгоритму шифрування секретного RSA та DSA ключа, видалення паролю та шифрування
openssl rsa -in key.pem -out key1.pem -idea
openssl dsa -in key.pem -out key1.pem -des3
openssl rsa -in key.pem -out key1.pem
# Симетричне шифрування файлу алгоритмом des3 та кодування base64
openssl des3 -in logo.png -out logo.des3
openssl base64 -in logo.des3 -out logo.des3.base64
openssl des3 -a -in logo.png -out logo.des3.base64
# Декодування файлу із base64 та симетричне дешифрування із des3
openssl base64 -d -in logo.des3.base64 -out logo.des3
openssl des3 -d -in logo.des3 -out logo.png
openssl des3 -d -a -in logo.des3.base64 -out logo.png
# Конвертація асиметричних ключів та сертифікатів із формату PEM у DER та назад
openssl x509 -inform PEM -in key.pem -outform DER -out key.cer
openssl rsa -inform PEM -in key.pem -outform DER -out key.der
# Вирахування хешу (md5,sha1 ...)
openssl md5 -c ./logo.png
# Підпис файлу секретним ключем та перевірка ЕЦП публічним ключем, з алгоритмом хешування md5
openssl dgst -sign key.pem -out logo.sign -md5 logo.png
openssl dgst -signature logo.sign -verify pubkey.pem -md5 logo.png
# Асиметричне шифрування файлу із використанням публічного ключа та дешифрування секретним (RSA)
openssl rsautl -in logo.png -out logo.cr -inkey pubkey.pem -pubin -encrypt
openssl rsautl -in logo.cr -out logo.png -inkey key.pem -decrypt
# Створення запиту на сертифікацію (підпис центром сертифікації) на основі створюваного секретного ключа, а потім сертифікату
openssl req -new -key tmp.key -out certreq.csr
openssl x509 -req -in certreq.csr -signkey tmp.key -out cert.pem -days 365
# Створення сертифікату підписаного власним секретним ключем (самопідписаний) та разом із ключем
openssl req -x509 -new -key key.pem -out selfcert.pem -days 365
openssl req -x509 -new -keyout cakey.pem -out cacert.pem -days 365
# Перегляд інформації сертифікату у читабельному вигляді
openssl x509 -in selfcert.pem -noout -text
# Підписування клієнтського сертифікату CA сертифікатом
openssl x509 -req -in client.pem -CA CAcert.pem -CAkey CAkey.pem -CAcreateserial -days 365 -out client1.pem

2.2 Налаштування ssh

#Генерація асиметричного ключа на КЛІЄНТІ у теку "~/.ssh/"
ssh-keygen

#Передавання публічного ключа на віддалений сервер
# МЕТОД 1 — окремо передавання на сервер та окремо реєстрація-авторизація там
scp ~/.ssh/identity.pub {rserver}:~/.ssh/  #КЛІЄНТ: копіювання із клієнту на сервер {rserver}
cat ~/.ssh/identity.pub >> ~/.ssh/authorized_keys  #СЕРВЕР: авторизація власного відкритого ключа на сервері
# МЕТОД 2 — однією командою на КЛІЄНТІ до серверу {rserver}
ssh-copy-id {rserver}

#Підключення до віддаленого серверу {rserver} із КЛІЄНТУ
ssh {rserver}

2.3 Створення, використання та обслуговування програмного RAID — ДЗЕРКАЛА

# Запит стану пристроїв дзеркала
cat /proc/mdstat
# Запит інформації/стану пристрою масиву або розділу
mdadm -Q /dev/sdb1
# Аналіз та отримання поточних пристроїв RAID, зазвичай для /etc/mdadm/mdadm.conf
mdadm --examine --scan
# Створення масиву, "missing" для недоступних розділів на цьому етапі
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 [/dev/sdb1|missing]
# Додання розділу до масиву
mdadm /dev/md0 --add /dev/sdb1
# Зупинка масиву
mdadm -S /dev/md0
# Встановлення ознаки "FAIL" для можливості відключення
mdadm --manage /dev/md0 --fail /dev/sdb1
# Видалення розділу із масиву, на профілактику
mdadm --manage /dev/md0 --remove /dev/sdb1
# Додання розділу до масиву, після заміни
mdadm --manage /dev/md0 --add /dev/sdb1

2.4 Адміністрування віртуальних серверів (VPS) на основі технології OpenVZ

#Створення VPS із шаблону
vzctl create 101 --ostemplate altlinux-4.0 --config vps.basic
#Видалення VPS
vzctl destroy 101
#Отримання переліку всіх VPS
vzlist -a
#Встановлення назви VPS
vzctl set 101 --name vps101 --save
#Встановлення загальних параметрів VPS: onboot, hostname, nameserver, searchdomain, userpassword
vzctl set 101 --onboot yes --save
vzctl set 101 --hostname test101.my.org --save
vzctl set 101 --nameserver 192.168.1.165 --save
vzctl set 101 --searchdomain my.org --save
vzctl set 101 --userpasswd root:test
#Конфігурація venet
vzctl set 101 --ipadd 10.10.186.1 --save
#Конфігурація veth
vzctl set 101 --netif_add eth0 --save
#Запуск та зупинка VPS
vzctl start 101
vzctl stop 101
#Виконання команди всередині VPS ("ls /root")
vzctl exec 101 ls /root
#Адміністративний вхід до VPS
vzctl enter 101
#Встановлення можливостей VPS
vzctl set 101 --capability sys_time:on --save  # можливість зміни системного часу
#Перегляд обмежень VPS та їх порушень
$ vzctl exec 101 cat /proc/user_beancounters
#Встановлення обмежень VPS (kmemsize, lockedpages, privvmpages ...)
$ vzctl set 1 --dgramrcvbuf 1512000:1520000 --save
#Встановлення доступу до пристроїв (/dev)
$ vzctl set 101 --devnodes ttyS0:rw --save
$ vzctl set 101 --devices b:8:16:rw --devices b:8:17:rw --devices b:8:18:rw --save

2.5 Система контролю версій CVS

# Вказання на каталог де знаходиться репозиторій CVS
export CVSROOT=/home/Roman/progects/CVS_R
# Вказання на віддалений репозиторій
export CVSROOT=:pserver:user@serv.comp.org:/CVS_R
# Створення порожнього репозиторію
cvs -d /usr/local/cvsroot init
# Створення порожнього репозиторію на віддаленому сервері
cvs -d:pserver:user@serv.comp.org:/usr/local/cvsroot init
# Імпорт проєкту MyProg від ім'я творця MyName у CVS
cvs import MyProg MyName start
# Експорт проєкту tc для зайняття ним, у результаті чого буде створено каталог "tc" до якого буде розміщено всі файли
cvs -z 3 co tc
# Завантаження дерева проєкту за ревізією(тегом) <revise>
cvs co -r revise Prog
# Синхронізація вхідних текстів з усіма змінами, виконувати перед фіксацією своїх змін
cvs up
# Приведення вмісту дерева у відповідності до ревізії <revise>
cvs up -r revise
# Фіксація змін у backend.c та запуск редактору (ENV: CVSEDITOR) щоб ввести журнальний запис про зміни
cvs ci backend.c -r revise
# Фіксація змін у дереві під ревізією <revise> для цілого дерева
cvs ci -r revise
# Приведення вершини дерева до <revise>
cvs tag revise
# Видалення вашої копії проєкту та перевірка при цьому щодо фіксації всіх ваших змін
cvs release -d tc
# Виведення журналу змін щодо файлу file.cc
cvs log file.cc
# Виведення опису змін внесених зо файлу driver.c
cvs diff driver.c
# Внесення файлу readmi.cc під контроль CVS
cvs add readmi.cc
# Сповіщення CVS про необхідність видалення файлу readmi.cc із репозиторію з наступною командою <ci>
cvs rm readmi.cc

2.6 Система контролю версій Subversion (SVN)

# Отримання вмісту гілки репозиторію
svn list svn://rep.org/trunk
# Завантаження локальної копії репозиторію
svn checkout svn://rep.org/trunk/project
# Отримання стану модифікації локальної копії репозиторію
svn status
# Отримання змін у вигляді латки
svn diff
# Додання файлу або каталогу до репозиторію
svn add ./new.file
# Видалення файлу або каталогу із репозиторію
svn delete ./rem.file
# Прийняття локальних змін та відправлення їх на сервер
svn commit -m "Changes message"
EDITOR=vim svn ci  # або із введенням журналу змін у редакторі
# Вирішення конфліктів — зняття ознаки конфлікту
svn resolve /project/innerfolder
# Копіювання ділянки репозиторію включно із локальними, а також створення нової гілки або тегу
svn copy svn://rep.org/trunk/project svn://rep.org/branch/project_user
# Об'єднання змін гілки вказаної ревізії із локальною копією іншої гілки
svn merge -c 1222 svn://rep.org/trunk/project
# Перегляд історії репозиторію
svn log

2.7 Система контролю версій GIT

# Ініціалізація поточного каталогу як новий порожній репозиторій
git init
# Додання віддаленого репозиторію для завантаження локальної копії
git remote add origin user1@gitserver:/home/repo/alpha.git
# Завантаження локальної копії репозиторію
git clone git://git.server.org/rep.git
# Додання змін, нових файлів та видалення старих
git add .
# Отримання стану репозиторію
git status
# Перегляд внесених змін
git diff --cached
# Прийняття локальних змін — перетворення тимчасового стану індексу у постійний
git commit -am "Changes message"
# Формування GIT-латки прийнятих локальних змін
git format-patch -1
# Вивантаження локальних змін
git push
# Додання тегу
git tag -sm "Tag 0.1.0 message" tag-name-0.1.0
# Вивантаження локальних тегів
git push origin --tags
# Отримання переліку всіх гілок
git branch
# Створення нової гілки
git branch experimental
# Видалення гілки
git branch -d experimental
# Перемикання на іншу гілку
git checkout experimental
# Об'єднання змін у гілці experimental із поточною гілкою локального репозиторію
git merge experimental
# Отримання змін із іншого репозиторію та об'єднання їх із поточним
git pull git://git.server.org/rep.git
# або
git fetch git://git.server.org/rep.git
git merge git://git.server.org/rep.git
# Перегляд історії репозиторію
git log

2.8 Приготування та компіляція проєктів на основі AutoTools

gettextize -f -c  #генерація локалізаційних файлів
autoheader  #генерація файлу
autoscan    #автоматична генерація cofigure.scan та перевірка configure.in
ifnames     #створення переліку ідентифікаторів використовуваних препроцесором

# Генерація/перегенерація складальної системи
aclocal -I -m4  #генерація макросу aclocal.m4
autoconf      #генерація сценарію configure
autoreconf -if  #перегенерація сценарію configure
automake -a -c  #генерація файлу Makefile.in
configure     #генерація Makefile
make          #компіляція проєкту
make install  #встановлення програми

3 Формати основних конфігураційних файлів та сценарії-скрипти

3.1 BASH

  • ls -A /home/${USER} — команда ls із аргументами для виконання безпосередньо у цій оболонці;
  • (ls -A /home/${USER}) — виконання команди ls у іншій підоболонці;
  • . /usr/local/bin/my.sh — виконання команд сценарію із файлу "/usr/local/bin/my.sh";
  • ls -A /home/${USER} & — виконання команди ls у фоні, тобто оболонка виклику одразу звільняється;
  • ls -A /home/${USER} > /var/log/my.log — виконання команди ls із переспрямуванням її виводу до файлу "/var/log/my.log" — усі варіанти переспрямування;
  • !2005 , !ls — виконання рядка 2005 та найближчого рядка що містить "ls" із історії (history);
  • var=My User ${USER} — визначення змінної var у необхідне значення;
  • var=(zero one two three) — визначення змінної var масивом із послідовним його заповненням чотирма елементами;
  • var=([0]=zero [3]=three [2]=two [1]=one) — визначення змінної var масивом із довільним його заповненням чотирма елементами;
  • var[2]=val — визначення змінної var масивом із призначенням елементу 2 значення "val".

3.1.1 Основні елементи граматики команд та визначень

  • команда-визначення; команда-визначення' — розділювач (";");
  • команда && команда' — умовний розділювач ("&&"), який передбачає виконання команди після за умови результату першої ВДАЛА(TRUE)-НЕПОМИЛКА;
  • команда || команда — умовний розділювач ("||"), який передбачає виконання команди після за умови результату першої НЕВДАЛА(FALSE)-ПОМИЛКА;
  • \ — екранування спеціального символу після даного ("\$"), часто використовується у кінці рядка для екранування символу переведення рядка чим продовжуючи рядок на наступному;
  • /home/${USER}, 314 — рядок символів із завершенням на пробілі або табуляції, якщо команда або визначення не вважає початково усе рядком до його переведення; де цілі числа це просто символи до моменту потрапляння у середовище їх обчислення згідно до формату;
  • "рядок символів зі вставками ${USER} та екрануванням \$";
  • 'рядок-літерал символів із забороною підставлення значень змінних та екранування';
  • $'рядок-літерал символів лише із\nзабороною підставлення значень змінних';
  • $var, ${var} — підставлення значення змінної var, форма у дужках застосовується якщо назва змінної складна та зі спеціальними символами; де var також може бути спеціальною змінною, змінною оточення (зовнішня) та щодо якої доступно інші форми підстановки;
  • `ls -1 /home/${USER}`, $(ls -1 /home/${USER}) — виконання команди у виразі із поверненням результату;
  • [ -d /home/${USER}/.config ] — тестові-умовні операції із синтаксисом команди test;
  • $[100/3], $((100/3)) — виконання простих цілочисельних операцій.

Приклади

ls -A /home/${USER}; echo "Very Basic\
 \"long string\"" + 'just string literal';

(ls -A /home/${USER})

x=3.14; y="String"; z='Literal'

echo `ls -1 /home/${USER}` $(ls -1 ${PWD})

ls -1A /home/${USER} | grep .config &> /dev/null && echo OK

[ -d /home/${USER}/.config ] && echo OK

a=4; echo $[a=$a+4] $[a+=4] $[a=a+4]
a=4; echo $[a=$a+4, a+=4, a=a+4]

3.1.2 Службові змінні

  • $# — кількість фактичних аргументів;
  • $- — прапорці (однобуквені), вказані при запуску оболонки або встановлені посередництвом set;
  • $? — код повернення останньої команди;
  • $$, $PPID — ідентифікатор поточного процесу-сценарію (PID);
  • $! — ідентифікатор останнього фонового процесу-сценарію (PID);
  • $* — всі аргументи одним рядком зі змішуванням із підрядками ("під рядок");
  • $@ — всі аргументи окремими рядками;
  • $n, ${n} — аргумент n від 1, де 0 — назва команди.

3.1.3 Підстановки

  • ${array[@]} — звернення одразу до всього масиву array;
  • ${var-default}, ${var=default} — до змінної var підставляється значення default за умови якщо вона невизначена;
  • ${var:-default}, ${var:=default} — до змінної var підставляється значення default за умови якщо вона невизначена або нульова;
  • ${var+alt_val} — до змінної var підставляється альтернативне значення alt_val за умови якщо вона визначена;
  • ${var:+alt_val} — до змінної var підставляється альтернативне значення alt_val за умови якщо вона визначена та непорожня;
  • ${var?error} — сповістити про помилку error та завершити сценарій якщо змінна var невизначена;
  • ${var:?error} — сповістити про помилку error та завершити сценарій якщо змінна var невизначена або нульова;
  • ${#var} — повертає довжину, кількість символів, у змінній var, де передбачено спеціальні форми:
    • ${#*}, ${#@} — кількість аргументів сценарію-функції;
    • ${#array[*]}, ${#array[@]} — кількість елементів у масиві array;
  • ${var:offset:lenght}, ${var:offset} — повертає частину-підрядок від var починаючи із offset та довжиною lenght, де передбачено спеціальні форми та значення:
    • арифметичні вирази у offset та lenght;
    • негативні числа у offset та lenght — відраховується від кінця;
    • ${@:offset:lenght} — аргументи починаючи із offset та кількістю lenght;
    • ${array[@]:offset:lenght}, ${array[*]:offset:lenght} — елементи масиву починаючи із offset та кількістю lenght;
  • ${var#pattern}, ${var##pattern} — видалення зі змінної var найкоротшої та найдовшої частини від початку за шаблоном pattern;
  • ${var%pattern}, ${var%%pattern} — видалення зі змінної var найкоротшої та найдовшої частини від кінця за шаблоном pattern;
  • ${var/pattern/replacement}, ${var//pattern/replacement} — заміна у змінній var одної ділянки або всіх ділянок згідно шаблону шаблоном pattern на значення replacement, або видалення якщо відсутня заміна;
  • ${var/#pattern/replacement} — заміна у змінній var префіксу згідно шаблону шаблоном pattern на значення replacement, або видалення якщо відсутня заміна;
  • ${var/%pattern/replacement} — заміна у змінній var суфіксу згідно шаблону шаблоном pattern на значення replacement, або видалення якщо відсутня заміна;
  • ${!varpref*}, ${!varpref@} — підстановка значень змінних префікс яких відповідає varpref.

3.1.4 Змінні оточення та оболонки

  • PWD — поточний робочий каталог;
  • UID — унікальний ідентифікатор поточного користувача;
  • BASH — повний шлях виклику BASH;
  • BASH_VERSION — версія даного BASH
  • EDITOR — назва текстового редактору використовуваного деякими програмами;
  • SHLVL — рівень вкладення запуску BASH;
  • RANDOM — випадкове число [0...32767];
  • SECONDS — час у секундах від запуску сценарію;
  • HISTCMD — номер поточної команди в історії;
  • PATH — шляхи пошуку команд;
  • HOME — домашня тека поточного користувача;
  • MAIL — назва файлу до якого надходить електронна пошта;
  • LOGNAME — ім'я користувача використане для входу до системи;
  • SHELL — ім'я оболонки інтерпретатору команд;
  • TERM — тип-програма користувацького терміналу;
  • LANG — локаль — мова та країна локалізації інтерфейсу;
  • DISPLAY — адреса дисплею для X-додатків;
  • PS1,PS2 — описують вигляд запрошення у командному рядку;

Системне

  • LD_LIBRARY_PATH — користувацькі шляхи до динамічних бібліотек;
  • LD_PRELOAD — перелік бібліотек попереднього завантаження, часто для перевизначення-перехоплення окремих викликів функцій при налагоджені;
  • MALLOC_ARENA_MAX — максимальна кількість арен виділення пам'яті на потік для динамічного розподілювача MALLOC.

3.1.5 Оператори

  • if умова — умовний оператор, у якому часто використовується команда test як безпосередньо, так і у формі "[ тест ]"
then вираз — тіло виразу виконуваного за умова ВДАЛА(TRUE)-НЕПОМИЛКА
else вираз2 — тіло виразу2 виконуваного за умова НЕВДАЛА(FALSE)-ПОМИЛКА
elif умова2 — поєднання команди "else if умова2"
then вираз3 — --//--
else вираз4 — --//--
elif умова3 — --//--
...
fi — завершення умовного оператору
fi — завершення умовного оператору
fi — завершення умовного оператору
  • Цикли:
for var in перелік — оператор циклу із перебирання елементів переліку у змінній var
while умова — виконання тіла виразу циклу допоки умова ВДАЛА(TRUE)-НЕПОМИЛКА, де часто використовується команда test як безпосередньо, так і у формі "[ тест ]"
do вираз — тіло виразу циклу
break — переривання циклу
continue — продовження циклу на наступній ітерації
done — завершення оператору циклу
  • case зразок in — оператор обрання-перевірки виразу зразку за маскою-шаблоном, через символ "|" може бути вказано декілька масок
маска1) вираз1 ;; — виконання вираз1 за умови відповідності зразку до маска1
...
маскаN) виразN ;; — виконання виразN за умови відповідності зразку до маскаN
esac — завершення оператору перевірки
  • function func() { сценарій } — визначення функції func із тілом сценарій, яка потім викликається так само як і звичайна команда

Приклади

if ls -1A /home/${USER} | grep .config &> /dev/null
then
  echo OK
else
  echo FALSE
fi

if [ -d /home/${USER}/.config ]; then echo OK; fi

for var in "1 2" 3 4 "5" "6 7"
do
  case $var in
    [0-9]) echo "Number $var" ;;
    *) echo "String $var" ;;
  esac
done

function testSeq( ) {
  while [ $# -ge 1 ]; do
    case $1 in
      [0-9]) echo "Number $1" ;;
      *) echo "String $1" ;;
    esac
    shift
  done
}

testSeq "1 2" 3 4 "5" "6 7"

3.1.6 Вбудовані та основні команди

  • echo [рядок...] — запис рядків аргументів до стандартного виводу;
  • true, false — повертають логічний результат ВДАЛА(TRUE)-НЕПОМИЛКА та НЕВДАЛА(FALSE)-ПОМИЛКА відповідно;
  • pwd — отримання ім'я поточної теки;
  • cd [тека] — зміна поточної теки;
  • export назва[=слово]... — встановлення експортної (зовнішнє оточення) змінної назва у значення слово;
  • shift [n] — зсув аргументів командного рядку на n пунктів, для доступу з номером більше 9 та загалом їх сканування;
  • exit [n] — вихід із сценарію з кодом n;
  • test [вираз], [ вираз ] — перевірка умов в умовних операціях та циклах командами виразу;
  • set — встановлення та очищення опцій і позиційних параметрів;
  • unset x — зняття значень та атрибутів змінних та функцій;
  • getopts рядокопцій назва [аргумент...] — отримання опції з назвою із рядокопцій, тобто аргументів сценарію;
  • exec [команда [аргумент ...]] [переспрямування ...] — зміна-запуск команди у поточному процесі оболонки із можливістю переспрямування потоків вводу-виводу;
  • read змінна... — введення зі стандартного вводу до вказаних змінних;
  • eval [аргумент...] — конструювання команди поєднанням аргументів;
  • trap — встановлення обробника сигналів у сценарії;
  • alias [синонім[=рядок]...] — контроль синонімів (псевдоніми або альтернативні назви команд), тобто встановлення синоніму у рядок або відображення значення синоніму за відсутності рядка;
  • unalias синонім... — видалення синонімів (псевдоніми або альтернативні назви команд).

3.1.7 Опції перевірки команди test

  • -e шляхшлях вказує на елемент теки;
  • -d шляхшлях вказує на каталог;
  • -f шляхшлях вказує на звичайний файл;
  • -c шляхшлях вказує на спеціальний символьний файл;
  • -b шляхшлях вказує на спеціальний блоковий файл;
  • -p шляхшлях вказує на спеціальний файл іменованого каналу;
  • -L шляхшлях вказує на символічне посилання;
  • -r шляхшлях вказує на файл із доступом для читання;
  • -w шляхшлях вказує на файл із доступом для запису;
  • -x шляхшлях вказує на виконуваний файл;
  • -s шляхшлях вказує на ненульовий файл;
  • -z рядокрядок порожній;
  • -n рядокрядок непорожній;
  • рядокрядок ненульовий;
  • рядок1 = рядок2рядок1 дорівнює рядок2;
  • рядок1 != рядок2рядок1 не дорівнює рядок2;
  • ціле1 -eq ціле2ціле1 дорівнює ціле2;
  • ціле1 -ne ціле2ціле1 не дорівнює ціле2;
  • ціле1 -gt ціле2ціле1 більше ціле2;
  • ціле1 -lt ціле2ціле1 менше ціле2;
  • ціле1 -ge ціле2ціле1 більше або дорівнює ціле2;
  • ціле1 -le ціле2ціле1 менше або дорівнює ціле2;
  • ! вираз — заперечення-інверсія результату виразу;
  • вираз1 -o вираз2вираз1 АБО вираз2;
  • вираз1 -a вираз2вираз1 ТА вираз2.

3.1.8 Прості цілочисельні операції у формі $[100/3], $((100/3))

  • id++, id-- — постфіксне збільшення/зменшення значення змінної id на 1;
  • ++id, --id — префіксне збільшення/зменшення значення змінної id на 1;
  • -, + — унарні мінус та плюс;
  • !, ~ — логічне та побітове заперечення;
  • *, /, % — множення, ділення, отримання залишку від ділення;
  • ** — зведення у ступінь;
  • +, - — складання, віднімання;
  • <<, >> — побітовий зсув ліворуч та праворуч;
  • <=, >=, <, > — порівняння;
  • ==, != — рівність та нерівність;
  • & — побітове "І";
  • ^ — побітове виключене "АБО";
  • | — побітове "АБО";
  • && — логічне "І";
  • || — логічне "АБО";
  • вир1?вир2:вир3 — умовне обчислення у виразі де за TRUE вир1 обчислюється та повертається результат вир2 інакше вир3;
  • =, *=, /=, %=, +=, ?=+ — привласнення
  • вир1,вир2 — розділювач виразів (","-кома) вир1 та вир2;
  • (вираз) — виокремлення більш пріоритетного виразу та його ділянки.

3.1.9 Переспрямування виводу

  • команда1 | команда2 — спрямувати стандартний вивід STDOUT(1) команда1 у стандартний ввід STDIN(0) команда2 через канал;
  • команда < файл — спрямувати вміст файлу на стандартний ввід STDIN(0) команди;
  • команда > файл — спрямувати стандартний вивід STDOUT(1) у файл, попередньо очистивши його;
  • команда >> файл — спрямувати вивід STDOUT(1) у файл, додаючи дані до нього;
  • команда n> файл — спрямувати вивід із дескриптором n у файл, попередньо очистивши його;
  • команда n>> файл — спрямувати вивід із дескриптором n у файл, додаючи дані до нього;
  • команда &> файл — спрямувати стандартний вивід STDOUT(1) та вивід помилок STDERR(2) у файл, попередньо очистивши його;
  • команда &>> файл — спрямувати стандартний вивід STDOUT(1) та вивід помилок STDERR(2) у файл, додаючи дані до нього;
  • команда <> файл — зв'язати стандартний ввід STDIN(0) та стандартний вивід STDOUT(1) команди із файлом;
  • команда n1>&n2 — приєднати вивід файлу із дескриптором n1 до виводу із дескриптором n2, зазвичай приєднується вивід помилок STDERR(2) до стандартного виводу STDOUT(1) або навпаки;
  • команда << мітка текст-сценарій мітка — безпосередньо у сценарії визначає текст-сценарій та спрямовує його до стандартного вводу STDIN(0), де межі тексту-сценарію визначаються міткою.

3.1.10 Спеціальні символи — екранування

  • \n — новий рядок;
  • \b — повернення на один символ;
  • \c — друк рядка без символу нового рядка;
  • \f — перехід до нової сторінки-екрану;
  • \r — повернення каретки;
  • \t — табуляція;
  • \v — табуляція по вертикалі;
  • \\ — зворотна коса риска;
  • \0nnn, \xNN — вісімкове nnn та шістнадцяткове NN число.
At.png ви побачите ці символи у виводі команди echo з аргументами "-e"

3.1.11 Маски-шаблони

  • * — довільна послідовність символів;
  • ? — довільний один символ;
  • [...] — символ із переліку у дужках ([A-Z]), де перший символ "!" або "^" означає виключення наступних символів.

3.1.12 Представлення чисельних значень

  • 45 — десяткове число, починаючи із числа не "0" та символи [0-9] поспіль;
  • 045 — вісімкове число, починаючи із "0" та символи [0-7] поспіль;
  • 0x45, 0X32 — шістнадцяткове число, починаючи із "0x" або "0X" та символи [0-7a-fA-F] поспіль;
  • основа#N — число N із основою.

Приклади

echo $[45], $[045], $[0x45]
echo $[2#101], $[10#101], $[16#101]
echo $[16#FF], $[16#ff], $[0xFF]
echo $[64**2], $[64#@@]
echo $[64#z], $[64#Z]

3.1.13 Корисні обороти

{cmd} || true # примусове встановлення успішного результату
echo "lang=uk_UA.UTF-8" | cut -d= -f2  # розбір за роздільником-тег '=', елемент 2
echo "123 lang=uk_UA.UTF-8" | grep -o 'lang=[^ ]*' # отримання ділянки тексту/рядка згідно до шаблону
wc -l  # отримання кількості рядків
wc -w  # отримання кількості слів
sed -n 4p  # отримання вказаного рядка
ls -1 /etc  # отримання вмісту каталогу за рядками
head -c8 /dev/random | uuencode -m - | sed -n '2s/=*$//;2p'  # генерація випадкового паролю
var="/some/path/file.txt"; echo ${var##*/} OR `basename $var`  # виділення ім'я файлу із розширенням

...