- `!!` - вся команда, включая аргументы (попробуйте `sudo !!`, если забыли, что команде требуются права суперпользователя),
- `$_` - последний аргумент последней команды (в терминале попробуйте нажать `Esc .` или `Alt+`).
- `$_` - последний аргумент последней команды (в терминале попробуйте нажать `Esc .` или `Alt+`).
В терминале также доступна команда `!!`. Попробуйте `sudo !!`, если забыли, что команде требуются права суперпользователя). Команда `!!` будет работать в скрипте только, если в начале присутствует `set -H`, включающая работу с историей. По умолчанию это возможность включена для интерактивного взаимодействия.
Напишите скрипт, который создает каталог, а затем переходит в него, создаёт в нём файл и записывает в него значения всех специальных переменных. Путь к каталогу должен быть передан в качестве первого аргумента.
Напишите скрипт, который создает каталог, а затем переходит в него, создаёт в нём файл и записывает в него значения всех специальных переменных. Путь к каталогу должен быть передан в качестве первого аргумента.
### 4.
### 4.
@ -91,7 +92,7 @@ echo_arguments () {
### 5.
### 5.
Функции выполняются в текущей среде оболочке, тогда как скрипты выполняются в своем собственном процессе.
Функции выполняются в текущей среде оболочке, тогда как скрипты выполняются в своем собственном процессе.
Проверьте, что функции могут изменять переменные среды, например, изменить текущий каталог, тогда как скрипт не может. Напишите скрипт, в котором инициализируются две переменные `A` и `B`. Перед одной из них указывается `export`. Выполните скрипт и посмотрите на выдачу команды `env`. Выполните файл командой `source` (документация в `source --help` и секции встроенных комманд `man bash`). Какие переменные экспортировались в оболочку?
Проверьте, что функции могут изменять переменные среды, например, изменить текущий каталог, тогда как скрипт не может. Напишите скрипт, в котором инициализируются две переменные `A` и `B`. Перед одной из них указывается `export`. Выполните скрипт и посмотрите на выдачу команды `env`. Выполните файл командой `source` (документация в `source --help` и секции встроенных комманд `man bash`). Какие переменные экспортировались в оболочку?
### 6.
### 6.
Попробуйте условные выражения в скрипте в `if` конструкции:
Попробуйте условные выражения в скрипте в `if` конструкции:
@ -203,7 +204,7 @@ read -r foo < configfile
Cкрипты не обязательно должны быть написаны на `bash` для вызова из терминала. Ядро определяет, что сценарий нужно выполнять с помощью другого интерпретатора вместо командой оболочки, если в начало скрипта включена строка `shebang`. Хорошей практикой является написание строк `shebang`с помощью команды `env`, которая будет разрешаться везде, где эта команда находится в системе, что повышает переносимость ваших сценариев. Например, чтобы определить местоположение `python`, `env` будет использовать переменную среды `PATH` при записи `#!/usr/bin/env python`. Если у вас установлено несколько версий Python, то команда `/usr/bin/env` обеспечит использование интерпретатора, который стоит первым в `$PATH` окружения. Альтернативой может быть жесткая привязка вида `#!/usr/bin/python` что тоже нормально, но менее гибко.
Cкрипты не обязательно должны быть написаны на `bash` для вызова из терминала. Ядро определяет, что сценарий нужно выполнять с помощью другого интерпретатора вместо командой оболочки, если в начало скрипта включена строка `shebang`. Хорошей практикой является написание строк `shebang`с помощью команды `env`, которая будет разрешаться везде, где эта команда находится в системе, что повышает переносимость ваших сценариев. Например, чтобы определить местоположение `python`, `env` будет использовать переменную среды `PATH` при записи `#!/usr/bin/env python`. Если у вас установлено несколько версий Python, то команда `/usr/bin/env` обеспечит использование интерпретатора, который стоит первым в `$PATH` окружения. Альтернативой может быть жесткая привязка вида `#!/usr/bin/python` что тоже нормально, но менее гибко.
Напишите скрипт, который выполняет следующий код:
Напишите скрипт, который выполняет следующий код:
```bash
```python
import sys
import sys
for arg in reversed(sys.argv[1:]):
for arg in reversed(sys.argv[1:]):
print(arg)
print(arg)
@ -228,13 +229,13 @@ echo "Everything went according to plan"
### 12.
### 12.
Выберите любые две машины под вашим контролем, имеющие доступ друг к другу по сети, и создайте на каждой машине папку `/data/`с заданными правами и владельцем `-rwxr-xr-x root root`. Выполните задание в соответствие с лучшими практиками для написания скриптов. В задачи скрипта входят:
Выберите любые две машины под вашим контролем, имеющие доступ друг к другу по сети, и создайте на каждой машине папку `/data/`с заданными правами и владельцем `-rwxr-xr-x root root`. Выполните задание в соответствие с лучшими практиками для написания скриптов. В задачи скрипта входят:
- создание пользователя на двух машинах с домашними директориями и интервретатором `bash` по умолчанию,
- создание пользователя на двух машинах с домашними директориями и интерпретатором `bash` по умолчанию,
- создание для пользователя папки в `/data/`с доступом только её владельцу,
- создание для пользователя папки в `/data/`с доступом только её владельцу,
- создание ссылки в домашней директории на директорию в `/data/`,
- создание ссылки в домашней директории на директорию в `/data/`,
- настройки беспарольного перемещения между машинами:
- настройки беспарольного перемещения между машинами: