Added tasks for bash scripts lesson.

pull/1/head
Vladimir Protsenko 2 years ago
parent a8750b60ee
commit e240d73289

@ -18,7 +18,7 @@ echo "$date: The claim that \"$claim\" is true if and only if $claim."
### 2. ### 2.
Напишите функцию в скрипте, которая создает каталог, путь к которому передан в качестве первого аргумента и переходит в него. Проверьте работу функции в этом же файле. Работает ли функция за пределами контекста скрипта? Напишите функцию в скрипте, которая создает каталог, путь к которому передан в качестве первого аргумента и переходит в него. Проверьте работу функции в этом же файле. Работает ли функция за пределами контекста скрипта?
``` ```bash
$ cat 2.sh $ cat 2.sh
mkdir_cd () { mkdir_cd () {
mkdir -p $1 mkdir -p $1
@ -32,7 +32,7 @@ current dir: /tmp/1/2/3/4/5
stud@stud15:~$ stud@stud15:~$
``` ```
После выполнения скрипта текущая директория не изменилась. После выполнения скрипта текущая директория не изменилась.
``` ```bash
$ mkdir_cd () { $ mkdir_cd () {
mkdir -p $1 mkdir -p $1
cd $1 cd $1
@ -63,7 +63,7 @@ $ diff <(cat buylist) <(cat bought)
### 4. ### 4.
Попробуйте условные выражения в скрипте в if конструкции: Попробуйте условные выражения в скрипте в if конструкции:
``` ```bash
$ cat 4.sh $ cat 4.sh
if [[ true && true ]] if [[ true && true ]]
then then
@ -81,7 +81,7 @@ True
### 5. ### 5.
Напишите скрипт, который проходит по всем файлам, переданным в качестве аргументов, и ищет в них строку hello. Перенаправьте grep `STDOUT` и `STDERR` в специальный файл `/dev/null`. Для каждого файла в if создайте файл с содержимым `hello`, если `grep` завершился с ошибкой. Напишите скрипт, который проходит по всем файлам, переданным в качестве аргументов, и ищет в них строку hello. Перенаправьте grep `STDOUT` и `STDERR` в специальный файл `/dev/null`. Для каждого файла в if создайте файл с содержимым `hello`, если `grep` завершился с ошибкой.
``` ```bash
$ cat 5.sh $ cat 5.sh
for f in $@; do for f in $@; do
grep hello $f 2> /dev/null 1> /dev/null grep hello $f 2> /dev/null 1> /dev/null
@ -101,7 +101,7 @@ $ grep hello /tmp/* 2> /dev/null
### 6. ### 6.
Установите пакет shellcheck и проверьте написанный вами ранее скрипт одноименной командой. Установите пакет shellcheck и проверьте написанный вами ранее скрипт одноименной командой.
``` ```bash
$ shellcheck 5.sh $ shellcheck 5.sh
In 5.sh line 1: In 5.sh line 1:
@ -146,7 +146,7 @@ For more information:
### 7. ### 7.
Напишите скрипт, который выполняет следующий код: Напишите скрипт, который выполняет следующий код:
``` ```bash
$ cat ./7.sh $ cat ./7.sh
#!/usr/bin/env python #!/usr/bin/env python
import sys import sys
@ -164,7 +164,7 @@ $ ./7.sh 1 2 3 4 5
Функции выполняются в текущей среде оболочке, тогда как скрипты выполняются в своем собственном процессе. Функции выполняются в текущей среде оболочке, тогда как скрипты выполняются в своем собственном процессе.
Проверьте, что функции могут изменять переменные среды, например, изменить текущий каталог, тогда как скрипт не может. Напишите скрипт, в котором инициализируются две переменные `A` и `B`. Перед одной из них указывается `export `. Выполните скрипт и посмотрите на выдачу команды `env`. Выполните файл командой source (source --help). Какие переменные экспортировались в оболочку? Проверьте, что функции могут изменять переменные среды, например, изменить текущий каталог, тогда как скрипт не может. Напишите скрипт, в котором инициализируются две переменные `A` и `B`. Перед одной из них указывается `export `. Выполните скрипт и посмотрите на выдачу команды `env`. Выполните файл командой source (source --help). Какие переменные экспортировались в оболочку?
``` ```bash
$ cat 8.sh $ cat 8.sh
#!/bin/bash #!/bin/bash
A=1 A=1
@ -178,7 +178,7 @@ B=2
### 9. ### 9.
Напишите сценарий bash, который запускает следующий сценарий до тех пор, пока он не завершится аварийно, записывает стандартный вывод и потоки ошибок в файлы и печатает все в конце. Напишите сценарий bash, который запускает следующий сценарий до тех пор, пока он не завершится аварийно, записывает стандартный вывод и потоки ошибок в файлы и печатает все в конце.
``` ```bash
stud@stud15:~$ cat random_bug_script.sh stud@stud15:~$ cat random_bug_script.sh
#!/usr/bin/env bash #!/usr/bin/env bash
@ -260,7 +260,7 @@ The error was using magic numbers
``` ```
Бонусный балл, за то, что вы можете сообщить, сколько запусков потребовалось для сбоя сценария. Бонусный балл, за то, что вы можете сообщить, сколько запусков потребовалось для сбоя сценария.
``` ```bash
stud@stud15:~$ cat mean.sh stud@stud15:~$ cat mean.sh
#!/bin/bash #!/bin/bash
script=$1 script=$1
@ -338,7 +338,7 @@ Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
(if you think this is a mistake, you may want to use -f option) (if you think this is a mistake, you may want to use -f option)
``` ```
``` ```bash
root@stud15:~# cat create_user.sh root@stud15:~# cat create_user.sh
#!/bin/bash #!/bin/bash
@ -381,7 +381,9 @@ done
root@stud15:~# cat nodes root@stud15:~# cat nodes
10.160.179.25 10.160.179.25
10.160.179.55 10.160.179.55
```
```
root@stud15:~# ./create_user.sh nodes user6 root@stud15:~# ./create_user.sh nodes user6
Generating public/private ed25519 key pair. Generating public/private ed25519 key pair.
Your identification has been saved in /root/users.ssh/user6/id_ed25519 Your identification has been saved in /root/users.ssh/user6/id_ed25519
@ -465,4 +467,3 @@ drwx------ 2 user4 user4 4096 сен 15 11:42 user4
drwx------ 2 user5 user5 4096 сен 15 11:44 user5 drwx------ 2 user5 user5 4096 сен 15 11:44 user5
drwx------ 2 user6 user6 4096 сен 15 11:47 user6 drwx------ 2 user6 user6 4096 сен 15 11:47 user6
``` ```

Loading…
Cancel
Save