<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://178.140.10.58:8080/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://178.140.10.58:8080/feed.php">
        <title>Библиотека знаний - bash</title>
        <description>Заметки IT программиста</description>
        <link>http://178.140.10.58:8080/</link>
        <image rdf:resource="http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg" />
       <dc:date>2026-04-17T08:23:44+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=bash:%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_bash._%D1%87%D0%B0%D1%81%D1%82%D1%8C_1"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=bash:%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_bash._%D1%87%D0%B0%D1%81%D1%82%D1%8C_2"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=bash:bash-completion"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=bash:bash"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=bash:developing"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=bash:keys"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg">
        <title>Библиотека знаний</title>
        <link>http://178.140.10.58:8080/</link>
        <url>http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=bash:%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_bash._%D1%87%D0%B0%D1%81%D1%82%D1%8C_1">
        <dc:format>text/html</dc:format>
        <dc:date>2016-03-17T19:14:03+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Основы BASH. Часть 1</title>
        <link>http://178.140.10.58:8080/doku.php?id=bash:%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_bash._%D1%87%D0%B0%D1%81%D1%82%D1%8C_1</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:bash&amp;amp;do=showtag&amp;amp;tag=bash&quot; class=&quot;wikilink1&quot; title=&quot;tag:bash&quot; rel=&quot;tag&quot;&gt;bash&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;основы_bash_часть_1&quot;&gt;Основы BASH. Часть 1&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Безусловно, все те кто общается с ОС Linux хоть раз да имели дело(во всяком случае слышали точно) с командной оболочкой BASH. Но BASH не только командная оболочка, это еще и превосходный скриптовый язык программирования.
Цель этой статьи — познакомить поближе юзеров с bash, рассказать про синтаксис, основные приемы и фишки языка, для того чтобы даже обычный пользователь смог быстренько написать простой скрипт для выполнения ежедневной(-недельной, -месячной) рутинной работы или, скажем, «на коленке» наваять скриптик для бэкапа директории.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0441\u043d\u043e\u0432\u044b BASH. \u0427\u0430\u0441\u0442\u044c 1&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0441\u043d\u043e\u0432\u044b_bash_\u0447\u0430\u0441\u0442\u044c_1&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;15-1041&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;введение&quot;&gt;Введение&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
BASH — Bourne-Again SHell (что может переводится как «перерожденный шел», или «Снова шел Борна(создатель sh)»), самый популярный командный интерпретатор в юниксоподобных системах, в особенности в GNU/Linux. Ниже приведу ряд встроенных команд, которые мы будем использовать для создания своих скриптов.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 break выход из цикла for, while или until
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 continue выполнение следующей итерации цикла for, while или until
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 exit выход из оболочки
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 export отмечает аргументы как переменные для передачи в дочерние процессы в среде
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 kill посылает сигнал завершения процессу
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 pwd выводит текущий рабочий каталог
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 return заставляет функцию оболочки выйти с указанным значением
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 shift перемещает позиционные параметры налево
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 test вычисляет условное выражение
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 trap указывает команды, которые должны выполняться при получении оболочкой сигнала
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 unset вызывает уничтожение переменных оболочки
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 wait ждет выхода из дочернего процесса и сообщает выходное состояние.
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
И конечно же кроме встроенных команд мы будем использовать целую кучу внешних, отдельных команд-программ, с которыми мы познакомимся уже в процессе
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1042-3729&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;что_необходимо_знать_с_самого_начала&quot;&gt;Что необходимо знать с самого начала&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
1. Любой bash-скрипт должен начинаться со строки:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash&lt;/pre&gt;

&lt;p&gt;
в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте(где, вы можете узнать набрав whereis bash) поменяйте её на ваш путь.
2. Коментарии начинаются с символа # (кроме первой строки).
3. В bash переменные не имеют типа(о них речь пойдет ниже)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0427\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0447\u0442\u043e_\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e_\u0437\u043d\u0430\u0442\u044c_\u0441_\u0441\u0430\u043c\u043e\u0433\u043e_\u043d\u0430\u0447\u0430\u043b\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;3730-4424&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;переменные_и_параметры_скрипта&quot;&gt;Переменные и параметры скрипта&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Приведу как пример небольшой пример, который мы разберем:
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;  &lt;span class=&quot;co0&quot;&gt;#!/bin/bash &lt;/span&gt;
  &lt;span class=&quot;co0&quot;&gt;#указываем где у нас хранится bash-интерпретатор &lt;/span&gt;
  &lt;span class=&quot;re2&quot;&gt;parametr1&lt;/span&gt;=&lt;span class=&quot;re4&quot;&gt;$1&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;#присваиваем переменной parametr1 значение первого параметра скрипта&lt;/span&gt;
  &lt;span class=&quot;re2&quot;&gt;script_name&lt;/span&gt;=&lt;span class=&quot;re4&quot;&gt;$0&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;#присваиваем переменной script_name значение имени скрипта&lt;/span&gt;
  &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Вы запустили скрипт с именем &lt;span class=&quot;es2&quot;&gt;$script_name&lt;/span&gt; и параметром &lt;span class=&quot;es2&quot;&gt;$parametr1&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;# команда echo выводит определенную строку, обращение к переменным осуществляется через $имя_переменной.&lt;/span&gt;
  &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;Вы запустили скрипт с именем $script_name и параметром $parametr1&#039;&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;# здесь мы видим другие кавычки, разница в том, что в одинарных кавычках не происходит подстановки переменных.&lt;/span&gt;
  &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;#Выход с кодом 0 (удачное завершение работы скрипта)&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Результат выполнения скрипта:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ite@ite-desktop:~$ ./test.sh qwerty
Вы запустили скрипт с именем ./test.sh и параметром qwerty
Вы запустили скрипт с именем $script_name и параметром $parametr1&lt;/pre&gt;

&lt;p&gt;
После того как мы познакомились как использовать переменные и передавать скрипту параметры, время познакомиться с зарезервированными переменными:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$DIRSTACK - содержимое вершины стека каталогов
$EDITOR - текстовый редактор по умолчанию
$EUID - Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя, в то время как...
$UID - ...содержит реальный идентификатор, который устанавливается только при логине.
$FUNCNAME - имя текущей функции в скрипте.
$GROUPS - массив групп к которым принадлежит текущий пользователь
$HOME - домашний каталог пользователя
$HOSTNAME - ваш hostname
$HOSTTYPE - архитектура машины.
$LC_CTYPE - внутренняя переменная, котороя определяет кодировку символов
$OLDPWD - прежний рабочий каталог
$OSTYPE - тип ОС
$PATH - путь поиска программ
$PPID - идентификатор родительского процесса
$SECONDS - время работы скрипта(в сек.)
$# - общее количество параметров переданных скрипту
$* - все аргументы переданыне скрипту(выводятся в строку)
$@ - тоже самое, что и предыдущий, но параметры выводятся в столбик
$! - PID последнего запущенного в фоне процесса
$$ - PID самого скрипта&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435_\u0438_\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b_\u0441\u043a\u0440\u0438\u043f\u0442\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;4425-8063&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;условия&quot;&gt;Условия&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Условные операторы, думаю, знакомы практически каждому, кто хоть раз пытался на чем-то писать программы. В bash условия пишутся след. образом (как обычно на примере):
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;  &lt;span class=&quot;co0&quot;&gt;#!/bin/bash&lt;/span&gt;
  &lt;span class=&quot;re2&quot;&gt;source&lt;/span&gt;=&lt;span class=&quot;re4&quot;&gt;$1&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;#в переменную source засовываем первый параметр скрипта&lt;/span&gt;
  &lt;span class=&quot;re2&quot;&gt;dest&lt;/span&gt;=&lt;span class=&quot;re4&quot;&gt;$2&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;#в переменную dest засовываем второй параметр скрипта&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$source&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$dest&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;# в ковычках указываем имена переменных для сравнения. -eq - логическое сравнение обозначающие &amp;quot;равны&amp;quot;  &lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;# если они действительно равны, то  &lt;/span&gt;
  &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Применик &lt;span class=&quot;es2&quot;&gt;$dest&lt;/span&gt; и источник &lt;span class=&quot;es2&quot;&gt;$source&lt;/span&gt; один и тот же файл!&amp;quot;&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;#выводим сообщение об ошибке, т.к. $source и $dest у нас равны  &lt;/span&gt;
  &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;# выходим с ошибкой (1 - код ошибки)    &lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;# если же они не равны&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;cp&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$source&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$dest&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;# то выполняем команду cp: копируем источник в приемник  &lt;/span&gt;
  &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Удачное копирование!&amp;quot;&lt;/span&gt;  
  &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt; &lt;span class=&quot;co0&quot;&gt;#обозначаем окончание условия.&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Результат выполнения скрипта:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ite@ite-desktop:~$ ./primer2.sh 1 1
Применик 1 и источник 1 один и тот же файл!
ite@ite-desktop:~$ ./primer2.sh 1 2
Удачное копирование!&lt;/pre&gt;

&lt;p&gt;
Структура if-then-else используется следующим образом:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;if &amp;lt;команда или набор команд возвращающих код возврата(0 или 1)&amp;gt;
then
&amp;lt;если выражение после if истино, то выполняется этот блок&amp;gt;
else
&amp;lt;если выражение после if ложно, тот этот&amp;gt;&lt;/pre&gt;
&lt;pre class=&quot;code&quot;&gt;В качестве команд возвращающих код возврата могут выступать структуры [[ , [ , test, (( )) или любая другая(или несколько) linux-команда.&lt;/pre&gt;
&lt;pre class=&quot;code&quot;&gt;test - используется для логического сравнения. после выражения, необходима закрывающая скобка &amp;quot;]&amp;quot;
[ - синоним команды test
[[ - расширенная версия &amp;quot;[&amp;quot; (начиная с версии 2.02)(как в примере), внутри которой могут быть использованы || (или), &amp;amp; (и). Должна иметь закрывающую скобку &amp;quot;]]&amp;quot;
(( )) - математическое сравнение&lt;/pre&gt;

&lt;p&gt;
для построения многоярусных условий вида:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;if ...
then ....
else
if ....
then....
else ....&lt;/pre&gt;

&lt;p&gt;
для краткости и читаемости кода, можно использовать структуру:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;if ..
then ...
elif ...
then ...
elif ...&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0441\u043b\u043e\u0432\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0441\u043b\u043e\u0432\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;8064-11231&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;условия_множественный_выбор&quot;&gt;Условия. Множественный выбор&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Если необходимо сравнивать какоую-то одну переменную с большим количеством параметров, то целесообразней использовать оператор case.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash
echo &amp;quot;Выберите редатор для запуска:&amp;quot;
echo &amp;quot;1 Запуск программы nano&amp;quot;
echo &amp;quot;2 Запуск программы vi&amp;quot;
echo &amp;quot;3 Запуск программы emacs&amp;quot;
echo &amp;quot;4 Выход&amp;quot;
read doing #здесь мы читаем в переменную $doing со стандартного ввода

case $doing in

1)

 /usr/bin/nano # если $doing содержит 1, то запустить nano

 ;;

2)

 /usr/bin/vi # если $doing содержит 2, то запустить vi

 ;;

3)

 /usr/bin/emacs # если $doing содержит 3, то запустить emacs

 ;;

4)

 exit 0

 ;;

*) #если введено с клавиатуры то, что в case не описывается, выполнять следующее:

 echo &amp;quot;Введено неправильное действие&amp;quot;

esac #окончание оператора case.&lt;/pre&gt;

&lt;p&gt;
Результат работы:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$ ./menu2.sh
Выберите редатор для запуска:
1 Запуск программы nano
2 Запуск программы vi
3 Запуск программы emacs
4 Выход&lt;/pre&gt;

&lt;p&gt;
После выбор цифры и нажатия Enter запуститься тот редактор, который вы выбрали(если конечно все пути указаны правильно, и у вас установлены эти редакторы :) )
&lt;/p&gt;

&lt;p&gt;
Прведу список логических операторв, которые используются для конструкции if-then-else-fi:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;  -z # строка пуста
  -n # строка не пуста
  =, (==) # строки равны
  != # строки неравны
  -eq # равно
  -ne # неравно
  -lt,(&amp;lt; ) # меньше
  -le,(&amp;lt;=) # меньше или равно
  -gt,(&amp;gt;) #больше
  -ge,(&amp;gt;=) #больше или равно
  ! #отрицание логического выражения
  -a,(&amp;amp;&amp;amp;) #логическое «И»
  -o,(||) # логическое «ИЛИ»&lt;/pre&gt;

&lt;p&gt;
С основами языка и условиями мы разобрались, чтобы не перегружать статью, разобью её на несколько частей(допустим на 3). Во второй части разберем операторы цикла и выполнение математических операций.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=bash:%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_bash._%D1%87%D0%B0%D1%81%D1%82%D1%8C_2&quot; class=&quot;wikilink1&quot; title=&quot;bash:основы_bash._часть_2&quot; data-wiki-id=&quot;bash:основы_bash._часть_2&quot;&gt;Основы BASH. Часть 2.&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0441\u043b\u043e\u0432\u0438\u044f. \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0441\u043b\u043e\u0432\u0438\u044f_\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439_\u0432\u044b\u0431\u043e\u0440&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;11232-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=bash:%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_bash._%D1%87%D0%B0%D1%81%D1%82%D1%8C_2">
        <dc:format>text/html</dc:format>
        <dc:date>2015-09-25T09:38:55+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Основы BASH. Часть 2.</title>
        <link>http://178.140.10.58:8080/doku.php?id=bash:%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_bash._%D1%87%D0%B0%D1%81%D1%82%D1%8C_2</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:bash&amp;amp;do=showtag&amp;amp;tag=bash&quot; class=&quot;wikilink1&quot; title=&quot;tag:bash&quot; rel=&quot;tag&quot;&gt;bash&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;основы_bash_часть_2&quot;&gt;Основы BASH. Часть 2.&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0441\u043d\u043e\u0432\u044b BASH. \u0427\u0430\u0441\u0442\u044c 2.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0441\u043d\u043e\u0432\u044b_bash_\u0447\u0430\u0441\u0442\u044c_2&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;15-63&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;основы_bash_часть&quot;&gt;Основы BASH. Часть&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Извиняюсь за такую большую задержку между статьями, но сессия дает о себе знать в самый неподходящий момент :)
