Unix Shell Scripting Tutorial

Командная оболочка UNIX ( или просто «шелл») — командный интерпретатор, используемый в операционных системах семейства UNIX, в котором пользователь может либо выполнять команды операционной системе по отдельности, либо запускать скрипты, состоящие из списка команд. В первую очередь, под shell понимаются POSIX-совместимые оболочки, восходящие к Bourne shell .

Очень условно, командную оболочку можно рассматривать как "команду" подобную многим другим: who; wc; cat и тд. команда sh запустит оболочку Bourne Shell, bash запустит Bourne Again Shell и тд. и в понимании этого простого факта кроются дополнительные возможности в программировании на Bash, Sh ..... .

Благодаря своей долгой и успешной истории оригинальная оболочка Bourne Shell - sh использовалась и используется для написания множества сценариев оболочки, ко всему прочему надо добавить, что sh это не только одна из семейства оболочек - командных интерпретаторов, прежде всего это стандарт POSIX.

Bash - это оболочка, которая появляется в операционной системе GNU, обычно реализуется поверх ядра Linux и

нескольких других распространенных операционных систем, в первую очередь Mac OS X. Она предлагает функциональные улучшения по сравнению с предыдущими версиями sh.

Хотя Bourne Again Shell - bash включает в себя множество расширений и свойств, которых нет в исходной оболочке Bourne Shell, она поддерживает совместимость с исходной оболочкой Bourne Shell, поэтому сценарии этой оболочки можно запускать под управлением bash.

Внутренние команды

Служебные символы

Переменные и аргументы

Аргументы

Встроенные переменные:

Управляющие символы [^ \] escape sequence

ASCII (American Standard Code for Information Interchange)

От десятичного:

$ echo "33" | awk '{printf "%c\n", $0}'

!

$ echo "36" | awk '{printf "%c\n", $0}'

$

$ echo "37" | awk '{printf "%c\n", $0}'

%

или

$ awk 'BEGIN {printf "%c\n", 33}'

!

$ awk 'BEGIN {printf "%c\n", 36}'

$

$ awk 'BEGIN {printf "%c\n", 37}'

%

От "hex"

$ awk 'BEGIN {print "\x21"}'

!

$ awk 'BEGIN {print "\x24"}'

$

$ awk 'BEGIN {print "\x25"}'

%

От восьмиричного:

$ awk 'BEGIN {print "\041"}'

!

$ awk 'BEGIN {print "\044"}'

$

$ awk 'BEGIN {print "\045"}'

%

Обратно, воспользовавшись ord:

$ echo "!" | awk 'BEGIN{for(n=0;n<256;n++)ord[sprintf("%c",n)]=n}{print ord[$1]}'

33

$ echo "$" | awk 'BEGIN{for(n=0;n<256;n++)ord[sprintf("%c",n)]=n}{print ord[$1]}'

36

$ echo "%" | awk 'BEGIN{for(n=0;n<256;n++)ord[sprintf("%c",n)]=n}{print ord[$1]}'

37

Проще,.в awk имеется команда printf (форматированный вывод), аналог одноименной функции языка С.

В Linux это встроенная команда оболочки, аналог echo, с более замысловатым синтаксисом и более широкими возможностями (aidalinux.ru/w/Printf):

$ type -a printf

printf is a shell builtin

printf is /usr/bin/printf

$


$ printf "%d\n" "'!"

33 # десятичное

$ printf "%o\n" "'!"

41 # восьмиричное

$ printf "%x\n" "'!"

21 # "hex"

Форматирование

BS

Backspace (Возврат на один символ). Указывает на движение механизма печати или курсора дисплея назад на одну позицию.

HT

Horizontal Tabulation (Горизонтальное Табулирование). Указывает на движение механизма печати или курсора дисплея до следующей предписанной 'позиции табуляции'.

LF

Line Feed (Перевод строки). Указывает на движение механизма печати или курсора дисплея к началу следующей строки (на одну строку вниз).

VT

Vertical Tabulation (Вертикальное Табулирование). Указывает на движение механизма печати или курсора дисплея к следующей группе строк.

FF

