Инструменты пользователя

Инструменты сайта


bash

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

bash [2016/04/19 08:31] (текущий)
Строка 1: Строка 1:
 +====== bash ======
 +**bash** (Bourne again [[shell]]) - усовершенствованная и модернизированная вариация командной оболочки Bourne shell ([[sh]]).
  
 +**Конфигурационные файлы инициализации**.
 +
 +Когда Bash вызывается как интерактивная оболочка,​ первым делом он читает и вызывает команды из файла /​etc/​profile,​ если этот файл существует. После чтения этого файла, он смотрит следующие файлы в данном порядке:​ ~/​.bash_profile,​ ~/​.bash_login,​ и ~/.profile, читает и вызывает команды из них. При выходе Bash читает и выполняет команды из файла ~/​.bash_logout. Также Bash использует команды из файла ~/.bashrc. Это может быть отменено опцией --norc. Опция --rcfile заставит Bash использовать команды из ~/.bashrc
 +
 +**Синтаксис**.
 +  * **Оператор точка** позволяет включать код находящийся в другом файле (после точки и перед именем загружаемого файла ставится пробел). Этот оператор часто используют для включения конфигурационных параметров,​ находящихся во внешних файлах.
 +  * **Двойные кавычки** - экранирует пробелы в значении переменных,​ например **echo "This UID=$UID"​**. Знак $ и обратные кавычки (``), заключенные в двойные кавычки,​ сохраняют свойства специальных символов.
 +  * **Одинарные кавычки** экранируют все специальные символы. Т.е. символ $ в **echo '$sym '​**не будет интерпретироваться как специальный символ,​ а выведется как текст.
 +  * **Обратные одинарные кавычки ``** служат для подстановки данных. В том месте где будет использована подстановка,​ будет подставляться то, что программа вывела бы на стандартный вывод. Вместо кавычек можно использовать круглые скобки со знаком $. Ниже команды идентичны:​ <​file>​
 +`date`
 +$(date)
 +</​file>​
 +  * **Символ ;** Оболочка bash допускает последовательное выполнение команд - одна за другой. Для этого серия команд вводится одной строкой,​ и разделяется символом ;. В этом случае сначала выполняется команда 1, по ее завершении команда 2 и т.д. Например<​file>​
 +$ cd ~; ls *.txt; cp *.txt $HOME/temp/
 +</​file>​
 +  * **Свойства переменных** в shell script:
 +        * не типизированы (значения в переменных считаются строками,​ и только если переменная будет использоваться в математическом выражении,​ будет происходить проверка типа переменной),​
 +        * область видимости переменных - весь код программы (если переменная будет определена в функции,​ она все равно будет глобальной переменной и к ней можно будет обращаться из любого места программы),​
 +        * при обращении к неопределенной переменной не выдаются ошибки,​
 +        * регистрозависимые.
 +  * **echo и метасимволы в bash**. Для использования метасимволов \n (перевод на новую строку),​ \t и других в команде echo может потребоваться использование ключа -e двух символов обратного слеша или же можно использовать конструкции $'​\X',​ ниже команды идентичны по результату свой работы:<​file>​
 +#!/bin/bash
 +
 +echo -e \\n\\tfirst
 +echo $'​\n\t'​second
 +</​file>​
 +===== Настройка переменных среды bash =====
 +<note important>​Введите команду **export** и два раза нажмите клавишу Таb, получим список переменных в этом сеансе bash, которые можно изменить или просмотреть командой **echo**.</​note>​
 +
 +  * [[openvz?&#​kak_vkljuchit_v_ve_openvz_zapis_istorii_komand_bash|Как включить в VE OpenVZ запись истории команд bash?]]
 +  * Вывести переменные окружения.<​file>​
 +$ env | more
 +SSH_AGENT_PID=1326
 +TERM=xterm
 +SHELL=/​bin/​bash
 +...
 +$ echo $PATH
 +/​usr/​local/​sbin:/​usr/​local/​bin:/​usr/​sbin:/​usr/​bin:/​sbin:/​bin:/​usr/​games
 +</​file>​
 +  * **export** - добавить переменную окружения pp=1. С помощью команды export присваивается переменной окружения определённое значение. Если переменная не существует,​ она будет немедленно создана. Если переменная уже имеет какое-то значение,​ оно будет потеряно.<​file>​
 +# export pp=1
 +</​file>​
 +  * unset - удалить переменную окружения pp<​file>​
 +# unset pp
 +</​file>​Чтобы старое значение переменой не терялось,​ например нужно добавить в переменную PATH новый каталог,​ нужно использовать такую конструкцию:<​file>​
 +$ export PATH=$PATH:/​ваш/​новый/​каталог
 +</​file>​
 +  * Временно изменить редактор по умолчанию vi на nano<​file>​
 +# export EDITOR=nano
 +</​file>​Для постоянного применения нового редактора,​ нужно добавить в строку файл $HOME/​.bashrc<​file>​
 +# nano .bashrc
 +
 +# set default editor nano
 +export EDITOR="​nano"​
 +# OR
 +# set default editor vi
 +#export EDITOR="​vi"​
 +</​file>​
 +===== .bash_aliases =====
 +  * Примеры для .bash_aliases<​file>​
 +$ nano $HOME/​.bash_aliases
 +</​file>​Для применения изменений выполните команду<​file>​
 +$ source $HOME/​.bash_aliases
 +</​file>​
 +  * Навигация<​file>​
 +alias ..='cd ..'
 +alias ...='​cd ../..'
 +alias cdt='​cd $HOME/temp; ls -l'
 +</​file>​
 +
 +===== Цветной терминал (консоль) в Linux =====
 +
 +В Debian 8 достаточно для root раскоментировать строки в /​root/​.bashrc<​file bash>
 +# You may uncomment the following lines if you want `ls' to be colorized:
 +export LS_OPTIONS='​--color=auto'​
 +eval "​`dircolors`"​
 +alias ls='ls $LS_OPTIONS'​
 +alias ll='ls $LS_OPTIONS -l'
 +alias l='ls $LS_OPTIONS -lA'
 +</​file>​Для пользовательской консоли включить force_color_prompt=yes в файле /​home/<​username>/​.bashrc
 +===== Комбинации клавиш консоли Bash =====
 +  * ctrl+d выйти из терминала
 +  * ctrl+l очистить экран, аналог команды clear.
 +  * ctrl+a переместить курсор в начало строки
 +  * ctrl+e переместить курсор в конец строки
 +  * ctrl+u удалить все символы от курсора до начала строки
 +  * ctrl+k удалить все символы от курсора до конца строки
 +  * ctrl+w удалить слово перед курсором
 +  * ctrl+b переместить курсор на один символ влево
 +  * ctrl+f переместить курсор на один символ вправо
 +  * ctrl+t поменять местами символ слева от курсора и под курсором
 +  * ctrl+h удалить символ слева от курсора
 +  * ctrl+p предыдущая команда в истории bash
 +  * ctrl+n следующая команда в истории bash
 +  * ctrl+r реверсивный поиск команд в истории bash
 +  * ctrl+y вставляет последнюю удалённую с помощью ctrl+u или ctrl+k строку
 +  * ctrl+m выполнение команды,​ аналог [Enter]
 +  * ctrl+o выполняет команду,​ при этом оставляя её в командной строке для дальнейшего использования
 +  * Tab+Tab выводит список команд. При наличии какого нибудь символа(-ов) выводит команды по введённым символам.
 +  * ctrl+c отменить последнюю введённую команду
 +  * ctrl+x+v показать версию bash
 +  * ctrl+s стоп режим. Блокирует вывод на консоль. При этом все данные отображённые на экране остаются неизменными.
 +  * ctrl+q выход из стоп-режима
 +====== Позиционные переменные (параметры запуска скрипта) ======
 +При вызове команды или сценария с аргументами,​ имя команды и её аргументы являются позиционными переменными. Позиционными они называются,​ потому что внутри сценария ​ обращение к ним происходит по позиции в командной строке.
 +  * $0 ... $9 - при запуске допускается не более 9 параметров передавать в скрипт. Переменная $0 является именем скрипта.
 +  * **$#** - количество параметров переданных скрипту
 +  * **$?** - код возврата программы. **echo $?** - вывести ошибку с которой закончил выполняться предыдущий скрипт (программа),​ например,​ выведет 0 (true) если имя пользователя root<​file>​
 +test "​root"​ = "​$USER"​ ; echo $?
 +</​file>​
 +  * **$* и $@** - все параметры командной строки. **echo $*** - выведет все значения параметров.
 +  * **$!** - PID программы,​ запущенной в background режиме.
 +  * **$$** - PID процесса shell.
 +
 + 
 +
 +====== Отладка скриптов bash ======
 +  * [[http://​www.ylsoftware.com/​news/​230|Как отлаживать скрипты на bash]]
 +
 +Для отладки скриптов bash можно использовать встроенный набор команд. Можно включать и выключать режим отладки используя следующие команды внутри скрипта:​
 +  * set -x - (set -o xtrace) показывать команды и параметры,​ которые выполняются;​
 +  * set -v - (set -o verbose) печатает входные строки сразу по мере их считывания;​
 +  * set -f - (set -o noglob) отключается генерация имени файла с помощью метасимволов (подстановка).
 +В одном и том же скрипте вы можете включать и выключать отладочный режим столько раз, сколько это необходимо. Символ "​-"​ используется для активации параметра командной оболочки,​ а символ "​+"​ - для его деактивации.
 +
 +**Пример**. Отладка прервется после первого выполнения цикла, что будет видно в результате выполнения этого скрипта.
 +<​file>​
 +#!/bin/bash
 +clear
 +
 +# включаем режим отладки
 +set -x
 +for i in 0 1 2 3 4
 +do
 +echo "​Console number is $i" ​
 +# выключаем режим отладки
 +set +x
 +done
 +
 +exit 0
 +
 +</​file>​
 +====== Массивы bash ======
 +<​file>​
 +#!/bin/bash
 +car=(bmw mers lada audi)
 +
 +# вывести второй элемент массива
 +echo ${car[1]}
 +# вывести все элементы массива
 +echo ${car[*]}
 +</​file>​
 +====== Взаимодействие с пользователем ======
 +===== read =====
 +При выполнении оператора read, на экране терминала появится курсор и пользователю даётся возможность ввести данные. Ввод завершается нажатием на кнопку "​Enter"​. Если оператор read вызывать без указания переменной,​ он все данные,​ введенные пользователем,​ поместит в переменную по умолчанию - REPLAY.
 +<​file>​
 +#!/bin/bash
 +
 +echo -n '​Введите данные и нажмите "​Enter"​ :'
 +read
 +echo "Вы набрали - $REPLY"​
 +</​file>​
 +===== select =====
 +Команда select используется для создания интерактивного меню вашего скрипта. Синтаксис команды select (можно применять утилиту [[tput]]):
 +<​file>​
 + ​select variable [in list]
 + do
 + ​команды;​
 + done
 +</​file>​
 +Список слов, следующих за in, расширяется,​ генерируя список элементов. Если в операторе select список in list не задан, то в качестве списка будет использоваться список аргументов ($@), передаваемый сценарию или функции.
 +
 +**Пример 1**. **~/.b*** выводится список файлов текущие директории начинающиеся на .b Из них формируется меню.
 +<code bash>
 +#!/bin/bash
 +
 +select file in ~/.b*  quit
 +do
 +if [ -e $file ]
 +then
 + ls -l $file
 +else
 + break
 +fi
 +done
 +
 +exit 0
 +</​code>​
 +**Пример 2**
 +<code bash>
 +#!/bin/bash
 +options1="​\"​option 1\" \"​option 2\" \"​quit\""​
 +
 +echo options1 $options1
 +
 +eval set $options1
 +select opt in "​$@"​
 +do
 +echo $opt
 +if [ "​$opt"​="​quit"​ ]; then
 +        exit
 +fi
 +done
 +</​code>​
 +**Пример 3**
 +<code bash>
 +#!/bin/bash
 +OPTIONS="​Hello Quit"
 +           ​select opt in $OPTIONS; do
 +               if [ "​$opt"​ = "​Quit"​ ]; then
 +                echo done
 +                exit
 +               elif [ "​$opt"​ = "​Hello"​ ]; then
 +echo Hello World
 +echo `/bin/ls /`
 +               else
 +                clear
 +                echo bad option
 +               fi
 +done
 +</​code>​
 +====== Команда test ("[ ]") ======
 +Команда **test** предназначена для проверки следующих типов условий:​
 +  - сравнение различных значений,​
 +  - проверка типов и наличия файлов,​
 +  - проверка логических условий (логическое И - "&&",​ и логическое ИЛИ - "​||"​).
 +С использованием этой команды формируются операторы выбора и цикла языка [[shell]]. Два возможных формата команды:<​file>​test условие или [ условие ]
 +</​file>​ удобней пользоваться вторым вариантом,​ т.е. вместо того, чтобы писать перед условием слово "​test",​ будем заключать условие в скобки,​ что более привычно для программистов. Например<​file>​[ "​root"​ = "​$USER"​ ]; echo $?
 +</​file>​вместо<​file>​test "​root"​ = "​$USER"​ ; echo $?</​file>​На самом деле shell будет распознавать эту команду по открывающей скобке "​[",​ как слову, соответствующему команде "​test"​. Уже этого достаточно,​ чтобы предупредить о распространенной ошибке начинающих:​ <note tip>​Между скобками и содержащимся в них условием обязательно должны быть пробелы.</​note>​
 +^[ -e /путь к / файлу ]|- истина если файл существует|
 +^[ -s /путь к / файлу ]|- истина если файл существует и имеет не нулевую длину|
 +^[ -f /путь к / файлу ]|- истина если обычный файл существует|
 +^[ -h /путь к / файлу ]|- истина если файл существует и является символической ссылкой|
 +^[ -w /путь к / файлу ]|- истина если файл существует и и доступен для записи|
 +^[ -z STRING ]|- истина,​ если длина строки "​STRING"​ равна нулю|
 +^[ -n STRING ] или [ STRING ]|- истина,​ если длина строки "​STRING"​ ненулевая|
 +^[ STRING1 == STRING2 ]|- истина,​ если строки равны; для более строгого соответствия POSIX вместо "​=="​ можно использовать "​="​|
 +^[ STRING1 != STRING2 ]|- истина,​ если строки не равны|
 +^[ STRING1 < STRING2 ]|- истина,​ если в текущей локали при лексикографической сортировке "​STRING1"​ оказывается перед "​STRING2"​|
 +^[ STRING1 > STRING2 ]|- истина,​ если в текущей локали при лексикографической сортировке "​STRING1"​ оказывается после "​STRING2"​|
 +^[ ARG1 OP ARG2 ]|"​OP"​ - один из операторов -eq, -ne, -lt, -le, -gt или -ge. Эти арифметические двоичные операторы возвращают значение истина,​ если операнд "​ARG1"​ соответственно равен, не равен, меньше,​ меньше или равен, больше или больше или равен операнду "​ARG2"​. "​ARG1"​ и "​ARG2"​ являются целыми числами|
 +
 +
 +  * **Проверка логических условий**. Логическое И - "&&",​ и логическое ИЛИ - "​||"​. Наиболее часто их применяют,​ когда необходимо проверить условие и, если оно истинно,​ выполнить одну команду или наоборот – не выполнять.
 +  - Пример №1<​file>​
 +[ -f file ] && rm file
 +</​file>​Поскольку проверяется логическое И, необходимо чтобы оба условия были истинной. И поэтому,​ если первое условие истина,​ то будет проверяться второе условие,​ т.е. будет вызвана программа rm.
 +  - Пример №2<​file>​
 +[ -f file ] || touch file
 +</​file>​В этом примере проверяется наличие файла file. Если его не существует (первое условие ЛОЖЬ), вызывается программа touch, которая его создает. Для того что бы получилась ИСТИНА,​ хотя бы одно из условий должно возвратить значение ИСТИНА. Поэтому,​ если файл существует (ИСТИНА),​ программа touch не будет вызываться,​ так как нет необходимости в проверки второго условия. Если файл не существует (ЛОЖЬ), необходимо проверить второе условие – будет выполнена программа touch.
 +
 +====== if-then-else ======
 +  * [[http://​rus-linux.net/​nlib.php?​name=/​MyLDP/​BOOKS/​Bash-Guide-1.12-ru/​bash-guide-07-1.html|Руководство по Bash для начинающих. Глава 7: Условные инструкции.]]
 +Элементарная конструкция if выглядит так:
 +<file bash>
 +if [ "​foo"​ = "​foo"​ ]
 +then
 +# выполнить если выражение вычислилось как истина
 +fi
 +</​file>​
 +
 +if проверяет код возврата выполнения программы:​ 0- выполнено,​ любая цифра отличная от нуля - программа не выполнилась.
 +<file bash>
 +#!/bin/bash
 +
 +pwd="/​root"​
 +if rm $pwd/1.txt 2>/​dev/​null
 +then
 +echo "​$pwd/​1txt deleted"​
 +else
 +echo "not deleted"​
 +fi
 +</​file>​
 +Более короткая запись. <​note>​Если в качестве условия оператора if используется выражение,​ помещенное в квадратные скобки,​ для разрешения этого условия будет вызвана программа **test**. If будет проверять код возврата программы test
 +</​note><​file bash>
 +#!/bin/bash
 +
 +pwd="/​root"​
 +
 +[ -e $pwd/1.txt ] && (rm $pwd/1.txt; echo "​Deleted"​)
 +</​file>​
 +  * Пример.<​file bash>
 +#!/bin/bash
 +
 +CDIR=`pwd`
 +LDIR="/​scripts"​
 +
 +if !([ -h $LDIR ]); then
 +echo "​Если символической ссылки на каталог запуска не существует - создать"​
 +ln -s $CDIR $LDIR
 +#    exit 0
 +fi
 +</​file>​
 +  * Пример.<​file bash>
 +if [[ "​$B"​ = "​Q"​ ]] #​сравнение строк, обратите внимание на пробелы и скобки
 +then
 +#​команды тут
 +fi #конец сравнения
 +
 +if [[ "​$B"​ -eq 3 ]] #​сравнение чисел
 +then
 +#​команды
 +fi #конец сравнения
 +</​file>​
 +
 +====== Циклы ======
 +
 +===== Циклы. Цикл for-in. =====
 +Оператор for-in предназначен для поочередного обращения к значениям перечисленным в списке. Каждое значение в списке поочерёдно присваивается переменной.
 +Синтаксис следующий:​
 +<​file>​
 +for переменная in [список_значений]
 +do
 +команды
 +done
 +
 +for NAME [in LIST ]; do COMMANDS; done # синтаксис для записи цикла в одну строку
 +</​file>​
 +<​note>​Если ключевое слово do находится в одной строке со словом for, то после списка аргументов (перед do) необходимо ставить точку с запятой.<​file>​
 +for arg in [list] ; do
 +</​file></​note>​
 +Рассмотрим небольшой пример:​
 +<​file>​
 +#!/bin/bash
 +for i in 0 1 2 3 4 # переменной $i будем поочерёдно присваивать значения от 0 до 4 включительно
 +do
 +echo "​Number is $i"
 +done #цикл окончен
 +exit 0
 +</​file>​
 +В переменную $i поочерёдно подставляются значения из списка и в цикле идёт работа со значением этой переменной.
 +
 +<​note>​Элементы в списке могут разделяться символами пробела или табуляции. Если список не помещается на одну строку,​ его можно продолжить на следующей,​ но перед тем как нажать на Enter, поставьте символ "​\"​ для экранирования значения символа перевода строки.</​note>​
 +
 +  * **Пример** получения данных из внешнего файла с фильтрацией содержимого файла. В нем сначала отбираются первые поля файла (разделение полей - пробел),​ а затем удаляются комментарии т.е. строки начинающиеся на символ "#"​.
 +<​file>​
 +#!/bin/bash
 +
 +for i in `cat ipset.txt | cut -f1 -d ' ' | sed -e '/^#/ d'`
 +do
 +echo "​$i"​
 +done
 +exit 0
 +</​file>​
 +
 +
 +
 +===== Циклы. Цикл while-do. =====
 +Цикл while сложнее цикла for-in и используется для повторения команд,​ пока какое-то выражение истинно( код возврата = 0). В цикле while выполняются строки,​ расположенные между do и done, до тех пор, пока условие истинно или пока не встретится оператор break. Синтаксис оператора:​
 +<​file>​
 +while выражение или команда возвращающая код возврата
 +do
 +команды
 +done
 +
 +while CONTROL-COMMAND;​ do CONSEQUENT-COMMANDS;​ done # синтаксис для записи цикла в одну строку
 +</​file>​
 +
 +Пример работы цикла рассмотрим на следующем примере:​
 +<​file>​
 +#!/bin/bash
 +again=yes #​присваиваем значение "​yes"​ переменной again
 +while [ "​$again"​ = "​yes"​ ] #Будем выполнять цикл, пока $again будет равно "​yes"​
 +do
 +echo "​Please enter a name:"
 +read name
 +echo "The name you entered is $name"
 +
 +echo "Do you wish to continue?"​
 +read again
 +done
 +echo "​Bye-Bye"​
 +</​file>​
 +Цикл выполняется до тех пор, пока мы не введем что-то отличное от "​yes"​. Между do и done можно описывать любые структуры,​ операторы и т.п., все они будут выполнятся в цикле. Но следует быть осторожным с этим циклом,​ если вы запустите на выполнение в нём какую-либо команду,​ без изменения переменной выражения,​ вы можете попасть в бесконечный цикл.
 +
 +Теперь об условии истинности. После while, как и в условном операторе if-then-else можно вставлять любое выражение или команду,​ которая возвращает код возврата,​ и цикл будет исполнятся до тех пор, пока код возврата = 0! Оператор "​["​ аналог команды test, которая проверяет истинность условия,​ которое ей передали.
 +===== Циклы. Цикл until-do. =====
 +Синтаксис<​file>​
 +until TEST-COMMAND;​ do CONSEQUENT-COMMANDS;​ done # синтаксис для записи цикла в одну строку
 +</​file>​
 +====== Оператор case ======
 +Оператор case всегда завершается ключевым словом esac.
 +<​file>​
 +case строка in
 +шаблон)
 +список операторов
 +;;
 +[ шаблон)
 +список операторов
 +[;;] ]
 +esac
 +</​file>​
 +Оператор case поочерёдно сравнивает строку с шаблонами. Если шаблон совпадает,​ то выполняется группа операторов,​ находящихся между шаблоном и специальными символами ";;"​. После выполнения всех строк управление передается ​ операторам,​ находящимся за ключевым словом esac.
 +
 +
 +====== Пустой оператор ======
 +Пустой оператор ":"​ . Ничего не делает. Возвращает значение "​0"​.
 +====== Функции ======
 +Функцию в shell можно определить двумя способами:​ при помощи оператора function или после имени функции написать открывающую и закрывающую круглые скобки. Тело функции располагается между фигурными скобками.
 +
 +
 +====== eval ======
 +<​file>​
 +eval arg1 [arg2] ... [argN]
 +</​file>​
 +Транслирует список аргументов,​ из списка,​ в команды.
 +
 +Пример. Демонстрация команды eval
 +
 +<​file>​
 +#!/bin/bash
 +
 +y=`eval ls -l`  # Подобно y=`ls -l`
 +echo $y         # но символы перевода строки не выводятся,​ поскольку имя переменной не в кавычках.
 +echo
 +echo "​$y" ​      # Если имя переменной записать в кавычках -- символы перевода строки сохраняются.
 +
 +echo; echo
 +
 +y=`eval df`     # Аналогично y=`df`
 +echo $y         # но без символов перевода строки.
 +
 +#  Когда производится подавление вывода символов LF (перевод строки),​ то анализ
 +#+ результатов различными утилитами,​ такими как awk, можно сделать проще.
 +
 +exit 0
 +</​file>​
 +====== getopts ======
 +getopts - это встроенная в shell команда,​ позволяющая разобрать командную строку,​ передаваемую программе. Она понимает только параметры,​ написанные в стиле [[POSIX]], т.е "-v -t -f file" и т.п.
 +====== trap - jбработка прерываний ======
 +Команда trap позволяет переопределить стандартную реакцию программы на получаемые сигналы. Бывает необходимо защитить выполнение программы от прерывания. Формат команды trap:<​file>​
 +trap '​список команд'​ сигналы
 +</​file>​Если в системе возникнут прерывания,​ чьи сигналы перечислены через пробел в "​сигналы",​ то будет выполнен "​список команд",​ после чего (если в списке команд не была выполнена команда "​exit"​) управление вернется в точку прерывания и продолжится выполнение командного файла.
 +
 +Наиболее часто приходится встречаться со следующими прерываниями,​ соответствующими сигналам:​
 +<​file>​
 +0 выход из интерпретатора,​
 +1 отбой (отключение удаленного абонента),​
 +2 прерывание от <​Del>,​
 +9 уничтожение (не перехватывается),​
 +15 окончание выполнения.
 +</​file>​
 +
 +Например,​ если перед прекращением по прерываниям выполнения какого то командного файла необходимо удалить файлы в "/​tmp",​ то это может быть выполнено командой "​trap":​
 +
 +   trap 'rm /tmp/* ; exit 1' 1 2 15
 +
 +которая предшествует прочим командам файла. Здесь, после удаления файлов будет осуществлён выход "​exit"​ из командного файла.
 +
 +Команда "​trap"​ позволяет и просто игнорировать прерывания,​ если "​список команд"​ пустой. Так например,​ если команда "​cmd"​ выполняется очень долго, а пользователь решил отключиться от системы,​ то для продолжения выполнения этой команды можно написать,​ запустив команду в фоновом режиме:​
 +
 +    ( trap ''​ 1; cmd )&
 +
 +====== RegExp ======
 +  * [[http://​www.opennet.ru/​docs/​RUS/​bash_scripting_guide/​c11895.html|Регулярные выражения Bash]]
 +  * [[http://​rus-linux.net/​nlib.php?​name=/​MyLDP/​BOOKS/​Bash-Guide-1.12-ru/​bash-guide-04-1.html|Что такое регулярные выражения?​]]
 +  * [[RegExp]]
bash.txt · Последние изменения: 2016/04/19 08:31 (внешнее изменение)