Всем спасибо за замечания, критику и дополнения, которые были озвучены в комментариях к прошлой статье.
Эта часть, как и обещал, будет посвящена циклам, математическим операциям и использованию внешних команд.
Начнем.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0441\u043d\u043e\u0432\u044b BASH. \u0427\u0430\u0441\u0442\u044c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0441\u043d\u043e\u0432\u044b_bash_\u0447\u0430\u0441\u0442\u044c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;64-707&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;циклы_цикл_for-in&quot;&gt;Циклы. Цикл for-in.&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Оператор for-in предназначен для поочередного обращения к значениям перечисленным в списке. Каждое значение поочередно в списке присваивается переменной.
Синтаксис следующий:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;for переменная in список_значений

do

 команды

done&lt;/pre&gt;

&lt;p&gt;
Рассмотрим небольшой пример:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash
for i in 0 1 2 3 4 #переменной $i будем поочередно присваивать значения от 0 до 4 включительно
do
 echo &amp;quot;Console number is $i&amp;quot; &amp;gt;&amp;gt; /dev/pts/$i #Пишем в файл /dev/pts/$i(файл виртуального терминала) строку &amp;quot;Console number is $i&amp;quot;
done #цикл окончен
exit 0&lt;/pre&gt;
&lt;pre class=&quot;code&quot;&gt;После выполнения примера в первых 5 виртуальных консолях(терминалах) появится строка с её номером. В переменную $i поочередно подставляются значения из списка и в цикле идет работа со значением этой переменной&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0426\u0438\u043a\u043b\u044b. \u0426\u0438\u043a\u043b for-in.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0446\u0438\u043a\u043b\u044b_\u0446\u0438\u043a\u043b_for-in&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;708-2004&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;циклы_цикл_while&quot;&gt;Циклы. Цикл while.&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Цикл while сложнее цикла for-in и используется для повторения команд, пока какое-то выражение истинно( код возврата = 0).
Синтаксис оператора следующий:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;while выражение или команда возвращающая код возврата

do

команды

done&lt;/pre&gt;

&lt;p&gt;
Пример работы цикла рассмотрим на следующем примере:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash

again=yes #присваиваем значение &amp;quot;yes&amp;quot; переменной again

while [ &amp;quot;$again&amp;quot; = &amp;quot;yes&amp;quot; ] #Будем выполнять цикл, пока $again будет равно &amp;quot;yes&amp;quot;

 do

 echo &amp;quot;Please enter a name:&amp;quot;

 read name

 echo &amp;quot;The name you entered is $name&amp;quot;
echo &amp;quot;Do you wish to continue?&amp;quot;

 read again

done

echo &amp;quot;Bye-Bye&amp;quot;&lt;/pre&gt;

&lt;p&gt;
А теперь результат работы скрипта:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$ ./bash2_primer1.sh
Please enter a name:
ite
The name you entered is ite
Do you wish to continue?
yes
Please enter a name:
mihail
The name you entered is mihail
Do you wish to continue?
no
Bye-Bye&lt;/pre&gt;

&lt;p&gt;
Как видим цикл выполняется до тех пор, пока мы не введем что-то отличное от «yes». Между do и done можно описывать любые структуры, операторы и т.п., все они будут выполнятся в цикле.Но следует быть осторожным с этим циклом, если вы запустите на выполнение в нём какую-либо команду, без изменения переменной выражения, вы можете попасть в бесконечный цикл.
Теперь об условии истинности. После while, как и в условном операторе if-then-else можно вставлять любое выражение или команду, которая возвращает код возврата, и цикл будет исполнятся до тех пор, пока код возврата = 0! Оператор &amp;quot;[&amp;quot; аналог команды test, которая проверяет истинность условия, которое ей передали.
&lt;/p&gt;

&lt;p&gt;
Рассмотрим еще один пример, я взял его из книги Advanced Bash scripting. Уж очень он мне понравился :), но я его немного упростил. В этом примере мы познакомимся с еще одним типом циклов UNTIL-DO. Эта практически полный аналог цикла WHILE-DO, только выполняется пока какое-то выражение ложно.
Вот пример:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash

echo &amp;quot;Введите числитель: &amp;quot;

read dividend

echo &amp;quot;Введите знаменатель: &amp;quot;

read divisor



dnd=$dividend #мы будем изменять переменные dividend и divisor,

 #сохраним их знания в других переменных, т.к. они нам

 #понадобятся

dvs=$divisor

remainder=1



until [ &amp;quot;$remainder&amp;quot; -eq 0 ]

 do

 let &amp;quot;remainder = dividend % divisor&amp;quot;

 dividend=$divisor 

 divisor=$remainder

done 



echo &amp;quot;НОД чисел $dnd и $dvs = $dividend&amp;quot; &lt;/pre&gt;

&lt;p&gt;
Результат выполнения скрипта:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$ ./bash2_primer3.sh

Введите числитель:

100

Введите знаменатель:

90

НОД чисел 100 и 90 = 10&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0426\u0438\u043a\u043b\u044b. \u0426\u0438\u043a\u043b while.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0446\u0438\u043a\u043b\u044b_\u0446\u0438\u043a\u043b_while&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2005-5795&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;математические_операции&quot;&gt;Математические операции&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Команда let.
Команда let производит арифметические операции над числами и переменными.
Рассмотрим небольшой пример, в котором мы производим некоторые вычисления над введенными числами:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#!/bin/bash
echo &amp;quot;Введите a: &amp;quot;
read a
echo &amp;quot;Введите b: &amp;quot;
read b
let &amp;quot;c = a + b&amp;quot; #сложение
echo &amp;quot;a+b= $c&amp;quot;
let &amp;quot;c = a / b&amp;quot; #деление
echo &amp;quot;a/b= $c&amp;quot;
let &amp;quot;c &amp;lt;&amp;lt;= 2&amp;quot; #сдвигает c на 2 разряда влево
echo &amp;quot;c после сдвига на 2 разряда: $c&amp;quot;
let &amp;quot;c = a % b&amp;quot; # находит остаток от деления a на b
echo &amp;quot;$a / $b. остаток: $c &amp;quot;&lt;/pre&gt;

&lt;p&gt;
Результат выполнения:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$ ./bash2_primer2.sh
Введите a:
123
Введите b:
12
a+b= 135
a/b= 10
c после сдвига на 2 разряда: 40
123 / 12. остаток: 3&lt;/pre&gt;

&lt;p&gt;
Ну вот, как видите ничего сложного, список математических операций стандартный:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;+ — сложение
— — вычитание
* — умножение
/ — деление
** — возведение в степень
% — модуль(деление по модулю), остаток от деления
let позволяет использовать сокращения арифметических команд, тем самым сокращая кол-во используемых переменных. Например: a = a+b эквивалентно a +=b и т.д&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435_\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;5796-7522&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;работа_с_внешними_программами_при_написании_shell-скриптов&quot;&gt;Работа с внешними программами при написании shell-скриптов&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Для начала немного полезной теории.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 shell-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0430\u0431\u043e\u0442\u0430_\u0441_\u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438_\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438_\u043f\u0440\u0438_\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438_shell-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;7523-7707&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;перенаправление_потоков&quot;&gt;Перенаправление потоков.&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
В bash(как и многих других оболочках) есть встроенные файловые дескрипторы: 0 (stdin), 1 (stdout), 2 (stderr).
stdout — Стандартный вывод. Сюда попадает все что выводят программы
stdin — Стандартный ввод. Это все что набирает юзер в консоли
stderr — Стандартный вывод ошибок. 
Для операций с этими дескрипторами, существуют специальные символы: &amp;gt; (перенаправление вывода), &amp;lt; (перенаправление ввода). Оперировать ими не сложно. Например:
cat /dev/random &amp;gt; /dev/null
перенаправить вывод команды cat /dev/random в /dev/null (абсолютно бесполезная операция :)) ) или
ls -la &amp;gt; listing
записать в файл listing содержание текущего каталога (уже полезней)
Если есть необходимость дописывать в файл(при использовании &amp;quot;&amp;gt;&amp;quot; он заменятеся), необходимо вместо &amp;quot;&amp;gt;&amp;quot; использовать &amp;quot;»&amp;quot;
sudo &amp;lt; my_password
после просьбы sudo ввести пароль, он возьмется из файла my_password, как будто вы его ввели с клавиатуры.
Если необходимо записать в файл только ошибки, которые могли возникнуть при работе программы, то можно использовать:
./program_with_error 2&amp;gt; error_file
цифра 2 перед &amp;quot;&amp;gt;&amp;quot; означает что нужно перенаправлять все что попадет в дескриптор 2(stderr).
Если необходимо заставить stderr писать в stdout, то это можно можно след. образом:
./program_with_error 2&amp;gt;&amp;amp;1
символ &amp;quot;&amp;amp;&amp;quot; означает указатель на дескриптор 1(stdout)
(Поумолчанию stderr пишет на ту консоль, в котрой работает пользователь(вренее пишет на дисплей)).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435_\u043f\u043e\u0442\u043e\u043a\u043e\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;7708-10073&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;конвееры&quot;&gt;2.Конвееры.&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Конвеер — очень мощный инструмент для работы с консолью Bash. Синтаксис простой:
команда1 | команда 2  — означает, что вывод команды 1 передастся на ввод команде 2
Конвееры можно группировать в цепочки и выводить с помощью перенаправления в файл, например:
ls -la | grep «hash» |sort &amp;gt; sortilg_list
вывод команды ls -la передается команде grep, которая отбирает все строки, в которых встретится слово hash, и передает команде сортировке sort, которая пишет результат в файл sorting_list. Все довольно понятно и просто.
&lt;/p&gt;

&lt;p&gt;
Чаще всего скрипты на Bash используются в качестве автоматизации каких-то рутинных операций в консоли, отсюда иногда возникает необходимость в обработке stdout одной команды и передача на stdin другой команде, при этом результат выполнения одной команды должен быть неким образом обработан. В этом разделе я постораюсь объяснить основные принципы работы с внешними командами внутри скрипта. Думаю что примеров я привел достаточно и можно теперь писать только основные моменты.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;2.\u041a\u043e\u043d\u0432\u0435\u0435\u0440\u044b.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043d\u0432\u0435\u0435\u0440\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;10074-11849&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;передача_вывода_в_переменную&quot;&gt;1. Передача вывода в переменную.&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Для того чтобы записать в переменную вывод какой-либо команды, достаточно заключить команду в `` ковычки, например
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;a = `echo &amp;quot;qwerty&amp;quot;`
echo $a&lt;/pre&gt;

&lt;p&gt;
Результат работы: qwerty
&lt;/p&gt;

&lt;p&gt;
Однако если вы захотите записать в переменную список директорий, то необходимо, должным образом обработать результат для помещения данных в переменную. Рассмотрим небольшой, пример:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;LIST=`find /svn/ -type d 2&amp;gt;/dev/null| awk &amp;#039;{FS=&amp;quot;/&amp;quot;} {print $4}&amp;#039;| sort|uniq | tr &amp;#039;\n&amp;#039; &amp;#039; &amp;#039;`

for ONE_OF_LIST in $LIST

do

 svnadmin hotcopy /svn/$ONE_OF_LIST /svn/temp4backup/$ONE_OF_LIST

done&lt;/pre&gt;

&lt;p&gt;
Здесь мы используем цикл for-do-done для архивирование всех директорий в папке /svn/ с помощью команды svnadmin hotcopy(что в нашем случае не имеет никого значения, просто как пример). Наибольшй интерес вызывает строка: 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;LIST=`find /svn/ -type d 2&amp;gt;/dev/null| awk &amp;#039;{FS=&amp;quot;/&amp;quot;} {print $4}&amp;#039;| sort|uniq | tr &amp;#039;\n&amp;#039; &amp;#039; &amp;#039;`&lt;/pre&gt;