Form Feed (Перевод страницы). Указывает на движение механизма печати или курсора дисплея к исходной позиции следующей страницы, формы или экрана.

CR

Carriage Return (Перевод каретки). Указывает на движение механизма печати или курсора дисплея к исходной (крайней левой)позиции текущей строки.

Передача данных

SOH

Start of Heading (Начало Заголовка). Используется для указания начала заголовка, который может содержать информацию о маршрутизации или адрес.

STX

Start of Text (Начало Текста). Указывает на начало текста и одновременно на конец заголовка.

ETX

End of Text (Конец Текста). Используется при завершении текста, который был начат с символа STX.

ENQ

Enquiry (Запрос). Запрос идентификационных данных (типа "Кто Вы?") от удаленной станции.

ACK

Acknowledge (Подтверждение). Приемное устройство передает этот символ отправителю в качестве подтверждения успешного приема данных.

NAK

Negative Acknowledgement (Неподтверждение). Приемное устройство передает этот символ отправителю в случае отрицания (неудачи) приема данных.

SYN

Synchronous/Idle (Синхронизация). Используется в синхронизированных системах передачи. В моменты отсутствия передачи данных система непрерывно посылает символы SYN для обеспечения синхронизации.

ETB

End of Transmission Block (Конец Блока Передачи). Указывает на конец блока данных для коммуникационных целей. Используется для разбиения на отдельные блоки больших объемов данных.

Разделительные знаки при передаче информации

FS File Separator (Разделитель файлов).

GS Group Separator (Разделитель групп).

RS Record Separtator (Разделитель записей).

US Unit Separator (Разделитель элементов).

Другие символы

NUL

Null. (No character- нет данных). Используется для передачи в случае отсутствия данных.

BEL

Bell (Звонок). Используется для управления устройствами сигнализации.

SO

Shift Out. Указывает, что все последующие кодовые комбинации должны интерпретироваться согласно внешнему набору символов до прихода символа SI.

SI

Shift In. Указывает, что последующие кодовые комбинации должны интерпретироваться согласно стандартному набору символов.

DLE

Data Link Escape (Переключение). Изменение значения идущих следом символов. Используется для дополнительного контроля или для передачи произвольной комбинации бит.

DC1, DC2, DC3, DC4

Device Controls (Контроль Устройства). Символы для управления вспомогательными устройствами (специальными функциями).

CAN

Cancel (Отмена). Указывает, что данные, который предшествовали этому символу в сообщении или блоке, должны игнорироваться (обычно в случае обнаружения ошибки).

EM

End of Medium (Конец Носителя). Указывает на физический конец ленты или другого носителя информации

SUB

Substitute (Заместитель). Используется для подмены ошибочного или недопустимого символа.

ESC

Escape (Расширение). Используется для расширения кода, указывая на то, что последующий символ имеет альтернативное значение.

(sp) Space (Пробел).

Непечатаемый символ для разделения слов или перемещения механизма печати или курсора дисплея вперед на одну позицию.

DEL

Delete (Удаление). Используется для удаления (стирания) предыдущего знака в сообщении

http://book.itep.ru/10/ascii.htm

Таблица соответствия кодов - представлений чисел.

-----------------------------

Запущенный обычным образом скрипт проработает ровно до тех пор, пока вы залогинены на консоль сервера. При отключении от сервера скрипт автоматически завершится.

Для запуска скрипта без связи с сессией пользователя следует использовать утилиту nohup:

# nohup /srv/tools/script.sh &

В этом случае запущенный скрипт останется работать даже при отключении от сервера, но весь выводимый скриптом текст будет записываться в файл nohup.log, создаваемый в текущем каталоге, о чем nohup непосредственно и информирует сообщением nohup: appending output to nohup.out. При этом данный файл будет создан даже в том случае, если у скрипта никогда не будет никакого вывода.

-------------------------------------------------------------------------------------------------------------------------------

Узнать внешний IP-адрес маршрутизатора, можно командой:

wget -O - -q icanhazip.com

curl -s icanhazip.com

----------------- #!/bin/bash wget -O - -q icanhazip.com line #чтобы окно не закрывалось

-----------------

ICANN

----------------------------------------------------------------------------------------------------------