BASH Flashcards

1
Q

BASH

Какие файлы автоматически выполняет:

bash –posix …

?

A

Обращается к переменной ENV и выполняет файл, имя которого там указано (ищет в текущем каталоге, а потом в каталогах PATH).
Больше не выполняет никаких файлов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

BASH

Способы запуска bash в не интерактивном режиме (3)?

A

[1] С ключом -c:

bash -c “…”

[2] Запуск скрипта:

./имя_скрипта

[3] Перенаправление ввода:

bash < скрипт

~4) Использование heredoc:

bash &laquo_space;EOF
… код …
EOF

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

BASH

[1] Как запустить bash так, чтобы строка (“…”) была интерпретирована как код на bash, либо как скрипт на bash.

[2] Что с переменными командной строки?

A

[1] Флаг -c

Пример:
bash -c “echo ‘Hello, world!’”

[2] Все последующие после этого аргументы командной строки будут начинаться с к $0, причем $0 будет интерпретироваться как название выполняющей программы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

BASH

Перечислите способы запустить bash в интерактивном режиме (5).

A

[1] bash
[2] bash -i, в том числе и в скриптах, к примеру:
#! /bin/bash -i
[3] Открытие терминала (большинство из них запускают bash по умолчанию).
[4] Подключение по SSH
[5] exec bash

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

BASH

[1] Имена демонов, которые используются для удаленного запуска bash (2).

[2] Какие файлы автоматически выполняются в этом случае?

A

[1]

rshd - remote shell daemon.

sshd - secure shell daemon.

[2]

~/.bashrc

п-(если вызван как sh, то выполнения ~/.bashrc не происходит).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

BASH

Что происходит при запуске bash, когда эффективный идентификатор пользователя (группы) не равен реальному идентификатору пользователя (группы)?

A

[1] jЕсли нет ключа -p, то:

1) Не происходит автоматического выполнения стартовых файлов.

позже-2) Функции оболочки не наследуются от среды.

3) Игнорируются, если существуют, переменные:

SHELLOPTS
BASHOPTS
CDPATH
GLOBIGNORE

4) Эффективный идентификатор пользователя устанавливается равным реальному.

[2] Если ключ -p есть, то все то же, что и в [1], но не происходит изменения эффективного идентификатора пользователя.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

BASH

~Перечислите зарезервированные слова в bash.

A

if elif else fi
case esac
!
{}
[[ ]]
for in do done
select
then
until
while
function

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

BASH

д-Что возвращает команда bash?

A

“exit status” или 128+n, если команда завершена сигналом n.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

BASH

Что происходит раньше - перенаправления, задаваемые командами или перенаправления конвеера?

A

Перенаправления конвеера.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

BASH

Различные варианты конвейеров (2)

A

[1] ./скрипт_1 | ./скрипт_2

stdout скрипт_1 перенаправляется в stdin скрипт_2
stderr стандартно выводится в терминал.

[2] ./скрипт_1 |& ./скрипт_2

stdout скрипт_1 и stderr скрипт_1 перенаправляются в stdin скрипт_2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

BASH

Что возвращает конвейер?

A

При нормальной работе - exit status последней команды.

При pipefail - последняя самая правая команда, у которой не нулевой статус, либо, если все команды завершились успешно, возвращает 0.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

BASH

Если нужно, чтобы exit status конвейера был изменен на противоположный, то для этого нужно …

A

Пере конвейером поставить !

Пример:

! ./скрипт_1 |& ./скрипт_2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

BASH

[1] Как узнать системное и пользовательское время, потраченное на работу конвейера?

[2] То же самое, но в формате POSIX?

A

[1] Поставить перед конвейером time

Пример:
$ time ./first | ./second
real 0m0,004s
user 0m0,001s
sys 0m0,005s

[2] Поставить после time ключ -p

Пример:
$ time -p ./first | ./second
real 0,00
user 0,00
sys 0,00

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

BASH

Когда bash в posix mode, он не распознает time как ключевое слово, если …

A

если следующий токен начинается с -

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

BASH

[1] Что такое список (list)?

[2] Расписать приоритет операторов.

A

[1] Список - последовательность из одного или более конвейеров, разделенных одним из следующих операторов:
;
&
&&
||
и, опционально, завершающихся одним из следующих символов:
;
&

<newline>

[2] (из этих операторов && и || имеют равный приоритет, затем идут ; и & также с равным приоритетом)

Для разделения команд в списке, вместо символа ; может использоваться несколько newlines.
</newline>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

BASH

[1] (в том числе, и в контексте списка) Для того, чтобы команда выполнялась в фоновом режиме, нужно …

[2] Что из себя представляет фоновый режим?

A

[1] в конце команды поставить символ &.

[2] Shell выполняет команду в фоновом режиме (background) в порожденном интерпретаторе (subshell) (shell не будет ждать завершения команды и вернет статус 0, т.е. команды будут в асинхронном режиме).

17
Q

BASH

(в том числе, и в контексте списка) Для того, чтобы команды выполнялись последовательно, нужно …

A

разделить их символом ;

Тогда в списке return status = exit status последней выполненной команды.

18
Q

BASH

Как сделать так, чтобы команда_2 выполнялась тогда, и только тогда, когда команда_1 возвращает exit status = 0 ?

A

команда_1 && команда_2

19
Q

BASH

Как сделать так, чтобы команда_2 выполнялась тогда, и только тогда, когда команда_1 возвращает exit status != 0 ?

A

команда_1 || команда_2

20
Q

BASH

в bash AND и OR обозначаются как …

A

&& и ||

21
Q

BASH

команда_1 && команда_2

Какое значение принимает выходной статус?