&lt;p&gt;
В ней переменной LIST присваивается выполнение команды find, обработанной командами awk, sort, uniq,tr(все эти команды мы рассматривать не будем, ибо это отдельная статья). В переменной LIST будут имена всех каталогов в папке /svn/ пгомещенных в одну строку(для того чтобы её стравить циклу.
&lt;/p&gt;

&lt;p&gt;
Как видно, все не сложно, достаточно понять принцип и написать пару своих скриптов. В заключении статьи хочу пожелать удачи в изучении BASH и Linux в целом. Критика, как водится приветствуется. Следующая статья возможно будет посвещена использованию таких программ как sed, awk.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=bash:%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_bash._%D1%87%D0%B0%D1%81%D1%82%D1%8C_1&quot; class=&quot;wikilink1&quot; title=&quot;bash:основы_bash._часть_1&quot; data-wiki-id=&quot;bash:основы_bash._часть_1&quot;&gt;Основы BASH. Часть 1&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;1. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430_\u0432\u044b\u0432\u043e\u0434\u0430_\u0432_\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;11850-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=bash:bash-completion">
        <dc:format>text/html</dc:format>
        <dc:date>2018-01-30T00:06:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Автодополнение Bash</title>
        <link>http://178.140.10.58:8080/doku.php?id=bash:bash-completion</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:bash&amp;amp;do=showtag&amp;amp;tag=bash&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:bash&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; bash&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:shell&amp;amp;do=showtag&amp;amp;tag=shell&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:shell&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; shell&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:bash_completion&amp;amp;do=showtag&amp;amp;tag=bash_completion&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:bash_completion&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; bash completion&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;автодополнение_bash&quot;&gt;Автодополнение Bash&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 Bash&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435_bash&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;37-85&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;bash-it&quot;&gt;bash-it&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;bash-it&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;bash-it&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;86-106&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;установка&quot;&gt;Установка&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;107-136&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;настройка&quot;&gt;Настройка&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;137-167&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;скрипты&quot;&gt;Скрипты&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://github.com/Bash-it/bash-it&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/Bash-it/bash-it&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/Bash-it/bash-it&lt;/a&gt; (Вдохновлен &lt;a href=&quot;http://ohmyz.sh/&quot; class=&quot;urlextern&quot; title=&quot;http://ohmyz.sh/&quot; rel=&quot;ugc nofollow&quot;&gt;Oh My ZSH&lt;/a&gt;)
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043a\u0440\u0438\u043f\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043a\u0440\u0438\u043f\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;168-288&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;статьи&quot;&gt;Статьи&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://habrahabr.ru/post/115886/&quot; class=&quot;urlextern&quot; title=&quot;http://habrahabr.ru/post/115886/&quot; rel=&quot;ugc nofollow&quot;&gt;Использование bash completion в командной строке, собственных скриптах и приложениях.&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0442\u0430\u0442\u044c\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0442\u0430\u0442\u044c\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;289-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=bash:bash">
        <dc:format>text/html</dc:format>
        <dc:date>2018-08-07T21:58:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title></title>
        <link>http://178.140.10.58:8080/doku.php?id=bash:bash</link>
        <description>&lt;div class=&quot;noteredirect&quot;&gt;Страница была перемещена по адресу &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=shell:bash&quot; class=&quot;wikilink1&quot; title=&quot;shell:bash&quot; data-wiki-id=&quot;shell:bash&quot;&gt;bash&lt;/a&gt;.&lt;/div&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=bash:developing">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-24T12:36:54+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Bash</title>
        <link>http://178.140.10.58:8080/doku.php?id=bash:developing</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:bash&amp;amp;do=showtag&amp;amp;tag=bash&quot; class=&quot;wikilink1&quot; title=&quot;tag:bash&quot; rel=&quot;tag&quot;&gt;bash&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:developing&amp;amp;do=showtag&amp;amp;tag=developing&quot; class=&quot;wikilink1&quot; title=&quot;tag:developing&quot; rel=&quot;tag&quot;&gt;developing&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:develop&amp;amp;do=showtag&amp;amp;tag=develop&quot; class=&quot;wikilink1&quot; title=&quot;tag:develop&quot; rel=&quot;tag&quot;&gt;develop&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;bash&quot;&gt;Bash&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Bash&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;bash&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;34-53&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;файлы_конфигурацииprofile_bash_profile_и_bashrc_итд&quot;&gt;Файлы конфигурации: .profile .bash_profile и .bashrc итд&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0424\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438: .profile .bash_profile \u0438 .bashrc \u0438\u0442\u0434&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0444\u0430\u0439\u043b\u044b_\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438profile_bash_profile_\u0438_bashrc_\u0438\u0442\u0434&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;54-144&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;в_чем_отличие_bash_profile_и_bashrc&quot;&gt;В чем отличие .bash_profile и .bashrc?&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
.bash_profile загружается только при входе пользователя в систему (консольный вход, ssh), 
в то время как  .bashrc запускается для интерактивных сервисов выполняемых без
логина (запуск xterm).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412 \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0435 .bash_profile \u0438 .bashrc?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432_\u0447\u0435\u043c_\u043e\u0442\u043b\u0438\u0447\u0438\u0435_bash_profile_\u0438_bashrc&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;145-530&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;переменные_и_параметры&quot;&gt;Переменные и параметры&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit5&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt;$$	&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;pid текущего shell (самого процесса-сценария)&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt;$!	&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;pid последнего процесса в фоновом режиме&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt;$?	&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;код возврата последнего процесса (функции или скрипта)&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt;$x	&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;где x — номер параметра, переданного скрипту ($1, $2 и т. д., $0 — последний запущенный скрипт)&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt;$#	&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;количество аргументов командной строки&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt;$*	&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;все аргументы в виде одной строки (слова)&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt;$@	&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;то же самое, что и $*, но при этом каждый параметр представлен как отдельная строка (слово)&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt;$-	&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;список флагов, переданных сценарию&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt;$_	&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;содержит последний аргумент предыдущей команды&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;588-1519&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435_\u0438_\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;531-1520&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;потоки_вывода_и_файловые_дескрипторы&quot;&gt;Потоки вывода и файловые дескрипторы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 du -h 1 &amp;gt; ./log 2&amp;gt;&amp;amp;1
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;table sectionedit7&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;Наименование&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Описание&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;1&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Поток вывода&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;2&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Поток ошибок&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&amp;amp;1&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;обозначает файловый дескриптор 1&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;1629-1796&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u043e\u0442\u043e\u043a\u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u043e\u0442\u043e\u043a\u0438_\u0432\u044b\u0432\u043e\u0434\u0430_\u0438_\u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435_\u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1521-1798&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;конструкции&quot;&gt;Конструкции&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;1799-1834&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;section09&quot;&gt;0-9&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;0-9&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;section09&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;1835-1850&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;a&quot;&gt;A&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;A&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;1851-1865&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;массивы&quot;&gt;Массивы&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;re2&quot;&gt;array&lt;/span&gt;=&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; one two three &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;files&lt;/span&gt;=&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/passwd&amp;quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/group&amp;quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/hosts&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;limits&lt;/span&gt;=&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;26&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;39&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041c\u0430\u0441\u0441\u0438\u0432\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043c\u0430\u0441\u0441\u0438\u0432\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;1866-2015&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit12&quot; id=&quot;argv&quot;&gt;ARGV&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# ------------- SCRIPT ------------- #&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;#!/bin/bash&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;# arguments called with ----&amp;gt;  &lt;span class=&quot;es3&quot;&gt;${@}&lt;/span&gt;     &amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;# &lt;span class=&quot;es1&quot;&gt;\$&lt;/span&gt;1 ----------------------&amp;gt;  $1       &amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;# &lt;span class=&quot;es1&quot;&gt;\$&lt;/span&gt;2 ----------------------&amp;gt;  $2       &amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;# path to me ---------------&amp;gt;  &lt;span class=&quot;es3&quot;&gt;${0}&lt;/span&gt;     &amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;# parent path --------------&amp;gt;  &lt;span class=&quot;es3&quot;&gt;${0%/*}&lt;/span&gt;  &amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;# my name ------------------&amp;gt;  &lt;span class=&quot;es3&quot;&gt;${0##*/}&lt;/span&gt; &amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# ------------- CALLED ------------- #&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Notice on the next line, the first argument is called within double, &lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# and single quotes, since it contains two words&lt;/span&gt;
&amp;nbsp;
$  &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;misc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;shell_scripts&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;check_root&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;show_parms.sh &lt;span class=&quot;st0&quot;&gt;&amp;quot;&#039;hello there&#039;&amp;quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&#039;william&#039;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# ------------- RESULTS ------------- #&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# arguments called with ---&amp;gt;  &#039;hello there&#039; &#039;william&#039;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# $1 ----------------------&amp;gt;  &#039;hello there&#039;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# $2 ----------------------&amp;gt;  &#039;william&#039;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# path to me --------------&amp;gt;  /misc/shell_scripts/check_root/show_parms.sh&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# parent path -------------&amp;gt;  /misc/shell_scripts/check_root&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# my name -----------------&amp;gt;  show_parms.sh&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# ------------- END ------------- #&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;ARGV&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;argv&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;2016-3043&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;b&quot;&gt;B&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;B&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;3044-3057&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit14&quot; id=&quot;c&quot;&gt;C&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;C&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;3058-3072&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;case&quot;&gt;case&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;case &amp;quot;$1&amp;quot; in
start)
esac&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;case&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;case&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;3073-3129&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;cut&quot;&gt;cut&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
микропрограмма для работы с текстом
&lt;/p&gt;

