From f1768dd1dcbdbd643f895aeff4c68295db2be70f Mon Sep 17 00:00:00 2001 From: vlpr Date: Mon, 16 Oct 2023 16:45:18 +0000 Subject: [PATCH] fixed typos in 10 --- module1/10_bash_scripts/tasks.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/module1/10_bash_scripts/tasks.md b/module1/10_bash_scripts/tasks.md index 3034b9d..e58f6f6 100644 --- a/module1/10_bash_scripts/tasks.md +++ b/module1/10_bash_scripts/tasks.md @@ -72,9 +72,10 @@ false ; echo "This will always run" - `$#` - количество аргументов, - `$?` - возвращаемый код предыдущей команды, - `$$` - идентификатор процесса текущего скрипта, -- `!!` - вся команда, включая аргументы (попробуйте `sudo !!`, если забыли, что команде требуются права суперпользователя), - `$_` - последний аргумент последней команды (в терминале попробуйте нажать `Esc .` или `Alt+`). +В терминале также доступна команда `!!`. Попробуйте `sudo !!`, если забыли, что команде требуются права суперпользователя). Команда `!!` будет работать в скрипте только, если в начале присутствует `set -H`, включающая работу с историей. По умолчанию это возможность включена для интерактивного взаимодействия. + Напишите скрипт, который создает каталог, а затем переходит в него, создаёт в нём файл и записывает в него значения всех специальных переменных. Путь к каталогу должен быть передан в качестве первого аргумента. ### 4. @@ -91,7 +92,7 @@ echo_arguments () { ### 5. Функции выполняются в текущей среде оболочке, тогда как скрипты выполняются в своем собственном процессе. -Проверьте, что функции могут изменять переменные среды, например, изменить текущий каталог, тогда как скрипт не может. Напишите скрипт, в котором инициализируются две переменные `A` и `B`. Перед одной из них указывается `export `. Выполните скрипт и посмотрите на выдачу команды `env`. Выполните файл командой `source` (документация в `source --help` и секции встроенных комманд `man bash`). Какие переменные экспортировались в оболочку? +Проверьте, что функции могут изменять переменные среды, например, изменить текущий каталог, тогда как скрипт не может. Напишите скрипт, в котором инициализируются две переменные `A` и `B`. Перед одной из них указывается `export`. Выполните скрипт и посмотрите на выдачу команды `env`. Выполните файл командой `source` (документация в `source --help` и секции встроенных комманд `man bash`). Какие переменные экспортировались в оболочку? ### 6. Попробуйте условные выражения в скрипте в `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` что тоже нормально, но менее гибко. Напишите скрипт, который выполняет следующий код: -```bash +```python import sys for arg in reversed(sys.argv[1:]): print(arg) @@ -228,13 +229,13 @@ echo "Everything went according to plan" ### 12. Выберите любые две машины под вашим контролем, имеющие доступ друг к другу по сети, и создайте на каждой машине папку `/data/` с заданными правами и владельцем `-rwxr-xr-x root root`. Выполните задание в соответствие с лучшими практиками для написания скриптов. В задачи скрипта входят: -- создание пользователя на двух машинах с домашними директориями и интервретатором `bash` по умолчанию, +- создание пользователя на двух машинах с домашними директориями и интерпретатором `bash` по умолчанию, - создание для пользователя папки в `/data/` с доступом только её владельцу, - создание ссылки в домашней директории на директорию в `/data/`, - настройки беспарольного перемещения между машинами: 1. генерирация пользователю ключа `ed25519`, 2. рассылка по машинам, - 3. регистрирация ключа в списке авторизованных. + 3. регистрация ключа в списке авторизованных. ## Лучшие практики написания скриптов