A

Принимает значение выходного статуса последней выполненной команды.

22
Q

BASH

команда_1 || команда_2

Какое значение принимает выходной статус?

A

Принимает значение выходного статуса последней выполненной команды.

23
Q

BASH

Виды составных команд (4) - синтаксис, особенности выполнения.

A

[1] (list)

Выполняется в subshell environment. Действия, меняющие переменные и среду командного интерпретатора, не действуют после окончания команды.
Код возврата - код возврата list.

[2] { list; }

Выполняется в текущей оболочке.
List должен закончиться символом ; или newline.
Символы { и } отделяются от остальных пробелами или другими метасимволами.
Код возврата - код возврата list.

[3] ((expression))

Арифметические вычисления.
Если вычисленное значение != 0, то возвращает 0, в противном случае возвращает 1.
((expression)) полностью эквивалентно let “expression”.

[4] [[ expression ]]

Условное выражение, в зависимости от соблюдения или не соблюдения условия возвращающее 0 или 1 соответственно.
НЕ ВЫПОЛНЯЕТСЯ:
1. разделение слов
2. подстановка pathname
ВЫПОЛНЯЕТСЯ:
1. подстановка ~
2. подстановка значений параметров и переменных
3. арифметическая подстановка
4. подстановка результатов команд и подстановка процессов
5. удаление кавычек.

Условные операторы ( к примеру -f) должны быть без кавычек.
Операторы < и > сортируют по алфавиту.

24
Q

BASH

При проверке на равенство (==) и не равенство (!=), что возвращается?

A

Успех = 0

Не успех = 1

25
Q

п-BASH

Оператор =~

[1] Что делает?

[2] Какой приоритет?

A

[1] Выражение: строка_1 =~ строка_2 сравнивает строки, интерпретируя строка_1 как расширенное регуляторное выражение POSIX (ищет строку в подстроке).
Равенство - возвращает 0, не равно - возвращает 1. Синтаксическая ошибка - возвращает 2.
С опцией nocasematch - сравнения без учета регистра букв.

[2] Такой же, как и у == и !=

26
Q

п-BASH

Оператор для сравнения строк, используя расширенные регуляторные выражения.

A

=~

Выражение: строка_1 =~ строка_2

Сравнивает строки, интерпретируя строка_2 как расширенное регуляторное выражение POSIX (ищет строку в подстроке)
Равенство - возвращает 0, не равно - возвращает 1. Синтаксическая ошибка - возвращает 2.
С опцией nocasematch - сравнения без учета регистра букв.

27
Q

BASH

Вернуть значение выражения

A

( выражение )

28
Q

BASH

Вернуть True, если выражение False.

A

! выражение

29
Q

BASH

Вернуть True, если выражение_1 и выражение_2 возвращают True.

A

выражение_1 && выражение_2

Если результат выражения_1 определяет возвращаемое значение, то выражение_2 не вычисляется.

30
Q

BASH

Вернуть True, если выражение_1 True или выражение_2 True.

A

выражение_1 || выражение_2

Если результат выражения_1 определяет возвращаемое значение, то выражение_2 не вычисляется.

31
Q

BASH

Оператор select

A

select переменная in список
do
() блок команд
() break
done

Оператор select выводит в столбик все пары:
номер) значение_из_списка
(номера - целые положительные числа, начиная с 1).
после чего идет предложение ко вводу, обозначенное как:
#?
введя номер, будет выполнен блок команд, в рамках выполнения которого, переменная из заголовка select будет равна значению, которое соответствует введенному номеру (номер + <Enter> для окончания ввода).
Если нажать <Enter>, ничего не введя, то select будет запущен заново.
Если ввести EOF - select будет выполнен.
Любые другие значения, которых нет в списке заголовка select, приведут к тому, что переменной из заголовка будет присвоено значение null (пустота).
Если в конце блока команд не будет break, то, после выполнения этого блока команд, будет новый "цикл" оператора select.
PS3 - переменная, которая хранит значение приглашения ко вводу.
REPLY - переменная, которая хранит значение выбранного номера.</Enter></Enter>

32
Q

BASH

Переменная, которая хранит значение приглашения ко вводу для оператора select.

A

PS3

33
Q

BASH

Переменная, которая хранит значение выбранного номера (для оператора select).

A

REPLY

34
Q

н-BASH

Оператор case

A

case переменная in
значение_1) команда_1 ;;
значение_2) команда_2 ;;

значение_n) команда_n ;;
esac

Завершение case после выполнения блока команд:

значение_1) команда_1 ;;

Выполнение следующего блока (только одного следующего) команд при завершении текущего (без проверки совпадения переменной):

значение_1) команда_1 ;&

35
Q

BASH

while

A

while выражение
do
() блок кода
done

Цикл, в каждой итерации которого, если выражение возвращает статус 0 (т.е. выражение верное и.т.д.), то исполняется блок кода.

36
Q

BASH

until

A

until выражение
do
() блок кода
done

Цикл, в каждой итерации которого, если выражение возвращает статус 1 (т.е. выражение не верное и.т.д.), то исполняется блок кода.

37
Q

BASH
[1] Что такое сопроцес?

[2] Сделать сопроцесс с именем.

A

[1] Сопроцесс выполняется асинхронно в subshell, как если бы команда выполнялась с символом & в конце, с двухсторонней трубой, установленной между оболочкой и сопроцессом.

[2] coproc [имя] [команда] [перенаправление]

Сопроцессу можно задать имя.
Без указания имени сопроцесс будет называться COPROC.

38
Q

BASH

Какое имя будет по умолчанию назначено сопроцессу, если при его создании имя не было указано?

A

COPROC.