&lt;p&gt;
Параметры:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 -d
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 -f(число)
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
Переименовывает все файлы вида thread_1_seq_35970.1752.876204343 в файлы вида arch_1_0000035970_869578613.arc
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;#! /bin/bash&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;FOUND&lt;/span&gt;=&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; filename &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$filename&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-q&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;thread_1_seq_&amp;quot;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$FOUND&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;re2&quot;&gt;part&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$filename&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;cut&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;_&amp;quot;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-f4&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;cut&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;.&amp;quot;&lt;/span&gt; -f1&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;mv&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$filename&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;arch_1_00000&lt;span class=&quot;es3&quot;&gt;${part}&lt;/span&gt;_869578613.arc&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;cut&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;cut&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;3130-3669&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit17&quot; id=&quot;d&quot;&gt;D&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;D&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;d&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;3670-3685&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit18&quot; id=&quot;debug&quot;&gt;debug&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Необходимо добавить параметр -x
Пример:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;# bash -x script.sh&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;debug&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;debug&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;3686-3808&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit19&quot; id=&quot;dialog&quot;&gt;dialog&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Представляет из себя интерфейс для библиотеки ncurses. И позволяет строить диалоги из скрипта. Альтернативой dialog может служить whiptail, который даже присутствует в некоторых системах по умолчанию.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=system:dialog&quot; class=&quot;wikilink1&quot; title=&quot;system:dialog&quot; data-wiki-id=&quot;system:dialog&quot;&gt;Dialog&lt;/a&gt;
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;#!/usr/bin/bash&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re2&quot;&gt;Choice&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;$Dialog&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;--stdout&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;--clear&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;--menu&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Выберите файл&amp;quot;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;71&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;14&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$Spisok&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;
&lt;span class=&quot;re2&quot;&gt;retval&lt;/span&gt;=&lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$retval&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt;
    &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;esac&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;dialog&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;dialog&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:19,&amp;quot;range&amp;quot;:&amp;quot;3809-4360&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit20&quot; id=&quot;e&quot;&gt;E&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;E&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;e&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:20,&amp;quot;range&amp;quot;:&amp;quot;4361-4374&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit21&quot; id=&quot;f&quot;&gt;F&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;F&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:21,&amp;quot;range&amp;quot;:&amp;quot;4375-4389&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit22&quot; id=&quot;function&quot;&gt;function&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;function&lt;/span&gt; f1&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
	&lt;span class=&quot;co0&quot;&gt;# params $1&lt;/span&gt;
	&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$1&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
f1 A&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;function&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;function&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:22,&amp;quot;range&amp;quot;:&amp;quot;4390-4475&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit23&quot; id=&quot;foreach&quot;&gt;foreach&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; fn &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;cat&lt;/span&gt; filenames.txt&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;the next file is &lt;span class=&quot;es2&quot;&gt;$fn&lt;/span&gt;&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$fn&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; filename
&lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Printing: &lt;span class=&quot;es2&quot;&gt;$filename&lt;/span&gt;&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$filename&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt; filenames.txt&lt;/pre&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; fn &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;cat&lt;/span&gt; filenames.txt; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$fn&lt;/span&gt;&amp;quot;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es3&quot;&gt;${arrayName[@]}&lt;/span&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
   :
   &lt;span class=&quot;co0&quot;&gt;# do whatever on $i&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;foreach&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;foreach&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:23,&amp;quot;range&amp;quot;:&amp;quot;4476-4866&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit24&quot; id=&quot;g&quot;&gt;G&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;G&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;g&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:11,&amp;quot;secid&amp;quot;:24,&amp;quot;range&amp;quot;:&amp;quot;4867-4880&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit25&quot; id=&quot;h&quot;&gt;H&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;re2&quot;&gt;Choice&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;Y&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; EOF_CONFIG &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$config&lt;/span&gt;
client
remote xxxxx
port &lt;span class=&quot;nu0&quot;&gt;1194&lt;/span&gt;
proto udp
dev tun
ns-cert-type server
tls-client
reneg-sec &lt;span class=&quot;nu0&quot;&gt;60&lt;/span&gt;
mtu-test
cipher AES-&lt;span class=&quot;nu0&quot;&gt;256&lt;/span&gt;-CBC
comp-lzo
persist-key
persist-tun
keysize &lt;span class=&quot;nu0&quot;&gt;256&lt;/span&gt;
nobind
explicit-exit-notify &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;
pkcs12 yyy&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;$Choice&lt;/span&gt;
EOF_CONFIG
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$config&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;H&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;h&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:11,&amp;quot;secid&amp;quot;:25,&amp;quot;range&amp;quot;:&amp;quot;4881-5195&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit26&quot; id=&quot;i&quot;&gt;I&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;I&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;i&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:12,&amp;quot;secid&amp;quot;:26,&amp;quot;range&amp;quot;:&amp;quot;5196-5210&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit27&quot; id=&quot;индексы&quot;&gt;Индексы&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 [@] - Ссылка на копию массива в переменной $1
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 [*] - Строка 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 [n]
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 var=(1 2 3 4)
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 echo ${var[@]}
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0418\u043d\u0434\u0435\u043a\u0441\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0438\u043d\u0434\u0435\u043a\u0441\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:12,&amp;quot;secid&amp;quot;:27,&amp;quot;range&amp;quot;:&amp;quot;5211-5386&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit28&quot; id=&quot;if&quot;&gt;if&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; что-то
&lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
 &lt;span class=&quot;co0&quot;&gt;# делать тот-то&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
 &lt;span class=&quot;co0&quot;&gt;# делать тот-то&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; что-то; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
 &lt;span class=&quot;co0&quot;&gt;# делать тот-то&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
 &lt;span class=&quot;co0&quot;&gt;# делать тот-то&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;if&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;if&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:12,&amp;quot;secid&amp;quot;:28,&amp;quot;range&amp;quot;:&amp;quot;5387-5610&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit29&quot; id=&quot;input&quot;&gt;input&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Запрос символа от пользователя
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Продолжить? (y/n) &amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; item
&lt;span class=&quot;kw1&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$item&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt;
    y&lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt;Y&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Ввели «y», продолжаем...&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
    n&lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt;N&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Ввели «n», завершаем...&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
        &lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
    &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Ничего не ввели. Выполняем действие по умолчанию...&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;esac&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;input&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;input&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:14,&amp;quot;secid&amp;quot;:29,&amp;quot;range&amp;quot;:&amp;quot;5611-6045&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit30&quot; id=&quot;j&quot;&gt;J&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;J&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;j&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:30,&amp;quot;range&amp;quot;:&amp;quot;6046-6059&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit31&quot; id=&quot;k&quot;&gt;K&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;K&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;k&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:31,&amp;quot;range&amp;quot;:&amp;quot;6060-6073&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit32&quot; id=&quot;l&quot;&gt;L&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;L&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;l&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:32,&amp;quot;range&amp;quot;:&amp;quot;6074-6087&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit33&quot; id=&quot;m&quot;&gt;M&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;M&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;m&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:33,&amp;quot;range&amp;quot;:&amp;quot;6088-6101&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit34&quot; id=&quot;n&quot;&gt;N&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;N&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;n&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:34,&amp;quot;range&amp;quot;:&amp;quot;6102-6115&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit35&quot; id=&quot;o&quot;&gt;O&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;O&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;o&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:35,&amp;quot;range&amp;quot;:&amp;quot;6116-6130&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit36&quot; id=&quot;echo&quot;&gt;echo&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Вывод прогресс бара
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co4&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-ne&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;#####                     (33%)\r&#039;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:15,&amp;quot;secid&amp;quot;:36,&amp;quot;range&amp;quot;:&amp;quot;6131-6251&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit37&quot; id=&quot;p&quot;&gt;P&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;P&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;p&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:16,&amp;quot;secid&amp;quot;:37,&amp;quot;range&amp;quot;:&amp;quot;6252-6265&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit38&quot; id=&quot;q&quot;&gt;Q&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Q&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;q&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:16,&amp;quot;secid&amp;quot;:38,&amp;quot;range&amp;quot;:&amp;quot;6266-6279&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit39&quot; id=&quot;r&quot;&gt;R&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ &lt;span class=&quot;re2&quot;&gt;IFS&lt;/span&gt;=&lt;span class=&quot;st_h&quot;&gt;&#039; &#039;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-a&lt;/span&gt; DATABASES_SELECTED &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es2&quot;&gt;$DATABASES_SELECTED&lt;/span&gt;&amp;quot;&lt;/span&gt;
$ &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; str &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;  x  &amp;quot;&lt;/span&gt;; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;-&lt;span class=&quot;es2&quot;&gt;$str&lt;/span&gt;-&amp;quot;&lt;/span&gt;
&lt;span class=&quot;re5&quot;&gt;-x-&lt;/span&gt;
$ &lt;span class=&quot;re2&quot;&gt;IFS&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; str &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;  x  &amp;quot;&lt;/span&gt;; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;-&lt;span class=&quot;es2&quot;&gt;$str&lt;/span&gt;-&amp;quot;&lt;/span&gt;
-  x  -
$ &lt;span class=&quot;re2&quot;&gt;IFS&lt;/span&gt;= &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; str &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;  x  &amp;quot;&lt;/span&gt;; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;-&lt;span class=&quot;es2&quot;&gt;$str&lt;/span&gt;-&amp;quot;&lt;/span&gt;
-  x  -
$ _&lt;/pre&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 IFS=&amp;quot;;&amp;quot; выставляем делимитер разбивки (в нашем случае &amp;quot;;&amp;quot;)
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 set – $line - разбиваем строку, после чего каждая ее часть будет доступна как $1, $2, …
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;R&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;r&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:16,&amp;quot;secid&amp;quot;:39,&amp;quot;range&amp;quot;:&amp;quot;6280-6781&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit40&quot; id=&quot;s&quot;&gt;S&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;S&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;s&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:17,&amp;quot;secid&amp;quot;:40,&amp;quot;range&amp;quot;:&amp;quot;6782-6797&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit41&quot; id=&quot;select&quot;&gt;select&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;select&lt;/span&gt; action &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Опция 1&amp;quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Опция 2&amp;quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Выход&amp;quot;&lt;/span&gt; 
&lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt; 
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$action&lt;/span&gt; 
&lt;span class=&quot;kw3&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$action&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&amp;quot;Выход&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;break&lt;/span&gt; 
&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt; &lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;select&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;select&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:17,&amp;quot;secid&amp;quot;:41,&amp;quot;range&amp;quot;:&amp;quot;6798-6958&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit42&quot; id=&quot;t&quot;&gt;T&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;T&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;t&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:18,&amp;quot;secid&amp;quot;:42,&amp;quot;range&amp;quot;:&amp;quot;6959-6973&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit43&quot; id=&quot;test&quot;&gt;test&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 Параметры:
&lt;/div&gt;&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-b file&lt;/code&gt; — истина, если file существует и является специальным блочным устройством.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-c file&lt;/code&gt; — истина, если file существует и символьное устройство.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-d file&lt;/code&gt; — истина, если file существует и является каталогом.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-e file&lt;/code&gt; — истина, если file существует.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-f file&lt;/code&gt; — истина, если file существует и является обычным файлом.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-g file&lt;/code&gt; — истина, если file существует и имеет установленным групповой идентификатор (set-group-id).
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-k file&lt;/code&gt; — истина, если file имеет установленным «sticky» бит.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-L file&lt;/code&gt; — истина, если file существует и является символьной ссылкой.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-p file&lt;/code&gt; — истина, если file существует и является именованным каналом (pipe).
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-r file&lt;/code&gt; — истина, если file существует и читаем.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-s file&lt;/code&gt; — истина, если file существует и имеет размер больше, чем ноль.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-S file&lt;/code&gt; — истина, если file существует и является сокетом.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-t [fd]&lt;/code&gt; — истина, если fd открыт на терминале. Если fd пропущен, по умолчанию 1 (стандартное устройство вывода).
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-u file&lt;/code&gt; — истина, если file существует и имеет установленным бит пользователя (set-user-id).
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-w file&lt;/code&gt; — истина, если file существует и записываем.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-x file&lt;/code&gt; — истина, если file существует и исполняем.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-O file&lt;/code&gt; — истина, если file существует и его владелец имеет эффективный идентификатор пользователя.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-G file&lt;/code&gt; — истина, если file существует и его владелец имеет эффективный идентификатор группы.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;file1 -nt file2&lt;/code&gt; — истина, если file1 новее (дата модификации), чем file2.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;file1 -ot file2&lt;/code&gt; — истина, если file1 старее, чем file2.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;file1 -ef file2&lt;/code&gt; — истина, если file1 и file2 имеют то же устройство и номер inode.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-z string&lt;/code&gt; — истина, если длина string равна нулю.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;-n string&lt;/code&gt; — истина, если длина string не ноль.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;string1 = string2&lt;/code&gt; — истина, если строки равны.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;string1 != string2&lt;/code&gt; — истина, если строки не равны.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;! expr&lt;/code&gt; — истина, если выражение expr ложь.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;expr1 -a expr2&lt;/code&gt; — истина, если оба выражения expr1 и expr2 истина.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;expr1 -o expr2&lt;/code&gt; — истина, если хотя бы одно из выражений expr1 или expr2 истина.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;code&gt;arg1 %оператор% arg2 -eq, -ne, -lt, -le, -gt, или -ge&lt;/code&gt; — эти арифметические бинарные операции возвращают истину, если arg1 равно (-eq), не равно (-ne), меньше чем (-lt), меньше чем или равно (-le), больше чем (-gt), или больше или равно (-ge), чем arg2, соответственно. arg1 и arg2 могут быть положительными целыми, отрицательными целыми, или специальными выражениями -l string, которые вычисляют длину string.
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 Сокращенный вариант &lt;strong&gt;[ ]&lt;/strong&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;test&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;test&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:18,&amp;quot;secid&amp;quot;:43,&amp;quot;range&amp;quot;:&amp;quot;6974-11129&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit44&quot; id=&quot;применение_в_коде&quot;&gt;Применение в коде&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$daynow&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;= &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ....&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$daynow&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-ge&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$daynow&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-le&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ....&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Сравнение &lt;strong&gt;-eq&lt;/strong&gt; с &lt;strong&gt;==&lt;/strong&gt;
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; a == a &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt;
&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
&amp;nbsp;
$ &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; a &lt;span class=&quot;re5&quot;&gt;-eq&lt;/span&gt; a &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt;
-bash: &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;: a: integer expression expected
&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u0434\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435_\u0432_\u043a\u043e\u0434\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:18,&amp;quot;secid&amp;quot;:44,&amp;quot;range&amp;quot;:&amp;quot;11130-11441&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit45&quot; id=&quot;status&quot;&gt;status&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Проверка статуса выполнения программы
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;rm&lt;/span&gt; test_file
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span class=&quot;re4&quot;&gt;$?&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-eq&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es4&quot;&gt;$(tput hpa $(tput cols)&lt;/span&gt;)&lt;span class=&quot;es4&quot;&gt;$(tput cub 6)&lt;/span&gt;[OK]&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es4&quot;&gt;$(tput hpa $(tput cols)&lt;/span&gt;)&lt;span class=&quot;es4&quot;&gt;$(tput cub 6)&lt;/span&gt;[fail]&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;fi&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;status&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;status&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:20,&amp;quot;secid&amp;quot;:45,&amp;quot;range&amp;quot;:&amp;quot;11442-11727&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit46&quot; id=&quot;tput&quot;&gt;tput&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Команда tput инициализирует и управляет вашими сеансами работы с терминалом, используя базу данных terminfo. С помощью tput вы можете управлять различными функциями терминала, такими как перемещение или изменение вида курсора, изменение свойств текста и очистка определенных областей экрана терминала.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 tput hpa N — сдвиг курсора на N позиций
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 tput cols получает ширину окна терминала
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 tput cub 6 — сдвигает курсор на 6 позиций влево
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
Также можно выставить цвет
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 tput setaf 0..7 — цвет текста
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 tput setab 0..7 — цвет фона
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 tput sgr0 — сброс на дефолтный
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;
Подробнее: &lt;a href=&quot;http://www.ibm.com/developerworks/ru/library/au-learningtput/&quot; class=&quot;urlextern&quot; title=&quot;http://www.ibm.com/developerworks/ru/library/au-learningtput/&quot; rel=&quot;ugc nofollow&quot;&gt;http://www.ibm.com/developerworks/ru/library/au-learningtput/&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;tput&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;tput&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:46,&amp;quot;range&amp;quot;:&amp;quot;11728-12789&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit47&quot; id=&quot;u&quot;&gt;U&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;U&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;u&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:47,&amp;quot;range&amp;quot;:&amp;quot;12790-12803&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit48&quot; id=&quot;v&quot;&gt;V&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;V&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;v&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:48,&amp;quot;range&amp;quot;:&amp;quot;12804-12817&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit49&quot; id=&quot;w&quot;&gt;W&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;W&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;w&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:49,&amp;quot;range&amp;quot;:&amp;quot;12818-12831&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit50&quot; id=&quot;x&quot;&gt;X&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;X&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;x&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:50,&amp;quot;range&amp;quot;:&amp;quot;12832-12845&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit51&quot; id=&quot;y&quot;&gt;Y&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Y&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;y&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:21,&amp;quot;secid&amp;quot;:51,&amp;quot;range&amp;quot;:&amp;quot;12846-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=bash:keys">
        <dc:format>text/html</dc:format>
        <dc:date>2016-02-09T01:41:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Зарегистрированные клавиши</title>
        <link>http://178.140.10.58:8080/doku.php?id=bash:keys</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;зарегистрированные_клавиши&quot;&gt;Зарегистрированные клавиши&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Поиск в истории только текущей команды. Например, если набрать `ls` и нажать стрелку вверх, то будет искать по истории только среди команд, начинающихся с ls
&lt;/p&gt;
&lt;div class=&quot;plugin_note noteimportant&quot;&gt;&lt;strong&gt;Ctrl+R&lt;br/&gt;

Ctrl+Shift+R&lt;/strong&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
</rdf:RDF>
