logo

Приклади сценаріїв оболонки

Для всіх дистрибутивів Linux сценарій оболонки — це як чарівна паличка, яка автоматизує процес, економить час користувачів і підвищує продуктивність. У цьому навчальному посібнику зі створення сценаріїв ви познайомитеся з 25 плюс прикладами сценаріїв.

Але перш ніж ми перейдемо до теми сценарій оболонки приклади, давайте розберемося зі сценарієм оболонки та реальними випадками використання сценаріїв оболонки.

Що таке Shell Script?

Ну, оболонка - це a CLI ( інтерпретатор командного рядка ), який запускається в текстовому вікні, де користувачі можуть керувати та виконувати команди оболонки. З іншого боку, процес написання набору команд для виконання в системі Linux. Файл, який містить такі інструкції, називається сценарієм bash.



Використання сценаріїв оболонки

Нижче наведено деякі поширені способи використання сценарію оболонки:

  • Автоматизація завдань – Його можна використовувати для автоматизації повторюваних завдань, таких як звичайне резервне копіювання та завдання встановлення програмного забезпечення.
  • Налаштування – Можна використовувати сценарії оболонки, щоб створити середовище командного рядка та легко виконувати завдання відповідно до потреб.
  • Керування файлами – Сценарії оболонки також можна використовувати для керування та маніпулювання файлами та каталогами, наприклад для переміщення, копіювання, перейменування або видалення файлів.

Приклади сценаріїв оболонки в Linux

1) Що означає символ (#!) на початку сценарію оболонки?

The шибання (#!) на початку сценарію вказує інтерпретатор, який слід використовувати для виконання сценарію. Він повідомляє системі, яка оболонка чи інтерпретатор має інтерпретувати команди сценарію.

Наприклад: Припустимо, у нас є сценарій з назвою myscript.sh написаний в оболонці Bash:

пружинні модулі
shebang

shebang

У цьому прикладі:

  • #!/bin/bash на початку сценарію вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
  • Команди echo використовуються для друку повідомлень на термінал.

2) Як запустити сценарій оболонки з командного рядка?

Щоб запустити сценарій оболонки з командного рядка, нам потрібно виконати такі дії:

  • Переконайтеся, що файл сценарію має дозволи на виконання за допомогою команда chmod :
chmod +x myscript.sh>
  • Виконайте сценарій, використовуючи його назву файлу:
./myscript.sh>

Тут треба замінити myscrtipt.sh з назвою вашого сценарію.

3) Напишіть сценарій оболонки, який друкує techcodeview.com на терміналі.

Створіть назву сценарію `myscript.sh` (ми використовуємо ` оскільки ` редактор, ви можете вибрати будь-який редактор)

vim myscript.sh>

#!/bin/bash
# Цей сценарій друкує techcodeview.com на терміналі
луна techcodeview.com

надруковане ім'я

надруковане ім'я

Ми робимо наш сценарій виконуваним за допомогою `chmod +x`, потім виконуємо за допомогою `./myscipt.sh` і отримуємо бажаний результат techcodeview.com.

4) Поясніть призначення команди echo в сценаріях оболонки.

The команда echo використовується для відображення тексту або змінних на терміналі. Він зазвичай використовується для друку повідомлень, значень змінних і генерування вихідних даних програми.

434

команда echo

У цьому прикладі ми виконали `echo` на терміналі безпосередньо, оскільки він працює так само в сценарії оболонки.

5) Як ви можете призначити значення змінній у сценарії оболонки?

Змінним присвоюються значення за допомогою оператора присвоювання =.

Наприклад:

#!/bin/bash
# Присвоєння значення змінній
ім'я=Джаєш
вік=21
echo $name $age

Пояснення:

  • Змінній name присвоєно значення Jayesh.
  • Змінній віку присвоєно значення 21.
  • echo використовується для друку, а `$name` `$age` використовується для виклику значення, що зберігається в змінних.

435

6) Напишіть сценарій оболонки, який приймає ім’я користувача як вхідні дані та вітає його.

Створіть назву сценарію `example.sh`.

#!/bin/bash
# Запитайте в користувача ім'я
echo Як тебе звуть?
прочитати назву
# Привітайте користувача
echo Привіт, $name! Приємно познайомитись.

Пояснення:

  • #!/bin/bash: це рядок shebang. Він повідомляє системі використовувати інтерпретатор Bash для виконання сценарію.
  • # Запитайте в користувача ім'я: це коментар. Він надає контекст про майбутній код. Коментарі ігноруються перекладачем.
  • echo Як вас звати?: Команда echo використовується для відображення тексту в подвійних лапках на терміналі.
  • read name: команда read очікує, поки користувач введе текст, і зберігає його в імені змінної.
  • echo Привіт, $name! Приємно познайомитися.: цей рядок використовує команду echo для друку вітального повідомлення, яке містить значення змінної name, яке було зібрано з введених користувачем даних.

436

7) Як додати коментарі до сценарію оболонки?

Коментарі в сценаріях оболонки використовуються для надання пояснень або контексту до коду. Вони ігноруються перекладачем і призначені лише для людей, які читають сценарій. Ви можете додавати коментарі за допомогою символу #.

#!/bin/bash
# Це коментар, що пояснює мету сценарію
відлуння gfg

8) Створіть сценарій оболонки, який перевіряє, чи існує файл у поточному каталозі.

Ось сценарій, який перевіряє, чи існує файл під назвою example.txt у поточному каталозі:

#!/bin/bash
file=example.txt
# Перевірте, чи файл існує
if [ -e $file ]; потім
echo Файл існує: $file
інше
echo Файл не знайдено: $file
бути

Пояснення:

  1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
  2. file=example.txt: цей рядок визначає файл змінної та присвоює йому значення example.txt. Ви можете замінити це назвою файлу, який потрібно перевірити.
  3. if [ -e $file ]; then: Цей рядок починає оператор if. Умова [ -e $file ] перевіряє, чи існує файл, визначений значенням змінної file. Прапор -e використовується для перевірки існування файлу.
  4. echo Файл існує: $file: якщо умова вірна (тобто файл існує), цей рядок друкує повідомлення про те, що файл існує, разом із назвою файлу.
  5. else: якщо умова хибна (тобто файл не існує), сценарій виконує код у гілці else.
  6. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено, разом із назвою файлу.
  7. fi: цей рядок позначає кінець оператора if.
Пошук файлу

Пошук файлу

9) Яка різниця між одинарними лапками (‘) і подвійними лапками () у сценаріях оболонки?

Одинарні лапки (‘) і подвійні лапки () використовуються для включення рядків у сценарії оболонки, але вони мають різну поведінку:

  • Одинарні лапки: усе, що знаходиться в одинарних лапках, розглядається як літеральний рядок. Імена змінних і більшість спеціальних символів не розгортаються.
  • Подвійні лапки: змінні та певні спеціальні символи в подвійних лапках розгортаються. Вміст підлягає підстановці змінних і підстановці команд.

#!/bin/bash

abcd=Привіт
echo ‘$abcd’ # Вихід: $abcd
echo $abcd # Вихід: Привіт

10) Як ви можете використовувати аргументи командного рядка в сценарії оболонки?

Аргументи командного рядка це значення, які надаються сценарію під час його виконання. До них можна отримати доступ у сценарії за допомогою спеціальних змінних, таких як , тощо, де представляє перший аргумент, представляє другий аргумент і так далі.

Наприклад: Якщо ім'я нашого сценарію в `example.sh`

#!/bin/bash

echo Назва сценарію:

Для всіх дистрибутивів Linux сценарій оболонки — це як чарівна паличка, яка автоматизує процес, економить час користувачів і підвищує продуктивність. У цьому навчальному посібнику зі створення сценаріїв ви познайомитеся з 25 плюс прикладами сценаріїв.

Але перш ніж ми перейдемо до теми сценарій оболонки приклади, давайте розберемося зі сценарієм оболонки та реальними випадками використання сценаріїв оболонки.

Що таке Shell Script?

Ну, оболонка - це a CLI ( інтерпретатор командного рядка ), який запускається в текстовому вікні, де користувачі можуть керувати та виконувати команди оболонки. З іншого боку, процес написання набору команд для виконання в системі Linux. Файл, який містить такі інструкції, називається сценарієм bash.

Використання сценаріїв оболонки

Нижче наведено деякі поширені способи використання сценарію оболонки:

  • Автоматизація завдань – Його можна використовувати для автоматизації повторюваних завдань, таких як звичайне резервне копіювання та завдання встановлення програмного забезпечення.
  • Налаштування – Можна використовувати сценарії оболонки, щоб створити середовище командного рядка та легко виконувати завдання відповідно до потреб.
  • Керування файлами – Сценарії оболонки також можна використовувати для керування та маніпулювання файлами та каталогами, наприклад для переміщення, копіювання, перейменування або видалення файлів.

Приклади сценаріїв оболонки в Linux

1) Що означає символ (#!) на початку сценарію оболонки?

The шибання (#!) на початку сценарію вказує інтерпретатор, який слід використовувати для виконання сценарію. Він повідомляє системі, яка оболонка чи інтерпретатор має інтерпретувати команди сценарію.

Наприклад: Припустимо, у нас є сценарій з назвою myscript.sh написаний в оболонці Bash:

shebang

shebang

У цьому прикладі:

  • #!/bin/bash на початку сценарію вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
  • Команди echo використовуються для друку повідомлень на термінал.

2) Як запустити сценарій оболонки з командного рядка?

Щоб запустити сценарій оболонки з командного рядка, нам потрібно виконати такі дії:

  • Переконайтеся, що файл сценарію має дозволи на виконання за допомогою команда chmod :
chmod +x myscript.sh>
  • Виконайте сценарій, використовуючи його назву файлу:
./myscript.sh>

Тут треба замінити myscrtipt.sh з назвою вашого сценарію.

3) Напишіть сценарій оболонки, який друкує techcodeview.com на терміналі.

Створіть назву сценарію `myscript.sh` (ми використовуємо ` оскільки ` редактор, ви можете вибрати будь-який редактор)

vim myscript.sh>

#!/bin/bash
# Цей сценарій друкує techcodeview.com на терміналі
луна techcodeview.com

надруковане ім'я

надруковане ім'я

Ми робимо наш сценарій виконуваним за допомогою `chmod +x`, потім виконуємо за допомогою `./myscipt.sh` і отримуємо бажаний результат techcodeview.com.

4) Поясніть призначення команди echo в сценаріях оболонки.

The команда echo використовується для відображення тексту або змінних на терміналі. Він зазвичай використовується для друку повідомлень, значень змінних і генерування вихідних даних програми.

434

команда echo

У цьому прикладі ми виконали `echo` на терміналі безпосередньо, оскільки він працює так само в сценарії оболонки.

5) Як ви можете призначити значення змінній у сценарії оболонки?

Змінним присвоюються значення за допомогою оператора присвоювання =.

Наприклад:

#!/bin/bash
# Присвоєння значення змінній
ім'я=Джаєш
вік=21
echo $name $age

Пояснення:

  • Змінній name присвоєно значення Jayesh.
  • Змінній віку присвоєно значення 21.
  • echo використовується для друку, а `$name` `$age` використовується для виклику значення, що зберігається в змінних.

435

6) Напишіть сценарій оболонки, який приймає ім’я користувача як вхідні дані та вітає його.

Створіть назву сценарію `example.sh`.

#!/bin/bash
# Запитайте в користувача ім'я
echo Як тебе звуть?
прочитати назву
# Привітайте користувача
echo Привіт, $name! Приємно познайомитись.

Пояснення:

  • #!/bin/bash: це рядок shebang. Він повідомляє системі використовувати інтерпретатор Bash для виконання сценарію.
  • # Запитайте в користувача ім'я: це коментар. Він надає контекст про майбутній код. Коментарі ігноруються перекладачем.
  • echo Як вас звати?: Команда echo використовується для відображення тексту в подвійних лапках на терміналі.
  • read name: команда read очікує, поки користувач введе текст, і зберігає його в імені змінної.
  • echo Привіт, $name! Приємно познайомитися.: цей рядок використовує команду echo для друку вітального повідомлення, яке містить значення змінної name, яке було зібрано з введених користувачем даних.

436

7) Як додати коментарі до сценарію оболонки?

Коментарі в сценаріях оболонки використовуються для надання пояснень або контексту до коду. Вони ігноруються перекладачем і призначені лише для людей, які читають сценарій. Ви можете додавати коментарі за допомогою символу #.

#!/bin/bash
# Це коментар, що пояснює мету сценарію
відлуння gfg

8) Створіть сценарій оболонки, який перевіряє, чи існує файл у поточному каталозі.

Ось сценарій, який перевіряє, чи існує файл під назвою example.txt у поточному каталозі:

#!/bin/bash
file=example.txt
# Перевірте, чи файл існує
if [ -e $file ]; потім
echo Файл існує: $file
інше
echo Файл не знайдено: $file
бути

Пояснення:

  1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
  2. file=example.txt: цей рядок визначає файл змінної та присвоює йому значення example.txt. Ви можете замінити це назвою файлу, який потрібно перевірити.
  3. if [ -e $file ]; then: Цей рядок починає оператор if. Умова [ -e $file ] перевіряє, чи існує файл, визначений значенням змінної file. Прапор -e використовується для перевірки існування файлу.
  4. echo Файл існує: $file: якщо умова вірна (тобто файл існує), цей рядок друкує повідомлення про те, що файл існує, разом із назвою файлу.
  5. else: якщо умова хибна (тобто файл не існує), сценарій виконує код у гілці else.
  6. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено, разом із назвою файлу.
  7. fi: цей рядок позначає кінець оператора if.
Пошук файлу

Пошук файлу

9) Яка різниця між одинарними лапками (‘) і подвійними лапками () у сценаріях оболонки?

Одинарні лапки (‘) і подвійні лапки () використовуються для включення рядків у сценарії оболонки, але вони мають різну поведінку:

  • Одинарні лапки: усе, що знаходиться в одинарних лапках, розглядається як літеральний рядок. Імена змінних і більшість спеціальних символів не розгортаються.
  • Подвійні лапки: змінні та певні спеціальні символи в подвійних лапках розгортаються. Вміст підлягає підстановці змінних і підстановці команд.

#!/bin/bash

abcd=Привіт
echo ‘$abcd’ # Вихід: $abcd
echo $abcd # Вихід: Привіт

10) Як ви можете використовувати аргументи командного рядка в сценарії оболонки?

Аргументи командного рядка це значення, які надаються сценарію під час його виконання. До них можна отримати доступ у сценарії за допомогою спеціальних змінних, таких як $1, $2 тощо, де $1 представляє перший аргумент, $2 представляє другий аргумент і так далі.

Наприклад: Якщо ім'я нашого сценарію в `example.sh`

#!/bin/bash

echo Назва сценарію: $0
echo Перший аргумент: $1
echo Другий аргумент: $2

Якщо ми запустимо сценарій із `.example.sh hello_1 hello_2`, він виведе:

аргументи cli

аргументи cli

11) Як ви використовуєте цикл for для перебору списку значень?

Створіть назву сценарію `example.sh`.

#!/bin/bash

фрукти=(яблуко банан вишня фінік)
для фруктів у ${fruits[@]}; робити
echo Поточний фрукт: $fruit
зроблено

Пояснення:

Рядок `fruits=` створює масив під назвою fruits із чотирьох елементів: яблуко, банан, вишня та фінік.

  • для фруктів у ${fruits[@]}; do: Цей рядок починає цикл for. Ось що означає кожна частина:
  • for fruit: Це оголошує змінну циклу під назвою fruit. У кожній ітерації циклу fruit буде зберігати значення поточного елемента з масиву fruits.
  • ${fruits[@]}: це розширення масиву, яке бере всі елементи з масиву fruits. Синтаксис ${…} гарантує, що кожен елемент розглядається як окремий елемент.
  • do: це ключове слово позначає початок тіла циклу.
  • echo Поточний плод: $fruit: усередині циклу цей рядок використовує команду echo для відображення поточного значення змінної циклу fruit. Він друкує повідомлення на кшталт Current fruit: apple для кожного фрукта в масиві.
  • done: це ключове слово позначає кінець тіла циклу. Він повідомляє сценарію, що цикл завершено.
для циклу

для циклу

12) Напишіть сценарій оболонки, який обчислює суму цілих чисел від 1 до N за допомогою циклу.

Створіть назву сценарію `example.sh`.

#!/bin/bash

echo Введіть число (N):
читати Н
сума=0
for (( i=1; i<=$N; i++ )); робити
сума=$((сума + i))
зроблено
echo Сума цілих чисел від 1 до $N: $sum

Пояснення:
Сценарій починається з запиту на введення числа (N) за допомогою read. Це число визначить, скільки разів виконується цикл.

  1. Змінна sum ініціалізується рівним 0. Ця змінна відстежуватиме суму цілих чисел.
  2. Цикл for починається з for (( i=1; i<=$N; i++ )). Ця структура циклу використовується для повторення набору дій певну кількість разів, у цьому випадку від 1 до значення N.
  3. Усередині циклу відбуваються такі речі:
    • i=1 встановлює для змінної циклу i значення 1 на початку кожної ітерації.
    • Умова циклу i<=$N перевіряє, чи i все ще менше або дорівнює заданому числу N.
    • Якщо умова виконується, виконується тіло циклу.
    • sum=$((sum + i)) обчислює нове значення sum, додаючи до нього поточне значення i. Це додає цілі числа від 1 до поточного значення i.
  4. Після кожної ітерації i++ збільшує значення i на 1.
  5. Цикл продовжує працювати, доки умова i<=$N не стане помилковою (коли i стане більшим за N).
  6. Після завершення циклу сценарій відображає суму цілих чисел від 1 до введеного числа N.

439

13) Створіть сценарій, який шукатиме певне слово у файлі та підраховуватиме його випадки.

Створіть назву сценарію `word_count.sh`

#!/bin/bash

echo Введіть слово для пошуку:
читати target_word
echo Введіть назву файлу:
прочитати назву файлу
count=$(grep -o -w $target_word $filename | wc -l)
echo Слово «$target_word» з’являється $count разів у «$filename».

Пояснення:

  • echo Введіть слово для пошуку:: Цей рядок відображає повідомлення з проханням до користувача ввести слово, яке він хоче знайти у файлі.
  • read target_word: цей рядок читає введені користувачем дані та зберігає їх у змінній під назвою target_word.
  • echo Введіть ім'я файлу:: Цей рядок відображає повідомлення з проханням до користувача ввести назву файлу, у якому він бажає виконати пошук.
  • read filename: Цей рядок читає введені користувачем дані та зберігає їх у змінній з назвою filename.
  • count=$(grep -o -w $target_word $filename | wc -l): цей рядок виконує основну роботу сценарію. Давайте розберемо це далі:
    • grep -o -w $target_word $filename: Ця частина команди шукає входження target_word у вказаному імені файлу. Параметри -o і -w гарантують, що враховуються лише цілі збіги слів.
    • |: Це канал, який приймає вихідні дані попередньої команди та надсилає їх як вхідні дані для наступної команди.
    • wc -l: ця частина команди використовує команду wc для підрахунку кількості рядків у вхідних даних. Параметр -l спеціально підраховує рядки.
    • Уся команда обчислює кількість входжень target_word у файлі та призначає цю кількість змінній coun

441

14) Поясніть різницю між стандартним виведенням (stdout) і стандартною помилкою (stderr).

Основна відмінність між стандартним виведенням (stdout) і стандартною помилкою (stderr) полягає в наступному:

  • Стандартний вихід (stdout): Це стандартний вихідний потік, куди надходить звичайний вихід команди. Він відображається на терміналі за замовчуванням. Ви можете перенаправити його до файлу за допомогою>.
  • Стандартна помилка (stderr): Це вихідний потік для повідомлень про помилки та попереджень. Він також відображається на терміналі за замовчуванням. Ви можете перенаправити його у файл за допомогою 2>.

15) Поясніть концепцію умовних операторів у сценаріях оболонки.

Умовні оператори в сценаріях оболонки дозволяють нам приймати рішення та контролювати потік нашого сценарію на основі певних умов. Вони дозволяють нашому сценарію виконувати різні набори команд залежно від того, чи є конкретна умова істинною чи хибною. Основними умовними операторами в сценаріях оболонки є оператор if, оператор elif (необов’язковий) і оператор else (необов’язковий).

Ось базова структура умовного оператора в сценаріях оболонки:

якщо [умова]; потім
# Команди для виконання, якщо умова виконується
elif [інша_умова]; потім
# Команди для виконання, якщо another_condition є істинним (необов’язково)
інше
# Команди для виконання, якщо жодна з умов не виконується (необов’язково)
бути

Пояснення:

  • [умова] = Команда, яка оцінює умову та повертає істинний (0) або хибний (ненульовий) статус виходу.
  • then = Це ключове слово, яке вказує, що наступні за ним команди будуть виконані, якщо умова оцінюється як істина.
  • elif = (скорочення від else if) Це розділ, який дозволяє нам вказати додаткові умови для перевірки.
  • else = це розділ, який містить команди, які будуть виконані, якщо жодна з умов не виконується.
  • fi = Це ключове слово, яке позначає кінець умовного блоку.

16) Як ви читаєте рядки з файлу в сценарії оболонки?

до читати рядки з файлу в сценарії оболонки, ми можемо використовувати різні методи, але один з поширених підходів полягає у використанні циклу while у поєднанні з командою read. Ось як ми можемо це зробити:

#!/bin/bash
file=/home/jayeshkumar/jayesh.txt
# Перевірте, чи файл існує
if [ -e $file ]; потім
while IFS= читання рядка -r; робити
echo Читання рядка: $line
# Додайте тут свою логіку обробки
виконано <$файл
інше
echo Файл не знайдено: $file
бути

Пояснення:

  1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
  2. file=/home/jayeshkumar/jayesh.txt: цей рядок визначає файл змінної та призначає повний шлях до файлу jayesh.txt у каталозі /home/jayeshkumar. Змініть цей шлях, щоб відповідати фактичному шляху до файлу, який ви хочете прочитати.
  3. if [ -e $file ]; then: Цей рядок починає оператор if. Він перевіряє, чи існує файл, визначений змінною $file. Прапор -e перевіряє наявність файлу.
  4. while IFS= читання рядка -r; do: цей рядок ініціює цикл while, який читає рядки з файлу.
    • IFS=: IFS (внутрішній роздільник полів) має порожнє значення, щоб зберегти пробіли на початку та в кінці.
    • read -r рядок: це зчитує поточний рядок із файлу та зберігає його у рядку змінної.
  5. echo Прочитаний рядок: $line: цей рядок друкує вміст рядка, який було прочитано з файлу. Змінна $line містить вміст поточного рядка.
  6. # Додайте свою логіку обробки тут: це коментар-заповнювач, де ви можете додати свою власну логіку для обробки кожного рядка. Наприклад, ви можете проаналізувати рядок, отримати інформацію або виконати певні дії на основі вмісту.
  7. done <$file: це позначає кінець циклу while. <$file перенаправляє вміст файлу, який буде прочитано циклом.
  8. else: якщо файл не існує (умова оператора if невірна), сценарій виконує код у гілці else.
  9. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено.
  10. fi: цей рядок позначає кінець оператора if.
читання файлу

читання файлу

Тут ми використали ` pwd `, щоб отримати шлях до поточного каталогу.

17) Напишіть функцію в сценарії оболонки, яка обчислює факториал заданого числа.

Ось такий сценарійобчислити факторіалзаданого числа.

#!/bin/bash
# Визначте функцію для обчислення факторіалу
calculate_factory() {
num=$1
факт=1
for ((i=1; i<=num; i++)); робити
факт=$((факт * i))
зроблено
луна $факт
}
# Запропонувати користувачеві ввести число
echo Введіть число:
читати input_num
# Викличте функцію calculate_factorial із введеним числом
factorial_result=$(calculate_factorial $input_num)
# Відобразити факторний результат
echo Факторіал $input_num: $factorial_result

Пояснення:

  1. Сценарій починається з рядка shebang #!/bin/bash для визначення інтерпретатора.
  2. Calculate_factorial() визначається як функція. Він приймає один аргумент, num, який є числом, факторіал якого потрібно обчислити.
  3. Усередині функції факт ініціалізується рівним 1. Ця змінна зберігатиме факторний результат.
  4. Цикл for повторює від 1 до заданого числа (num). У кожній ітерації він множить поточне значення факту на індекс циклу i.
  5. Після завершення циклу змінна fact містить обчислений факториал.
  6. Сценарій пропонує користувачеві ввести число за допомогою read.
  7. Функція calculate_factorial викликається з числом, наданим користувачем, і результат зберігається в змінній factorial_result.
  8. Нарешті сценарій відображає обчислений факторний результат.
Факторіал

Факторіал

18) Як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки?

У сценарії оболонки ви можете обробляти такі сигнали, як Ctrl+C (також відомий як SIGINT), використовуючи команду trap. Ctrl+C генерує сигнал SIGINT, коли користувач натискає його, щоб перервати запущений сценарій або програму. Використовуючи команду trap, ви можете вказати дії, які мають бути виконані при отриманні певного сигналу. Ось як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки:

#!/bin/bash
прибирати() {
echo Сценарій перервано. Виконання очищення…
# Додайте тут свої дії з очищення
вихід 1
}
# Налаштувати перехоплення для виклику функції очищення, коли отримано Ctrl+C (SIGINT).
очищення пастки SIGINT
# Решта вашого сценарію
луна Бігає…
спати 10
echo Готово.

Обробка сигналів важлива для того, щоб зробити сценарії надійними та забезпечити ефективну обробку несподіваних переривань. Ви можете налаштувати функцію очищення відповідно до ваших конкретних потреб, як-от закриття файлів, зупинка процесів або запис інформації перед виходом зі сценарію.

Пояснення:

  1. #!/bin/bash: цей рядок shebang визначає інтерпретатор, який буде використовуватися для виконання сценарію.
  2. cleanup() { … }: це визначає функцію під назвою cleanup. У цю функцію можна включити будь-які дії, які потрібно виконати, коли сценарій переривається, наприклад закриття файлів, звільнення ресурсів або виконання інших завдань очищення.
  3. trap cleanup SIGINT: Команда trap використовується для налаштування обробника сигналів. У цьому випадку це вказує, що коли отримано сигнал SIGINT (Ctrl+C), слід виконати функцію очищення.
  4. echo Виконується…, sleep 10, echo Finished.: Це лише приклади команд для імітації виконання сценарію.

446

19) Створіть сценарій, який перевіряє та видаляє повторювані рядки в текстовому файлі.

Ось наш сценарій Linux, у якому ми будемо видаляти повторювані рядки з текстового файлу.

#!/bin/bash
input_file=input.txt
вихідний_файл=вихідний.txt
сортувати $input_file | uniq> $output_file
echo Повторювані рядки успішно видалено.

Пояснення:

  1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
  2. Змінна input_file встановлюється на ім’я вхідного файлу, що містить повторювані рядки (змініть це на фактичне ім’я вхідного файлу).
  3. Змінна output_file встановлюється на назву вихідного файлу, з якого буде видалено дублікати (змініть це на бажане ім’я вихідного файлу).
  4. Сценарій використовує команду sort для сортування рядків у вхідному файлі. Сортування рядків гарантує, що повторювані рядки групуються разом.
  5. Потім відсортовані рядки передаються через команду uniq, яка видаляє послідовні повторювані рядки. Вихідні дані цього процесу перенаправляються у вихідний файл.
  6. Після видалення дублікатів сценарій друкує повідомлення про успіх.
видалення повторюваних рядків

видалення повторюваних рядків

Тут ми використовуємо ` кішка `, щоб відобразити текст у текстовому файлі.

20) Напишіть сценарій, який генерує безпечний випадковий пароль.

Ось наш скрипт для створення безпечного випадкового пароля.

#!/bin/bash
# Функція генерації випадкового пароля
generate_password() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# Виклик функції та збереження згенерованого пароля
пароль=$(згенерувати_пароль)
echo Згенерований пароль: $password

Примітка: користувач може відповідно змінити довжину пароля, замінивши число `12`.

Пояснення:

  1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
  2. Функція generate_password призначена для створення випадкового пароля. Ось як це працює:
    • tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
    • fold -w 12 розбиває відфільтровані випадкові дані на рядки по 12 символів у кожному.
    • head -n 1 вибирає перший рядок, фактично надаючи нам випадкову послідовність символів довжиною 12.
  3. Змінній password присвоюється результат виклику функції generate_password.
  4. Нарешті, згенерований пароль відображається за допомогою луни.

448

21) Напишіть сценарій оболонки, який обчислює загальний розмір усіх файлів у каталозі.

Ось сценарій оболонки для обчислення загального розміру всіх файлів у каталозі.

#!/bin/bash
каталог=/шлях/до/вашого/каталогу
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo Загальний розмір файлів у $directory: $total_size

Пояснення:

  1. Сценарій починається з #!/bin/bash shebang, що вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
  2. Змінна каталогу встановлюється на шлях до каталогу, для якого потрібно обчислити загальний розмір файлу. Замініть /path/to/your/directory справжнім шляхом.
  3. Команда du використовується для оцінки використання файлового простору. Використовуються такі варіанти:
    • -c: створити загальну суму.
    • -s: відображати лише загальний розмір зазначеного каталогу.
    • -h: друкувати розміри в зручному для читання форматі (наприклад, КБ, МБ, ГБ).
  4. Вихід du передається до grep total, щоб відфільтрувати рядок, який містить загальний розмір.
  5. awk ‘{print $1}’ використовується для виділення першого поля (загального розміру) з рядка.
  6. Розрахований загальний розмір зберігається в змінній total_size.
  7. Нарешті, сценарій відображає загальний розмір за допомогою echo.
Загальний розмір файлів

Загальний розмір файлів

Тут ми використали ` pwd `, щоб побачити поточний шлях до каталогу.

22) Поясніть різницю між операторами if і elif у сценаріях оболонки.

Особливість `if`Staiftement Заява `elif`
призначення Поясніть різницю між операторами if і elif у сценаріях оболонки. Надає альтернативні умови для перевірки, коли початкова умова if є хибною.
використання Використовується для початкового стану. Використовується після початкової умови if для перевірки додаткових умов.
кількість блоків Може мати лише один блок if. Може мати декілька блоків elif, але лише один блок else (необов’язково).
виконання Виконує блок коду, пов’язаний із оператором if, якщо умова виконується. Якщо умова false, блок else (якщо присутній) виконується (необов’язково). Перевіряє кожну умову elif по порядку. Якщо одна з умов elif виконується, виконується відповідний блок коду, і сценарій завершує роботу з усього умовного блоку. Якщо жодна з умов elif не виконується, виконується блок else (якщо він присутній).
Вкладені структури Може бути вкладено в інші блоки if, elif або else. Не можна вкладати в інший блок elif, але можна використовувати всередині блоку if або else.

Розберемося в цьому на прикладі.

#!/bin/bash
число=5
if [$number -gt 10]; потім
echo $number більше 10
інше
echo $number не більше 10
бути
луна ——–
if [$number -gt 10]; потім
echo $number більше 10
elif [$number -eq 10]; потім
echo $number дорівнює 10
інше
echo $number менше 10
бути

Пояснення:

У цьому прикладі перший блок if перевіряє, чи число більше 10. Якщо ні, він друкує повідомлення про те, що число не більше 10. Другий блок із операторами elif перевіряє кілька умов послідовно, доки одна з них не стане істинною. У цьому випадку, оскільки значення числа дорівнює 5, результатом буде:

if_elif різниця

if_elif різниця

23) Як ви використовуєте цикл while для багаторазового виконання команд?

Цикл while використовується в сценаріях оболонки для багаторазового виконання набору команд, доки виконується певна умова. Цикл продовжує виконувати команди, поки умова не стане помилковою.

Ось основний синтаксис циклу while:

while [умова]; робити
# Команди для виконання
зроблено

Пояснення:

  1. Цикл `while` починається з ключового слова `while`, після якого йде умова, укладена в квадратні дужки `[ ]`.
  2. Тіло циклу, яке містить команди для виконання, укладено в ключові слова `do` і `done`.
  3. Цикл спочатку перевіряє умову. Якщо умова виконується, виконуються команди в тілі циклу. Після виконання тіла циклу умова перевіряється знову, і процес повторюється, доки умова не стане помилковою.

приклад: Якщо ми хочемо надрукувати числа від 1 до 5

#!/bin/bash
лічильник=1
while [$counter -le 5]; робити
echo Номер: $лічильник
лічильник=$((лічильник + 1))
зроблено

Пояснення:

  • Змінна лічильника має значення 1.
  • Цикл while перевіряє, чи значення лічильника менше або дорівнює 5. Поки ця умова виконується, цикл продовжує виконуватися.
  • Усередині циклу поточне значення лічильника друкується за допомогою echo.
  • Лічильник збільшується на 1 за допомогою виразу $((лічильник + 1)).
цикл while

цикл while

24) Створіть сценарій оболонки, який знаходить і перераховує всі порожні файли в каталозі.

Сценарій оболонки, який можна використовувати для пошуку та списку всіх порожніх файлів у каталозі за допомогою команд `find` і `stat`:

#!/bin/bash
каталог=$1″
if [ -z $каталог ]; потім
echo Використання: $0
вихід 1
бути

якщо [! -d $каталог]; потім
echo Помилка: «$directory» не є дійсним каталогом.
вихід 1
бути
echo Порожні файли в $directory:
find $directory -type f -empty

Пояснення:

  1. ` #!/bin/bash `: Це називається shebang, і воно повідомляє операційній системі використовувати оболонку Bash для інтерпретації та виконання сценарію.
  2. ` каталог=$1″ `: цей рядок призначає перший аргумент командного рядка (позначений $1) змінній ` каталог `.
  3. ` if [ -z $каталог ]; потім `: цей рядок починає оператор if, який перевіряє, чи ` каталог ` змінна порожня (-z перевіряє порожній рядок).
  4. ` echo Використання: $0 `: якщо каталог порожній, цей рядок друкує повідомлення про використання, де ` $0 ` представляє назву сценарію.
  5. ` вихід 1 `: цей рядок завершує роботу сценарію з кодом виходу ` 1 `, що вказує на помилку.
  6. ` бути `: цей рядок позначає кінець ` якщо ` заява.
  7. ` якщо [! -d $каталог]; потім `: запускається інший оператор if, щоб перевірити, чи існує наданий каталог (` ` тести для каталогу).
  8. ` echo Помилка: «$directory» не є дійсним каталогом. `: якщо наданий каталог не існує, цей рядок друкує повідомлення про помилку.
  9. ` вихід 1 `: вихід зі сценарію з кодом виходу ` 1 `.
  10. ` бути `: позначає кінець другого ` якщо` заява.
  11. ` echo Порожні файли в $directory: `: якщо наразі все вірно, цей рядок друкує повідомлення про те, що сценарій перерахує порожні файли у вказаному каталозі.
  12. ` find $directory -type f -empty `: у цьому рядку використовується ` знайти ` команда пошуку порожніх файлів (` - порожній `) типу звичайних файлів (` - тип f `) у вказаному каталозі. Потім він перераховує ці порожні файли.
Пошук порожніх файлів

Пошук порожніх файлів

Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях поточного каталогу home/jayeshkumar/

25) Яка мета команди read у сценаріях оболонки?

Команда read у сценаріях оболонки дозволяє сценарію запитувати у вас інформацію. Це як коли комп’ютер задає вам запитання й чекає на відповідь. Це корисно для сценаріїв, які вимагають, щоб ви щось ввели, або коли сценарію потрібно працювати з інформацією з файлів. Команда read допомагає сценарію зупинятися й чекати, що ви введете, а потім він може використовувати цю інформацію для виконання інших завдань у сценарії.

Синтаксис команди read:

read variable_name>

приклад : якщо ми хочемо взяти ім’я як вхідні дані від користувача, щоб надрукувати його.

#!/bin/bash
echo Будь ласка, введіть своє ім'я:
прочитати назву
echo Привіт, $name!

453

прочитати ім

Таким чином, команда read використовується для захоплення введених користувачем даних або даних із файлів у сценаріях оболонки, що робить сценарії більш інтерактивними та універсальними.

26) Напишіть сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

Ось сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

#!/bin/bash
каталог=$1″
if [ -z $каталог ]; потім
echo Використання: $0
вихід 1
бути

якщо [! -d $каталог]; потім

echo Помилка: «$directory» не є дійсним каталогом.
вихід 1
бути

cd $каталог || вихід 1

для файлу в *; робити
if [ -f $file ]; потім
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
бути
зроблено

Пояснення:

  1. #!/bin/bash : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. каталог=$1″ : цей рядок призначає перший аргумент командного рядка каталогу змінних.
  3. if [ -z $каталог ]; потім : цей рядок перевіряє, чи порожня змінна каталогу (під час виконання сценарію не надається аргумент).
  4. echo Використання: $0 : якщо каталог порожній, цей рядок друкує повідомлення про використання з назвою сценарію ($0).
  5. вихід 1 : цей рядок завершує роботу сценарію з кодом виходу 1, що вказує на помилку.
  6. f i: Це означає кінець першого оператора if.
  7. якщо [! -d $каталог]; потім : цей рядок перевіряє, чи не існує вказаного каталогу (-d перевіряє наявність каталогу).
  8. echo Помилка: «$directory» не є дійсним каталогом. : якщо вказаний каталог не існує, цей рядок друкує повідомлення про помилку.
  9. вихід 1 : вихід зі сценарію з кодом виходу 1.
  10. бути : Позначає кінець другого оператора if.
  11. cd $каталог || вихід 1 : змінює поточний робочий каталог на вказаний каталог. Якщо змінити каталог не вдалося (наприклад, каталог не існує), сценарій завершує роботу з кодом помилки.
  12. для файлу в *; зробити: я для файлу в *; зробити: ініціює цикл, який перебирає всі елементи в поточному каталозі (* відповідає всім назвам файлів).
  13. if [ -f $file ]; потім : перевіряє, чи поточний елемент ітерації циклу є звичайним файлом (-f перевіряє звичайний файл).
  14. newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : перетворює поточне ім’я файлу ($file) на нижній регістр за допомогою команди tr і зберігає результат у змінній newname.
  15. [ $file != $newname ] && mv $file $newname : Порівнює оригінальну назву файлу з новою назвою файлу, написаною в нижньому регістрі. Якщо вони різні, він перейменовує файл за допомогою команди mv.
  16. бути : Позначає кінець внутрішнього оператора if.
  17. зроблено : Позначає кінець циклу.

454

Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях до поточного каталогу home/jayeshkumar/test

27) Як можна використовувати арифметичні операції в сценарії оболонки?

Арифметичні операції можна виконувати в сценарії оболонки за допомогою різних вбудованих методів. Оболонка надає механізми для простих арифметичних обчислень за допомогою арифметичного розширення, наприклад:

  1. Арифметичне розширення ($((…)))
  2. Використання команди expr
  3. Використання команди let

Ось наш сценарій Shell, що пояснює всі три методи арифметичних операцій.

#!/bin/bash
num1=10
num2=5

#Арифметичне розширення ($((…)))

результат=$((num1 + num2))
echo Сума: $результат

#Використання команди expr

сума=$(вираз $num1 + $num2)
echo Сума: $сума

#Використання команди let

нехай сума = num1 + num2
echo Сума: $сума

Пояснення:

  1. `#!/bin/bash` : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. `num1=10` і ` num2=5` : ці рядки присвоюють значення 10 і 5 змінним ` num1 ` і ` num2 ` відповідно.
  3. `#Арифметичне розширення ($((…)))` : це коментар, що вказує на початок розділу, який демонструє арифметичне розширення.
  4. `результат=$((num1 + num2))` : цей рядок використовує арифметичне розширення для обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` результат ` змінна.
  5. `echo Sum: $result` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` результат ` змінна.
  6. `#Використання команди expr` : це коментар, що вказує на початок розділу, який демонструє використання ` вираз ` команда арифметичних операцій.
  7. `sum=$(expr $num1 + $num2)` : цей рядок використовує ` вираз ` команда обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` сума ` змінна. Зауважте, що ` вираз Команда ` вимагає пробілів навколо операторів.
  8. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
  9. `#Використання команди let` : це коментар, що вказує на початок розділу, який демонструє використання ` дозволяти ` команда арифметичних операцій.
  10. `нехай сума = num1 + num2″` : цей рядок використовує ` дозволяти ` команда обчислення суми ` num1 ` і ` num2 ` і призначає результат ` сума ` змінна. ` дозволяти Команда ` не вимагає пробілів навколо операторів.
  11. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
арифметика

арифметика

28) Створіть сценарій, який перевіряє, чи доступний хост мережі.

Ось простий сценарій оболонки, який використовує команду ping, щоб перевірити, чи доступний хост мережі:

#!/bin/bash
хост=$1″
якщо [ -z $хост]; потім
echo Використання: $0
вихід 1
бути
ping -c 4 $хост

якщо [ $? -екв 0]; потім
echo $host доступний.
інше
echo $host недоступний.
бути

Пояснення:

  1. Він приймає ім’я хоста або IP-адресу як аргумент і перевіряє, чи надано аргумент.
  2. Якщо аргумент не вказано, відображається повідомлення про використання та завершується робота.
  3. Він використовує команду ping з опцією -c 4 для надсилання чотирьох ехо-запитів ICMP на вказаний хост.
  4. Після виконання команди ping перевіряється статус виходу ($?). Якщо статус виходу дорівнює 0, це означає, що хост доступний і сценарій друкує повідомлення про успіх. В іншому випадку він друкує повідомлення про помилку.

456

Примітка : нам потрібно надати ім’я хоста як аргумент під час виконання сценарію. Тут ми використали google.com

29) Напишіть сценарій оболонки, щоб знайти найбільший елемент у масиві:

Ось сценарій оболонки для пошуку найбільшого елемента в масиві.

#!/bin/bash
# Оголошення масиву
масив=(3 56 24 89 67)

# Ініціалізація змінної для збереження максимального значення, починаючи з першого елемента

макс=${масив[0]}

# Ітерація по масиву

для числа в ${array[@]}; робити

# Порівняти кожен елемент із поточним максимумом

if ((num> max)); потім
max=$num
бути
зроблено

# Вивести максимальне значення

echo Максимальний елемент у масиві: $max

Пояснення:

  1. ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. ` масив=(3 56 24 89 67) `: масив оголошується та ініціалізується значеннями.
  3. ` макс=${масив[0]} `: `max` ініціалізується першим елементом масиву.
  4. ` для числа в ${array[@]}; робити `: цикл `for` використовується для перебору елементів масиву.
  5. ` if ((num> max)); потім `: Оператор `if` перевіряє, чи поточний елемент `num` більший за поточний максимальний `max`.
  6. ` max=$num`: Якщо`num ` більше ніж `max`, `max` оновлюється значенням num.
  7. ` зроблено `: цикл `for` закрито.
  8. ` echo Максимальний елемент у масиві: $max `: нарешті сценарій друкує максимальне значення, знайдене в масиві.
461

найбільше число

30) Напишіть скрипт для обчислення суми елементів у масиві.

#!/bin/bash

# Оголошення масиву

масив=(1 65 22 19 94)

# Ініціалізація змінної для збереження суми

сума=0

# Перебираємо масив і додаємо кожен елемент до суми

для числа в ${array[@]}; робити
am=$((am + am))
зроблено

# Вивести суму

echo Сума елементів у масиві: $sum

Пояснення:

` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.

` масив=(1 65 22 19 94) `: масив оголошується та ініціалізується значеннями.

` сума=0 `:` сума ` ініціалізується нулем, щоб зберегти суму елементів.

` для числа в ${array[@]}; робити `: A ` для Цикл ` використовується для перебору елементів масиву.

` am=$((am + am)) `: усередині циклу кожен елемент ` на одному ` додається до ` сума ` змінна.

` зроблено `: ` для ` цикл закрито.

`echo Сума елементів у масиві: $sum`: Нарешті, скрипт друкує суму всіх елементів у масиві.

462

Сума елементів

Дізнайтеся більше про сценарії оболонки

Висновок

Ми всі фанати знаємо, що сценарій оболонки дуже корисний для підвищення продуктивності роботи, а також економії часу. Отже, у цій статті ми розглянули 30 дуже корисних і найбільш шахрайських прикладів сценаріїв оболонки . Ми сподіваємося, що цей повний посібник із прикладів сценаріїв оболонки допоможе вам зрозуміти все про сценарії оболонки.




echo Перший аргумент:
echo Другий аргумент:

Якщо ми запустимо сценарій із `.example.sh hello_1 hello_2`, він виведе:

аргументи cli

аргументи cli

11) Як ви використовуєте цикл for для перебору списку значень?

Створіть назву сценарію `example.sh`.

#!/bin/bash

фрукти=(яблуко банан вишня фінік)
для фруктів у ${fruits[@]}; робити
echo Поточний фрукт: $fruit
зроблено

Пояснення:

Рядок `fruits=` створює масив під назвою fruits із чотирьох елементів: яблуко, банан, вишня та фінік.

  • для фруктів у ${fruits[@]}; do: Цей рядок починає цикл for. Ось що означає кожна частина:
  • for fruit: Це оголошує змінну циклу під назвою fruit. У кожній ітерації циклу fruit буде зберігати значення поточного елемента з масиву fruits.
  • ${fruits[@]}: це розширення масиву, яке бере всі елементи з масиву fruits. Синтаксис ${…} гарантує, що кожен елемент розглядається як окремий елемент.
  • do: це ключове слово позначає початок тіла циклу.
  • echo Поточний плод: $fruit: усередині циклу цей рядок використовує команду echo для відображення поточного значення змінної циклу fruit. Він друкує повідомлення на кшталт Current fruit: apple для кожного фрукта в масиві.
  • done: це ключове слово позначає кінець тіла циклу. Він повідомляє сценарію, що цикл завершено.
для циклу

для циклу

12) Напишіть сценарій оболонки, який обчислює суму цілих чисел від 1 до N за допомогою циклу.

Створіть назву сценарію `example.sh`.

#!/bin/bash

echo Введіть число (N):
читати Н
сума=0
for (( i=1; i<=$N; i++ )); робити
сума=$((сума + i))
зроблено
echo Сума цілих чисел від 1 до $N: $sum

Пояснення:
Сценарій починається з запиту на введення числа (N) за допомогою read. Це число визначить, скільки разів виконується цикл.

  1. Змінна sum ініціалізується рівним 0. Ця змінна відстежуватиме суму цілих чисел.
  2. Цикл for починається з for (( i=1; i<=$N; i++ )). Ця структура циклу використовується для повторення набору дій певну кількість разів, у цьому випадку від 1 до значення N.
  3. Усередині циклу відбуваються такі речі:
    • i=1 встановлює для змінної циклу i значення 1 на початку кожної ітерації.
    • Умова циклу i<=$N перевіряє, чи i все ще менше або дорівнює заданому числу N.
    • Якщо умова виконується, виконується тіло циклу.
    • sum=$((sum + i)) обчислює нове значення sum, додаючи до нього поточне значення i. Це додає цілі числа від 1 до поточного значення i.
  4. Після кожної ітерації i++ збільшує значення i на 1.
  5. Цикл продовжує працювати, доки умова i<=$N не стане помилковою (коли i стане більшим за N).
  6. Після завершення циклу сценарій відображає суму цілих чисел від 1 до введеного числа N.

439

13) Створіть сценарій, який шукатиме певне слово у файлі та підраховуватиме його випадки.

Створіть назву сценарію `word_count.sh`

#!/bin/bash

echo Введіть слово для пошуку:
читати target_word
echo Введіть назву файлу:
прочитати назву файлу
count=$(grep -o -w $target_word $filename | wc -l)
echo Слово «$target_word» з’являється $count разів у «$filename».

Пояснення:

  • echo Введіть слово для пошуку:: Цей рядок відображає повідомлення з проханням до користувача ввести слово, яке він хоче знайти у файлі.
  • read target_word: цей рядок читає введені користувачем дані та зберігає їх у змінній під назвою target_word.
  • echo Введіть ім'я файлу:: Цей рядок відображає повідомлення з проханням до користувача ввести назву файлу, у якому він бажає виконати пошук.
  • read filename: Цей рядок читає введені користувачем дані та зберігає їх у змінній з назвою filename.
  • count=$(grep -o -w $target_word $filename | wc -l): цей рядок виконує основну роботу сценарію. Давайте розберемо це далі:
    • grep -o -w $target_word $filename: Ця частина команди шукає входження target_word у вказаному імені файлу. Параметри -o і -w гарантують, що враховуються лише цілі збіги слів.
    • |: Це канал, який приймає вихідні дані попередньої команди та надсилає їх як вхідні дані для наступної команди.
    • wc -l: ця частина команди використовує команду wc для підрахунку кількості рядків у вхідних даних. Параметр -l спеціально підраховує рядки.
    • Уся команда обчислює кількість входжень target_word у файлі та призначає цю кількість змінній coun

441

14) Поясніть різницю між стандартним виведенням (stdout) і стандартною помилкою (stderr).

Основна відмінність між стандартним виведенням (stdout) і стандартною помилкою (stderr) полягає в наступному:

  • Стандартний вихід (stdout): Це стандартний вихідний потік, куди надходить звичайний вихід команди. Він відображається на терміналі за замовчуванням. Ви можете перенаправити його до файлу за допомогою>.
  • Стандартна помилка (stderr): Це вихідний потік для повідомлень про помилки та попереджень. Він також відображається на терміналі за замовчуванням. Ви можете перенаправити його у файл за допомогою 2>.

15) Поясніть концепцію умовних операторів у сценаріях оболонки.

Умовні оператори в сценаріях оболонки дозволяють нам приймати рішення та контролювати потік нашого сценарію на основі певних умов. Вони дозволяють нашому сценарію виконувати різні набори команд залежно від того, чи є конкретна умова істинною чи хибною. Основними умовними операторами в сценаріях оболонки є оператор if, оператор elif (необов’язковий) і оператор else (необов’язковий).

Ось базова структура умовного оператора в сценаріях оболонки:

якщо [умова]; потім
# Команди для виконання, якщо умова виконується
elif [інша_умова]; потім
# Команди для виконання, якщо another_condition є істинним (необов’язково)
інше
# Команди для виконання, якщо жодна з умов не виконується (необов’язково)
бути

Пояснення:

  • [умова] = Команда, яка оцінює умову та повертає істинний (0) або хибний (ненульовий) статус виходу.
  • then = Це ключове слово, яке вказує, що наступні за ним команди будуть виконані, якщо умова оцінюється як істина.
  • elif = (скорочення від else if) Це розділ, який дозволяє нам вказати додаткові умови для перевірки.
  • else = це розділ, який містить команди, які будуть виконані, якщо жодна з умов не виконується.
  • fi = Це ключове слово, яке позначає кінець умовного блоку.

16) Як ви читаєте рядки з файлу в сценарії оболонки?

до читати рядки з файлу в сценарії оболонки, ми можемо використовувати різні методи, але один з поширених підходів полягає у використанні циклу while у поєднанні з командою read. Ось як ми можемо це зробити:

#!/bin/bash
file=/home/jayeshkumar/jayesh.txt
# Перевірте, чи файл існує
if [ -e $file ]; потім
while IFS= читання рядка -r; робити
echo Читання рядка: $line
# Додайте тут свою логіку обробки
виконано <$файл
інше
echo Файл не знайдено: $file
бути

Пояснення:

  1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
  2. file=/home/jayeshkumar/jayesh.txt: цей рядок визначає файл змінної та призначає повний шлях до файлу jayesh.txt у каталозі /home/jayeshkumar. Змініть цей шлях, щоб відповідати фактичному шляху до файлу, який ви хочете прочитати.
  3. if [ -e $file ]; then: Цей рядок починає оператор if. Він перевіряє, чи існує файл, визначений змінною $file. Прапор -e перевіряє наявність файлу.
  4. while IFS= читання рядка -r; do: цей рядок ініціює цикл while, який читає рядки з файлу.
    • IFS=: IFS (внутрішній роздільник полів) має порожнє значення, щоб зберегти пробіли на початку та в кінці.
    • read -r рядок: це зчитує поточний рядок із файлу та зберігає його у рядку змінної.
  5. echo Прочитаний рядок: $line: цей рядок друкує вміст рядка, який було прочитано з файлу. Змінна $line містить вміст поточного рядка.
  6. # Додайте свою логіку обробки тут: це коментар-заповнювач, де ви можете додати свою власну логіку для обробки кожного рядка. Наприклад, ви можете проаналізувати рядок, отримати інформацію або виконати певні дії на основі вмісту.
  7. done <$file: це позначає кінець циклу while. <$file перенаправляє вміст файлу, який буде прочитано циклом.
  8. else: якщо файл не існує (умова оператора if невірна), сценарій виконує код у гілці else.
  9. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено.
  10. fi: цей рядок позначає кінець оператора if.
читання файлу

читання файлу

Тут ми використали ` pwd `, щоб отримати шлях до поточного каталогу.

17) Напишіть функцію в сценарії оболонки, яка обчислює факториал заданого числа.

Ось такий сценарійобчислити факторіалзаданого числа.

#!/bin/bash
# Визначте функцію для обчислення факторіалу
calculate_factory() {
num=
факт=1
for ((i=1; i<=num; i++)); робити
факт=$((факт * i))
зроблено
луна $факт
}
# Запропонувати користувачеві ввести число
echo Введіть число:
читати input_num
# Викличте функцію calculate_factorial із введеним числом
factorial_result=$(calculate_factorial $input_num)
# Відобразити факторний результат
echo Факторіал $input_num: $factorial_result

Пояснення:

  1. Сценарій починається з рядка shebang #!/bin/bash для визначення інтерпретатора.
  2. Calculate_factorial() визначається як функція. Він приймає один аргумент, num, який є числом, факторіал якого потрібно обчислити.
  3. Усередині функції факт ініціалізується рівним 1. Ця змінна зберігатиме факторний результат.
  4. Цикл for повторює від 1 до заданого числа (num). У кожній ітерації він множить поточне значення факту на індекс циклу i.
  5. Після завершення циклу змінна fact містить обчислений факториал.
  6. Сценарій пропонує користувачеві ввести число за допомогою read.
  7. Функція calculate_factorial викликається з числом, наданим користувачем, і результат зберігається в змінній factorial_result.
  8. Нарешті сценарій відображає обчислений факторний результат.
Факторіал

Факторіал

18) Як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки?

У сценарії оболонки ви можете обробляти такі сигнали, як Ctrl+C (також відомий як SIGINT), використовуючи команду trap. Ctrl+C генерує сигнал SIGINT, коли користувач натискає його, щоб перервати запущений сценарій або програму. Використовуючи команду trap, ви можете вказати дії, які мають бути виконані при отриманні певного сигналу. Ось як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки:

#!/bin/bash
прибирати() {
echo Сценарій перервано. Виконання очищення…
# Додайте тут свої дії з очищення
вихід 1
}
# Налаштувати перехоплення для виклику функції очищення, коли отримано Ctrl+C (SIGINT).
очищення пастки SIGINT
# Решта вашого сценарію
луна Бігає…
спати 10
echo Готово.

Обробка сигналів важлива для того, щоб зробити сценарії надійними та забезпечити ефективну обробку несподіваних переривань. Ви можете налаштувати функцію очищення відповідно до ваших конкретних потреб, як-от закриття файлів, зупинка процесів або запис інформації перед виходом зі сценарію.

Пояснення:

  1. #!/bin/bash: цей рядок shebang визначає інтерпретатор, який буде використовуватися для виконання сценарію.
  2. cleanup() { … }: це визначає функцію під назвою cleanup. У цю функцію можна включити будь-які дії, які потрібно виконати, коли сценарій переривається, наприклад закриття файлів, звільнення ресурсів або виконання інших завдань очищення.
  3. trap cleanup SIGINT: Команда trap використовується для налаштування обробника сигналів. У цьому випадку це вказує, що коли отримано сигнал SIGINT (Ctrl+C), слід виконати функцію очищення.
  4. echo Виконується…, sleep 10, echo Finished.: Це лише приклади команд для імітації виконання сценарію.

446

19) Створіть сценарій, який перевіряє та видаляє повторювані рядки в текстовому файлі.

Ось наш сценарій Linux, у якому ми будемо видаляти повторювані рядки з текстового файлу.

#!/bin/bash
input_file=input.txt
вихідний_файл=вихідний.txt
сортувати $input_file | uniq> $output_file
echo Повторювані рядки успішно видалено.

Пояснення:

  1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
  2. Змінна input_file встановлюється на ім’я вхідного файлу, що містить повторювані рядки (змініть це на фактичне ім’я вхідного файлу).
  3. Змінна output_file встановлюється на назву вихідного файлу, з якого буде видалено дублікати (змініть це на бажане ім’я вихідного файлу).
  4. Сценарій використовує команду sort для сортування рядків у вхідному файлі. Сортування рядків гарантує, що повторювані рядки групуються разом.
  5. Потім відсортовані рядки передаються через команду uniq, яка видаляє послідовні повторювані рядки. Вихідні дані цього процесу перенаправляються у вихідний файл.
  6. Після видалення дублікатів сценарій друкує повідомлення про успіх.
видалення повторюваних рядків

видалення повторюваних рядків

Тут ми використовуємо ` кішка `, щоб відобразити текст у текстовому файлі.

20) Напишіть сценарій, який генерує безпечний випадковий пароль.

Ось наш скрипт для створення безпечного випадкового пароля.

#!/bin/bash
# Функція генерації випадкового пароля
generate_password() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# Виклик функції та збереження згенерованого пароля
пароль=$(згенерувати_пароль)
echo Згенерований пароль: $password

Примітка: користувач може відповідно змінити довжину пароля, замінивши число `12`.

Пояснення:

дискета
  1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
  2. Функція generate_password призначена для створення випадкового пароля. Ось як це працює:
    • tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
    • fold -w 12 розбиває відфільтровані випадкові дані на рядки по 12 символів у кожному.
    • head -n 1 вибирає перший рядок, фактично надаючи нам випадкову послідовність символів довжиною 12.
  3. Змінній password присвоюється результат виклику функції generate_password.
  4. Нарешті, згенерований пароль відображається за допомогою луни.

448

21) Напишіть сценарій оболонки, який обчислює загальний розмір усіх файлів у каталозі.

Ось сценарій оболонки для обчислення загального розміру всіх файлів у каталозі.

#!/bin/bash
каталог=/шлях/до/вашого/каталогу
total_size=$(du -csh $directory | grep total | awk ‘{print }’)
echo Загальний розмір файлів у $directory: $total_size

Пояснення:

  1. Сценарій починається з #!/bin/bash shebang, що вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
  2. Змінна каталогу встановлюється на шлях до каталогу, для якого потрібно обчислити загальний розмір файлу. Замініть /path/to/your/directory справжнім шляхом.
  3. Команда du використовується для оцінки використання файлового простору. Використовуються такі варіанти:
    • -c: створити загальну суму.
    • -s: відображати лише загальний розмір зазначеного каталогу.
    • -h: друкувати розміри в зручному для читання форматі (наприклад, КБ, МБ, ГБ).
  4. Вихід du передається до grep total, щоб відфільтрувати рядок, який містить загальний розмір.
  5. awk ‘{print }’ використовується для виділення першого поля (загального розміру) з рядка.
  6. Розрахований загальний розмір зберігається в змінній total_size.
  7. Нарешті, сценарій відображає загальний розмір за допомогою echo.
Загальний розмір файлів

Загальний розмір файлів

Тут ми використали ` pwd `, щоб побачити поточний шлях до каталогу.

22) Поясніть різницю між операторами if і elif у сценаріях оболонки.

Особливість `if`Staiftement Заява `elif`
призначення Поясніть різницю між операторами if і elif у сценаріях оболонки. Надає альтернативні умови для перевірки, коли початкова умова if є хибною.
використання Використовується для початкового стану. Використовується після початкової умови if для перевірки додаткових умов.
кількість блоків Може мати лише один блок if. Може мати декілька блоків elif, але лише один блок else (необов’язково).
виконання Виконує блок коду, пов’язаний із оператором if, якщо умова виконується. Якщо умова false, блок else (якщо присутній) виконується (необов’язково). Перевіряє кожну умову elif по порядку. Якщо одна з умов elif виконується, виконується відповідний блок коду, і сценарій завершує роботу з усього умовного блоку. Якщо жодна з умов elif не виконується, виконується блок else (якщо він присутній).
Вкладені структури Може бути вкладено в інші блоки if, elif або else. Не можна вкладати в інший блок elif, але можна використовувати всередині блоку if або else.

Розберемося в цьому на прикладі.

#!/bin/bash
число=5
if [$number -gt 10]; потім
echo $number більше 10
інше
echo $number не більше 10
бути
луна ——–
if [$number -gt 10]; потім
echo $number більше 10
elif [$number -eq 10]; потім
echo $number дорівнює 10
інше
echo $number менше 10
бути

Пояснення:

У цьому прикладі перший блок if перевіряє, чи число більше 10. Якщо ні, він друкує повідомлення про те, що число не більше 10. Другий блок із операторами elif перевіряє кілька умов послідовно, доки одна з них не стане істинною. У цьому випадку, оскільки значення числа дорівнює 5, результатом буде:

if_elif різниця

if_elif різниця

23) Як ви використовуєте цикл while для багаторазового виконання команд?

Цикл while використовується в сценаріях оболонки для багаторазового виконання набору команд, доки виконується певна умова. Цикл продовжує виконувати команди, поки умова не стане помилковою.

Ось основний синтаксис циклу while:

while [умова]; робити
# Команди для виконання
зроблено

Пояснення:

  1. Цикл `while` починається з ключового слова `while`, після якого йде умова, укладена в квадратні дужки `[ ]`.
  2. Тіло циклу, яке містить команди для виконання, укладено в ключові слова `do` і `done`.
  3. Цикл спочатку перевіряє умову. Якщо умова виконується, виконуються команди в тілі циклу. Після виконання тіла циклу умова перевіряється знову, і процес повторюється, доки умова не стане помилковою.

приклад: Якщо ми хочемо надрукувати числа від 1 до 5

#!/bin/bash
лічильник=1
while [$counter -le 5]; робити
echo Номер: $лічильник
лічильник=$((лічильник + 1))
зроблено

Пояснення:

  • Змінна лічильника має значення 1.
  • Цикл while перевіряє, чи значення лічильника менше або дорівнює 5. Поки ця умова виконується, цикл продовжує виконуватися.
  • Усередині циклу поточне значення лічильника друкується за допомогою echo.
  • Лічильник збільшується на 1 за допомогою виразу $((лічильник + 1)).
цикл while

цикл while

24) Створіть сценарій оболонки, який знаходить і перераховує всі порожні файли в каталозі.

Сценарій оболонки, який можна використовувати для пошуку та списку всіх порожніх файлів у каталозі за допомогою команд `find` і `stat`:

#!/bin/bash
каталог=″
if [ -z $каталог ]; потім
echo Використання:

Для всіх дистрибутивів Linux сценарій оболонки — це як чарівна паличка, яка автоматизує процес, економить час користувачів і підвищує продуктивність. У цьому навчальному посібнику зі створення сценаріїв ви познайомитеся з 25 плюс прикладами сценаріїв.

Але перш ніж ми перейдемо до теми сценарій оболонки приклади, давайте розберемося зі сценарієм оболонки та реальними випадками використання сценаріїв оболонки.

Що таке Shell Script?

Ну, оболонка - це a CLI ( інтерпретатор командного рядка ), який запускається в текстовому вікні, де користувачі можуть керувати та виконувати команди оболонки. З іншого боку, процес написання набору команд для виконання в системі Linux. Файл, який містить такі інструкції, називається сценарієм bash.

Використання сценаріїв оболонки

Нижче наведено деякі поширені способи використання сценарію оболонки:

  • Автоматизація завдань – Його можна використовувати для автоматизації повторюваних завдань, таких як звичайне резервне копіювання та завдання встановлення програмного забезпечення.
  • Налаштування – Можна використовувати сценарії оболонки, щоб створити середовище командного рядка та легко виконувати завдання відповідно до потреб.
  • Керування файлами – Сценарії оболонки також можна використовувати для керування та маніпулювання файлами та каталогами, наприклад для переміщення, копіювання, перейменування або видалення файлів.

Приклади сценаріїв оболонки в Linux

1) Що означає символ (#!) на початку сценарію оболонки?

The шибання (#!) на початку сценарію вказує інтерпретатор, який слід використовувати для виконання сценарію. Він повідомляє системі, яка оболонка чи інтерпретатор має інтерпретувати команди сценарію.

Наприклад: Припустимо, у нас є сценарій з назвою myscript.sh написаний в оболонці Bash:

shebang

shebang

У цьому прикладі:

  • #!/bin/bash на початку сценарію вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
  • Команди echo використовуються для друку повідомлень на термінал.

2) Як запустити сценарій оболонки з командного рядка?

Щоб запустити сценарій оболонки з командного рядка, нам потрібно виконати такі дії:

  • Переконайтеся, що файл сценарію має дозволи на виконання за допомогою команда chmod :
chmod +x myscript.sh>
  • Виконайте сценарій, використовуючи його назву файлу:
./myscript.sh>

Тут треба замінити myscrtipt.sh з назвою вашого сценарію.

3) Напишіть сценарій оболонки, який друкує techcodeview.com на терміналі.

Створіть назву сценарію `myscript.sh` (ми використовуємо ` оскільки ` редактор, ви можете вибрати будь-який редактор)

vim myscript.sh>

#!/bin/bash
# Цей сценарій друкує techcodeview.com на терміналі
луна techcodeview.com

надруковане ім'я

надруковане ім'я

Ми робимо наш сценарій виконуваним за допомогою `chmod +x`, потім виконуємо за допомогою `./myscipt.sh` і отримуємо бажаний результат techcodeview.com.

4) Поясніть призначення команди echo в сценаріях оболонки.

The команда echo використовується для відображення тексту або змінних на терміналі. Він зазвичай використовується для друку повідомлень, значень змінних і генерування вихідних даних програми.

434

команда echo

У цьому прикладі ми виконали `echo` на терміналі безпосередньо, оскільки він працює так само в сценарії оболонки.

5) Як ви можете призначити значення змінній у сценарії оболонки?

Змінним присвоюються значення за допомогою оператора присвоювання =.

Наприклад:

#!/bin/bash
# Присвоєння значення змінній
ім'я=Джаєш
вік=21
echo $name $age

Пояснення:

  • Змінній name присвоєно значення Jayesh.
  • Змінній віку присвоєно значення 21.
  • echo використовується для друку, а `$name` `$age` використовується для виклику значення, що зберігається в змінних.

435

6) Напишіть сценарій оболонки, який приймає ім’я користувача як вхідні дані та вітає його.

Створіть назву сценарію `example.sh`.

#!/bin/bash
# Запитайте в користувача ім'я
echo Як тебе звуть?
прочитати назву
# Привітайте користувача
echo Привіт, $name! Приємно познайомитись.

Пояснення:

  • #!/bin/bash: це рядок shebang. Він повідомляє системі використовувати інтерпретатор Bash для виконання сценарію.
  • # Запитайте в користувача ім'я: це коментар. Він надає контекст про майбутній код. Коментарі ігноруються перекладачем.
  • echo Як вас звати?: Команда echo використовується для відображення тексту в подвійних лапках на терміналі.
  • read name: команда read очікує, поки користувач введе текст, і зберігає його в імені змінної.
  • echo Привіт, $name! Приємно познайомитися.: цей рядок використовує команду echo для друку вітального повідомлення, яке містить значення змінної name, яке було зібрано з введених користувачем даних.

436

7) Як додати коментарі до сценарію оболонки?

Коментарі в сценаріях оболонки використовуються для надання пояснень або контексту до коду. Вони ігноруються перекладачем і призначені лише для людей, які читають сценарій. Ви можете додавати коментарі за допомогою символу #.

#!/bin/bash
# Це коментар, що пояснює мету сценарію
відлуння gfg

8) Створіть сценарій оболонки, який перевіряє, чи існує файл у поточному каталозі.

Ось сценарій, який перевіряє, чи існує файл під назвою example.txt у поточному каталозі:

#!/bin/bash
file=example.txt
# Перевірте, чи файл існує
if [ -e $file ]; потім
echo Файл існує: $file
інше
echo Файл не знайдено: $file
бути

Пояснення:

  1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
  2. file=example.txt: цей рядок визначає файл змінної та присвоює йому значення example.txt. Ви можете замінити це назвою файлу, який потрібно перевірити.
  3. if [ -e $file ]; then: Цей рядок починає оператор if. Умова [ -e $file ] перевіряє, чи існує файл, визначений значенням змінної file. Прапор -e використовується для перевірки існування файлу.
  4. echo Файл існує: $file: якщо умова вірна (тобто файл існує), цей рядок друкує повідомлення про те, що файл існує, разом із назвою файлу.
  5. else: якщо умова хибна (тобто файл не існує), сценарій виконує код у гілці else.
  6. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено, разом із назвою файлу.
  7. fi: цей рядок позначає кінець оператора if.
Пошук файлу

Пошук файлу

9) Яка різниця між одинарними лапками (‘) і подвійними лапками () у сценаріях оболонки?

Одинарні лапки (‘) і подвійні лапки () використовуються для включення рядків у сценарії оболонки, але вони мають різну поведінку:

  • Одинарні лапки: усе, що знаходиться в одинарних лапках, розглядається як літеральний рядок. Імена змінних і більшість спеціальних символів не розгортаються.
  • Подвійні лапки: змінні та певні спеціальні символи в подвійних лапках розгортаються. Вміст підлягає підстановці змінних і підстановці команд.

#!/bin/bash

abcd=Привіт
echo ‘$abcd’ # Вихід: $abcd
echo $abcd # Вихід: Привіт

10) Як ви можете використовувати аргументи командного рядка в сценарії оболонки?

Аргументи командного рядка це значення, які надаються сценарію під час його виконання. До них можна отримати доступ у сценарії за допомогою спеціальних змінних, таких як $1, $2 тощо, де $1 представляє перший аргумент, $2 представляє другий аргумент і так далі.

Наприклад: Якщо ім'я нашого сценарію в `example.sh`

#!/bin/bash

echo Назва сценарію: $0
echo Перший аргумент: $1
echo Другий аргумент: $2

Якщо ми запустимо сценарій із `.example.sh hello_1 hello_2`, він виведе:

аргументи cli

аргументи cli

11) Як ви використовуєте цикл for для перебору списку значень?

Створіть назву сценарію `example.sh`.

#!/bin/bash

фрукти=(яблуко банан вишня фінік)
для фруктів у ${fruits[@]}; робити
echo Поточний фрукт: $fruit
зроблено

Пояснення:

Рядок `fruits=` створює масив під назвою fruits із чотирьох елементів: яблуко, банан, вишня та фінік.

  • для фруктів у ${fruits[@]}; do: Цей рядок починає цикл for. Ось що означає кожна частина:
  • for fruit: Це оголошує змінну циклу під назвою fruit. У кожній ітерації циклу fruit буде зберігати значення поточного елемента з масиву fruits.
  • ${fruits[@]}: це розширення масиву, яке бере всі елементи з масиву fruits. Синтаксис ${…} гарантує, що кожен елемент розглядається як окремий елемент.
  • do: це ключове слово позначає початок тіла циклу.
  • echo Поточний плод: $fruit: усередині циклу цей рядок використовує команду echo для відображення поточного значення змінної циклу fruit. Він друкує повідомлення на кшталт Current fruit: apple для кожного фрукта в масиві.
  • done: це ключове слово позначає кінець тіла циклу. Він повідомляє сценарію, що цикл завершено.
для циклу

для циклу

12) Напишіть сценарій оболонки, який обчислює суму цілих чисел від 1 до N за допомогою циклу.

Створіть назву сценарію `example.sh`.

#!/bin/bash

echo Введіть число (N):
читати Н
сума=0
for (( i=1; i<=$N; i++ )); робити
сума=$((сума + i))
зроблено
echo Сума цілих чисел від 1 до $N: $sum

Пояснення:
Сценарій починається з запиту на введення числа (N) за допомогою read. Це число визначить, скільки разів виконується цикл.

  1. Змінна sum ініціалізується рівним 0. Ця змінна відстежуватиме суму цілих чисел.
  2. Цикл for починається з for (( i=1; i<=$N; i++ )). Ця структура циклу використовується для повторення набору дій певну кількість разів, у цьому випадку від 1 до значення N.
  3. Усередині циклу відбуваються такі речі:
    • i=1 встановлює для змінної циклу i значення 1 на початку кожної ітерації.
    • Умова циклу i<=$N перевіряє, чи i все ще менше або дорівнює заданому числу N.
    • Якщо умова виконується, виконується тіло циклу.
    • sum=$((sum + i)) обчислює нове значення sum, додаючи до нього поточне значення i. Це додає цілі числа від 1 до поточного значення i.
  4. Після кожної ітерації i++ збільшує значення i на 1.
  5. Цикл продовжує працювати, доки умова i<=$N не стане помилковою (коли i стане більшим за N).
  6. Після завершення циклу сценарій відображає суму цілих чисел від 1 до введеного числа N.

439

13) Створіть сценарій, який шукатиме певне слово у файлі та підраховуватиме його випадки.

Створіть назву сценарію `word_count.sh`

#!/bin/bash

echo Введіть слово для пошуку:
читати target_word
echo Введіть назву файлу:
прочитати назву файлу
count=$(grep -o -w $target_word $filename | wc -l)
echo Слово «$target_word» з’являється $count разів у «$filename».

Пояснення:

  • echo Введіть слово для пошуку:: Цей рядок відображає повідомлення з проханням до користувача ввести слово, яке він хоче знайти у файлі.
  • read target_word: цей рядок читає введені користувачем дані та зберігає їх у змінній під назвою target_word.
  • echo Введіть ім'я файлу:: Цей рядок відображає повідомлення з проханням до користувача ввести назву файлу, у якому він бажає виконати пошук.
  • read filename: Цей рядок читає введені користувачем дані та зберігає їх у змінній з назвою filename.
  • count=$(grep -o -w $target_word $filename | wc -l): цей рядок виконує основну роботу сценарію. Давайте розберемо це далі:
    • grep -o -w $target_word $filename: Ця частина команди шукає входження target_word у вказаному імені файлу. Параметри -o і -w гарантують, що враховуються лише цілі збіги слів.
    • |: Це канал, який приймає вихідні дані попередньої команди та надсилає їх як вхідні дані для наступної команди.
    • wc -l: ця частина команди використовує команду wc для підрахунку кількості рядків у вхідних даних. Параметр -l спеціально підраховує рядки.
    • Уся команда обчислює кількість входжень target_word у файлі та призначає цю кількість змінній coun

441

14) Поясніть різницю між стандартним виведенням (stdout) і стандартною помилкою (stderr).

Основна відмінність між стандартним виведенням (stdout) і стандартною помилкою (stderr) полягає в наступному:

  • Стандартний вихід (stdout): Це стандартний вихідний потік, куди надходить звичайний вихід команди. Він відображається на терміналі за замовчуванням. Ви можете перенаправити його до файлу за допомогою>.
  • Стандартна помилка (stderr): Це вихідний потік для повідомлень про помилки та попереджень. Він також відображається на терміналі за замовчуванням. Ви можете перенаправити його у файл за допомогою 2>.

15) Поясніть концепцію умовних операторів у сценаріях оболонки.

Умовні оператори в сценаріях оболонки дозволяють нам приймати рішення та контролювати потік нашого сценарію на основі певних умов. Вони дозволяють нашому сценарію виконувати різні набори команд залежно від того, чи є конкретна умова істинною чи хибною. Основними умовними операторами в сценаріях оболонки є оператор if, оператор elif (необов’язковий) і оператор else (необов’язковий).

Ось базова структура умовного оператора в сценаріях оболонки:

якщо [умова]; потім
# Команди для виконання, якщо умова виконується
elif [інша_умова]; потім
# Команди для виконання, якщо another_condition є істинним (необов’язково)
інше
# Команди для виконання, якщо жодна з умов не виконується (необов’язково)
бути

Пояснення:

  • [умова] = Команда, яка оцінює умову та повертає істинний (0) або хибний (ненульовий) статус виходу.
  • then = Це ключове слово, яке вказує, що наступні за ним команди будуть виконані, якщо умова оцінюється як істина.
  • elif = (скорочення від else if) Це розділ, який дозволяє нам вказати додаткові умови для перевірки.
  • else = це розділ, який містить команди, які будуть виконані, якщо жодна з умов не виконується.
  • fi = Це ключове слово, яке позначає кінець умовного блоку.

16) Як ви читаєте рядки з файлу в сценарії оболонки?

до читати рядки з файлу в сценарії оболонки, ми можемо використовувати різні методи, але один з поширених підходів полягає у використанні циклу while у поєднанні з командою read. Ось як ми можемо це зробити:

#!/bin/bash
file=/home/jayeshkumar/jayesh.txt
# Перевірте, чи файл існує
if [ -e $file ]; потім
while IFS= читання рядка -r; робити
echo Читання рядка: $line
# Додайте тут свою логіку обробки
виконано <$файл
інше
echo Файл не знайдено: $file
бути

Пояснення:

  1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
  2. file=/home/jayeshkumar/jayesh.txt: цей рядок визначає файл змінної та призначає повний шлях до файлу jayesh.txt у каталозі /home/jayeshkumar. Змініть цей шлях, щоб відповідати фактичному шляху до файлу, який ви хочете прочитати.
  3. if [ -e $file ]; then: Цей рядок починає оператор if. Він перевіряє, чи існує файл, визначений змінною $file. Прапор -e перевіряє наявність файлу.
  4. while IFS= читання рядка -r; do: цей рядок ініціює цикл while, який читає рядки з файлу.
    • IFS=: IFS (внутрішній роздільник полів) має порожнє значення, щоб зберегти пробіли на початку та в кінці.
    • read -r рядок: це зчитує поточний рядок із файлу та зберігає його у рядку змінної.
  5. echo Прочитаний рядок: $line: цей рядок друкує вміст рядка, який було прочитано з файлу. Змінна $line містить вміст поточного рядка.
  6. # Додайте свою логіку обробки тут: це коментар-заповнювач, де ви можете додати свою власну логіку для обробки кожного рядка. Наприклад, ви можете проаналізувати рядок, отримати інформацію або виконати певні дії на основі вмісту.
  7. done <$file: це позначає кінець циклу while. <$file перенаправляє вміст файлу, який буде прочитано циклом.
  8. else: якщо файл не існує (умова оператора if невірна), сценарій виконує код у гілці else.
  9. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено.
  10. fi: цей рядок позначає кінець оператора if.
читання файлу

читання файлу

Тут ми використали ` pwd `, щоб отримати шлях до поточного каталогу.

17) Напишіть функцію в сценарії оболонки, яка обчислює факториал заданого числа.

Ось такий сценарійобчислити факторіалзаданого числа.

#!/bin/bash
# Визначте функцію для обчислення факторіалу
calculate_factory() {
num=$1
факт=1
for ((i=1; i<=num; i++)); робити
факт=$((факт * i))
зроблено
луна $факт
}
# Запропонувати користувачеві ввести число
echo Введіть число:
читати input_num
# Викличте функцію calculate_factorial із введеним числом
factorial_result=$(calculate_factorial $input_num)
# Відобразити факторний результат
echo Факторіал $input_num: $factorial_result

Пояснення:

  1. Сценарій починається з рядка shebang #!/bin/bash для визначення інтерпретатора.
  2. Calculate_factorial() визначається як функція. Він приймає один аргумент, num, який є числом, факторіал якого потрібно обчислити.
  3. Усередині функції факт ініціалізується рівним 1. Ця змінна зберігатиме факторний результат.
  4. Цикл for повторює від 1 до заданого числа (num). У кожній ітерації він множить поточне значення факту на індекс циклу i.
  5. Після завершення циклу змінна fact містить обчислений факториал.
  6. Сценарій пропонує користувачеві ввести число за допомогою read.
  7. Функція calculate_factorial викликається з числом, наданим користувачем, і результат зберігається в змінній factorial_result.
  8. Нарешті сценарій відображає обчислений факторний результат.
Факторіал

Факторіал

18) Як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки?

У сценарії оболонки ви можете обробляти такі сигнали, як Ctrl+C (також відомий як SIGINT), використовуючи команду trap. Ctrl+C генерує сигнал SIGINT, коли користувач натискає його, щоб перервати запущений сценарій або програму. Використовуючи команду trap, ви можете вказати дії, які мають бути виконані при отриманні певного сигналу. Ось як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки:

#!/bin/bash
прибирати() {
echo Сценарій перервано. Виконання очищення…
# Додайте тут свої дії з очищення
вихід 1
}
# Налаштувати перехоплення для виклику функції очищення, коли отримано Ctrl+C (SIGINT).
очищення пастки SIGINT
# Решта вашого сценарію
луна Бігає…
спати 10
echo Готово.

Обробка сигналів важлива для того, щоб зробити сценарії надійними та забезпечити ефективну обробку несподіваних переривань. Ви можете налаштувати функцію очищення відповідно до ваших конкретних потреб, як-от закриття файлів, зупинка процесів або запис інформації перед виходом зі сценарію.

Пояснення:

  1. #!/bin/bash: цей рядок shebang визначає інтерпретатор, який буде використовуватися для виконання сценарію.
  2. cleanup() { … }: це визначає функцію під назвою cleanup. У цю функцію можна включити будь-які дії, які потрібно виконати, коли сценарій переривається, наприклад закриття файлів, звільнення ресурсів або виконання інших завдань очищення.
  3. trap cleanup SIGINT: Команда trap використовується для налаштування обробника сигналів. У цьому випадку це вказує, що коли отримано сигнал SIGINT (Ctrl+C), слід виконати функцію очищення.
  4. echo Виконується…, sleep 10, echo Finished.: Це лише приклади команд для імітації виконання сценарію.

446

19) Створіть сценарій, який перевіряє та видаляє повторювані рядки в текстовому файлі.

Ось наш сценарій Linux, у якому ми будемо видаляти повторювані рядки з текстового файлу.

#!/bin/bash
input_file=input.txt
вихідний_файл=вихідний.txt
сортувати $input_file | uniq> $output_file
echo Повторювані рядки успішно видалено.

Пояснення:

  1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
  2. Змінна input_file встановлюється на ім’я вхідного файлу, що містить повторювані рядки (змініть це на фактичне ім’я вхідного файлу).
  3. Змінна output_file встановлюється на назву вихідного файлу, з якого буде видалено дублікати (змініть це на бажане ім’я вихідного файлу).
  4. Сценарій використовує команду sort для сортування рядків у вхідному файлі. Сортування рядків гарантує, що повторювані рядки групуються разом.
  5. Потім відсортовані рядки передаються через команду uniq, яка видаляє послідовні повторювані рядки. Вихідні дані цього процесу перенаправляються у вихідний файл.
  6. Після видалення дублікатів сценарій друкує повідомлення про успіх.
видалення повторюваних рядків

видалення повторюваних рядків

Тут ми використовуємо ` кішка `, щоб відобразити текст у текстовому файлі.

20) Напишіть сценарій, який генерує безпечний випадковий пароль.

Ось наш скрипт для створення безпечного випадкового пароля.

#!/bin/bash
# Функція генерації випадкового пароля
generate_password() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# Виклик функції та збереження згенерованого пароля
пароль=$(згенерувати_пароль)
echo Згенерований пароль: $password

Примітка: користувач може відповідно змінити довжину пароля, замінивши число `12`.

Пояснення:

  1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
  2. Функція generate_password призначена для створення випадкового пароля. Ось як це працює:
    • tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
    • fold -w 12 розбиває відфільтровані випадкові дані на рядки по 12 символів у кожному.
    • head -n 1 вибирає перший рядок, фактично надаючи нам випадкову послідовність символів довжиною 12.
  3. Змінній password присвоюється результат виклику функції generate_password.
  4. Нарешті, згенерований пароль відображається за допомогою луни.

448

21) Напишіть сценарій оболонки, який обчислює загальний розмір усіх файлів у каталозі.

Ось сценарій оболонки для обчислення загального розміру всіх файлів у каталозі.

#!/bin/bash
каталог=/шлях/до/вашого/каталогу
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo Загальний розмір файлів у $directory: $total_size

Пояснення:

  1. Сценарій починається з #!/bin/bash shebang, що вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
  2. Змінна каталогу встановлюється на шлях до каталогу, для якого потрібно обчислити загальний розмір файлу. Замініть /path/to/your/directory справжнім шляхом.
  3. Команда du використовується для оцінки використання файлового простору. Використовуються такі варіанти:
    • -c: створити загальну суму.
    • -s: відображати лише загальний розмір зазначеного каталогу.
    • -h: друкувати розміри в зручному для читання форматі (наприклад, КБ, МБ, ГБ).
  4. Вихід du передається до grep total, щоб відфільтрувати рядок, який містить загальний розмір.
  5. awk ‘{print $1}’ використовується для виділення першого поля (загального розміру) з рядка.
  6. Розрахований загальний розмір зберігається в змінній total_size.
  7. Нарешті, сценарій відображає загальний розмір за допомогою echo.
Загальний розмір файлів

Загальний розмір файлів

Тут ми використали ` pwd `, щоб побачити поточний шлях до каталогу.

22) Поясніть різницю між операторами if і elif у сценаріях оболонки.

Особливість `if`Staiftement Заява `elif`
призначення Поясніть різницю між операторами if і elif у сценаріях оболонки. Надає альтернативні умови для перевірки, коли початкова умова if є хибною.
використання Використовується для початкового стану. Використовується після початкової умови if для перевірки додаткових умов.
кількість блоків Може мати лише один блок if. Може мати декілька блоків elif, але лише один блок else (необов’язково).
виконання Виконує блок коду, пов’язаний із оператором if, якщо умова виконується. Якщо умова false, блок else (якщо присутній) виконується (необов’язково). Перевіряє кожну умову elif по порядку. Якщо одна з умов elif виконується, виконується відповідний блок коду, і сценарій завершує роботу з усього умовного блоку. Якщо жодна з умов elif не виконується, виконується блок else (якщо він присутній).
Вкладені структури Може бути вкладено в інші блоки if, elif або else. Не можна вкладати в інший блок elif, але можна використовувати всередині блоку if або else.

Розберемося в цьому на прикладі.

#!/bin/bash
число=5
if [$number -gt 10]; потім
echo $number більше 10
інше
echo $number не більше 10
бути
луна ——–
if [$number -gt 10]; потім
echo $number більше 10
elif [$number -eq 10]; потім
echo $number дорівнює 10
інше
echo $number менше 10
бути

Пояснення:

У цьому прикладі перший блок if перевіряє, чи число більше 10. Якщо ні, він друкує повідомлення про те, що число не більше 10. Другий блок із операторами elif перевіряє кілька умов послідовно, доки одна з них не стане істинною. У цьому випадку, оскільки значення числа дорівнює 5, результатом буде:

if_elif різниця

if_elif різниця

23) Як ви використовуєте цикл while для багаторазового виконання команд?

Цикл while використовується в сценаріях оболонки для багаторазового виконання набору команд, доки виконується певна умова. Цикл продовжує виконувати команди, поки умова не стане помилковою.

Ось основний синтаксис циклу while:

while [умова]; робити
# Команди для виконання
зроблено

Пояснення:

  1. Цикл `while` починається з ключового слова `while`, після якого йде умова, укладена в квадратні дужки `[ ]`.
  2. Тіло циклу, яке містить команди для виконання, укладено в ключові слова `do` і `done`.
  3. Цикл спочатку перевіряє умову. Якщо умова виконується, виконуються команди в тілі циклу. Після виконання тіла циклу умова перевіряється знову, і процес повторюється, доки умова не стане помилковою.

приклад: Якщо ми хочемо надрукувати числа від 1 до 5

#!/bin/bash
лічильник=1
while [$counter -le 5]; робити
echo Номер: $лічильник
лічильник=$((лічильник + 1))
зроблено

Пояснення:

  • Змінна лічильника має значення 1.
  • Цикл while перевіряє, чи значення лічильника менше або дорівнює 5. Поки ця умова виконується, цикл продовжує виконуватися.
  • Усередині циклу поточне значення лічильника друкується за допомогою echo.
  • Лічильник збільшується на 1 за допомогою виразу $((лічильник + 1)).
цикл while

цикл while

24) Створіть сценарій оболонки, який знаходить і перераховує всі порожні файли в каталозі.

Сценарій оболонки, який можна використовувати для пошуку та списку всіх порожніх файлів у каталозі за допомогою команд `find` і `stat`:

#!/bin/bash
каталог=$1″
if [ -z $каталог ]; потім
echo Використання: $0
вихід 1
бути

якщо [! -d $каталог]; потім
echo Помилка: «$directory» не є дійсним каталогом.
вихід 1
бути
echo Порожні файли в $directory:
find $directory -type f -empty

Пояснення:

  1. ` #!/bin/bash `: Це називається shebang, і воно повідомляє операційній системі використовувати оболонку Bash для інтерпретації та виконання сценарію.
  2. ` каталог=$1″ `: цей рядок призначає перший аргумент командного рядка (позначений $1) змінній ` каталог `.
  3. ` if [ -z $каталог ]; потім `: цей рядок починає оператор if, який перевіряє, чи ` каталог ` змінна порожня (-z перевіряє порожній рядок).
  4. ` echo Використання: $0 `: якщо каталог порожній, цей рядок друкує повідомлення про використання, де ` $0 ` представляє назву сценарію.
  5. ` вихід 1 `: цей рядок завершує роботу сценарію з кодом виходу ` 1 `, що вказує на помилку.
  6. ` бути `: цей рядок позначає кінець ` якщо ` заява.
  7. ` якщо [! -d $каталог]; потім `: запускається інший оператор if, щоб перевірити, чи існує наданий каталог (` ` тести для каталогу).
  8. ` echo Помилка: «$directory» не є дійсним каталогом. `: якщо наданий каталог не існує, цей рядок друкує повідомлення про помилку.
  9. ` вихід 1 `: вихід зі сценарію з кодом виходу ` 1 `.
  10. ` бути `: позначає кінець другого ` якщо` заява.
  11. ` echo Порожні файли в $directory: `: якщо наразі все вірно, цей рядок друкує повідомлення про те, що сценарій перерахує порожні файли у вказаному каталозі.
  12. ` find $directory -type f -empty `: у цьому рядку використовується ` знайти ` команда пошуку порожніх файлів (` - порожній `) типу звичайних файлів (` - тип f `) у вказаному каталозі. Потім він перераховує ці порожні файли.
Пошук порожніх файлів

Пошук порожніх файлів

Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях поточного каталогу home/jayeshkumar/

25) Яка мета команди read у сценаріях оболонки?

Команда read у сценаріях оболонки дозволяє сценарію запитувати у вас інформацію. Це як коли комп’ютер задає вам запитання й чекає на відповідь. Це корисно для сценаріїв, які вимагають, щоб ви щось ввели, або коли сценарію потрібно працювати з інформацією з файлів. Команда read допомагає сценарію зупинятися й чекати, що ви введете, а потім він може використовувати цю інформацію для виконання інших завдань у сценарії.

Синтаксис команди read:

read variable_name>

приклад : якщо ми хочемо взяти ім’я як вхідні дані від користувача, щоб надрукувати його.

#!/bin/bash
echo Будь ласка, введіть своє ім'я:
прочитати назву
echo Привіт, $name!

453

прочитати ім

Таким чином, команда read використовується для захоплення введених користувачем даних або даних із файлів у сценаріях оболонки, що робить сценарії більш інтерактивними та універсальними.

26) Напишіть сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

Ось сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

#!/bin/bash
каталог=$1″
if [ -z $каталог ]; потім
echo Використання: $0
вихід 1
бути

якщо [! -d $каталог]; потім

echo Помилка: «$directory» не є дійсним каталогом.
вихід 1
бути

cd $каталог || вихід 1

для файлу в *; робити
if [ -f $file ]; потім
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
бути
зроблено

Пояснення:

  1. #!/bin/bash : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. каталог=$1″ : цей рядок призначає перший аргумент командного рядка каталогу змінних.
  3. if [ -z $каталог ]; потім : цей рядок перевіряє, чи порожня змінна каталогу (під час виконання сценарію не надається аргумент).
  4. echo Використання: $0 : якщо каталог порожній, цей рядок друкує повідомлення про використання з назвою сценарію ($0).
  5. вихід 1 : цей рядок завершує роботу сценарію з кодом виходу 1, що вказує на помилку.
  6. f i: Це означає кінець першого оператора if.
  7. якщо [! -d $каталог]; потім : цей рядок перевіряє, чи не існує вказаного каталогу (-d перевіряє наявність каталогу).
  8. echo Помилка: «$directory» не є дійсним каталогом. : якщо вказаний каталог не існує, цей рядок друкує повідомлення про помилку.
  9. вихід 1 : вихід зі сценарію з кодом виходу 1.
  10. бути : Позначає кінець другого оператора if.
  11. cd $каталог || вихід 1 : змінює поточний робочий каталог на вказаний каталог. Якщо змінити каталог не вдалося (наприклад, каталог не існує), сценарій завершує роботу з кодом помилки.
  12. для файлу в *; зробити: я для файлу в *; зробити: ініціює цикл, який перебирає всі елементи в поточному каталозі (* відповідає всім назвам файлів).
  13. if [ -f $file ]; потім : перевіряє, чи поточний елемент ітерації циклу є звичайним файлом (-f перевіряє звичайний файл).
  14. newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : перетворює поточне ім’я файлу ($file) на нижній регістр за допомогою команди tr і зберігає результат у змінній newname.
  15. [ $file != $newname ] && mv $file $newname : Порівнює оригінальну назву файлу з новою назвою файлу, написаною в нижньому регістрі. Якщо вони різні, він перейменовує файл за допомогою команди mv.
  16. бути : Позначає кінець внутрішнього оператора if.
  17. зроблено : Позначає кінець циклу.

454

Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях до поточного каталогу home/jayeshkumar/test

27) Як можна використовувати арифметичні операції в сценарії оболонки?

Арифметичні операції можна виконувати в сценарії оболонки за допомогою різних вбудованих методів. Оболонка надає механізми для простих арифметичних обчислень за допомогою арифметичного розширення, наприклад:

  1. Арифметичне розширення ($((…)))
  2. Використання команди expr
  3. Використання команди let

Ось наш сценарій Shell, що пояснює всі три методи арифметичних операцій.

#!/bin/bash
num1=10
num2=5

#Арифметичне розширення ($((…)))

результат=$((num1 + num2))
echo Сума: $результат

#Використання команди expr

сума=$(вираз $num1 + $num2)
echo Сума: $сума

#Використання команди let

нехай сума = num1 + num2
echo Сума: $сума

Пояснення:

  1. `#!/bin/bash` : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. `num1=10` і ` num2=5` : ці рядки присвоюють значення 10 і 5 змінним ` num1 ` і ` num2 ` відповідно.
  3. `#Арифметичне розширення ($((…)))` : це коментар, що вказує на початок розділу, який демонструє арифметичне розширення.
  4. `результат=$((num1 + num2))` : цей рядок використовує арифметичне розширення для обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` результат ` змінна.
  5. `echo Sum: $result` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` результат ` змінна.
  6. `#Використання команди expr` : це коментар, що вказує на початок розділу, який демонструє використання ` вираз ` команда арифметичних операцій.
  7. `sum=$(expr $num1 + $num2)` : цей рядок використовує ` вираз ` команда обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` сума ` змінна. Зауважте, що ` вираз Команда ` вимагає пробілів навколо операторів.
  8. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
  9. `#Використання команди let` : це коментар, що вказує на початок розділу, який демонструє використання ` дозволяти ` команда арифметичних операцій.
  10. `нехай сума = num1 + num2″` : цей рядок використовує ` дозволяти ` команда обчислення суми ` num1 ` і ` num2 ` і призначає результат ` сума ` змінна. ` дозволяти Команда ` не вимагає пробілів навколо операторів.
  11. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
арифметика

арифметика

28) Створіть сценарій, який перевіряє, чи доступний хост мережі.

Ось простий сценарій оболонки, який використовує команду ping, щоб перевірити, чи доступний хост мережі:

#!/bin/bash
хост=$1″
якщо [ -z $хост]; потім
echo Використання: $0
вихід 1
бути
ping -c 4 $хост

якщо [ $? -екв 0]; потім
echo $host доступний.
інше
echo $host недоступний.
бути

Пояснення:

  1. Він приймає ім’я хоста або IP-адресу як аргумент і перевіряє, чи надано аргумент.
  2. Якщо аргумент не вказано, відображається повідомлення про використання та завершується робота.
  3. Він використовує команду ping з опцією -c 4 для надсилання чотирьох ехо-запитів ICMP на вказаний хост.
  4. Після виконання команди ping перевіряється статус виходу ($?). Якщо статус виходу дорівнює 0, це означає, що хост доступний і сценарій друкує повідомлення про успіх. В іншому випадку він друкує повідомлення про помилку.

456

Примітка : нам потрібно надати ім’я хоста як аргумент під час виконання сценарію. Тут ми використали google.com

29) Напишіть сценарій оболонки, щоб знайти найбільший елемент у масиві:

Ось сценарій оболонки для пошуку найбільшого елемента в масиві.

#!/bin/bash
# Оголошення масиву
масив=(3 56 24 89 67)

# Ініціалізація змінної для збереження максимального значення, починаючи з першого елемента

макс=${масив[0]}

# Ітерація по масиву

для числа в ${array[@]}; робити

# Порівняти кожен елемент із поточним максимумом

if ((num> max)); потім
max=$num
бути
зроблено

# Вивести максимальне значення

echo Максимальний елемент у масиві: $max

Пояснення:

  1. ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. ` масив=(3 56 24 89 67) `: масив оголошується та ініціалізується значеннями.
  3. ` макс=${масив[0]} `: `max` ініціалізується першим елементом масиву.
  4. ` для числа в ${array[@]}; робити `: цикл `for` використовується для перебору елементів масиву.
  5. ` if ((num> max)); потім `: Оператор `if` перевіряє, чи поточний елемент `num` більший за поточний максимальний `max`.
  6. ` max=$num`: Якщо`num ` більше ніж `max`, `max` оновлюється значенням num.
  7. ` зроблено `: цикл `for` закрито.
  8. ` echo Максимальний елемент у масиві: $max `: нарешті сценарій друкує максимальне значення, знайдене в масиві.
461

найбільше число

30) Напишіть скрипт для обчислення суми елементів у масиві.

#!/bin/bash

# Оголошення масиву

масив=(1 65 22 19 94)

# Ініціалізація змінної для збереження суми

сума=0

# Перебираємо масив і додаємо кожен елемент до суми

для числа в ${array[@]}; робити
am=$((am + am))
зроблено

# Вивести суму

echo Сума елементів у масиві: $sum

Пояснення:

` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.

` масив=(1 65 22 19 94) `: масив оголошується та ініціалізується значеннями.

` сума=0 `:` сума ` ініціалізується нулем, щоб зберегти суму елементів.

` для числа в ${array[@]}; робити `: A ` для Цикл ` використовується для перебору елементів масиву.

` am=$((am + am)) `: усередині циклу кожен елемент ` на одному ` додається до ` сума ` змінна.

` зроблено `: ` для ` цикл закрито.

`echo Сума елементів у масиві: $sum`: Нарешті, скрипт друкує суму всіх елементів у масиві.

462

Сума елементів

Дізнайтеся більше про сценарії оболонки

Висновок

Ми всі фанати знаємо, що сценарій оболонки дуже корисний для підвищення продуктивності роботи, а також економії часу. Отже, у цій статті ми розглянули 30 дуже корисних і найбільш шахрайських прикладів сценаріїв оболонки . Ми сподіваємося, що цей повний посібник із прикладів сценаріїв оболонки допоможе вам зрозуміти все про сценарії оболонки.




вихід 1
бути

якщо [! -d $каталог]; потім
echo Помилка: «$directory» не є дійсним каталогом.
вихід 1
бути
echo Порожні файли в $directory:
find $directory -type f -empty

Пояснення:

  1. ` #!/bin/bash `: Це називається shebang, і воно повідомляє операційній системі використовувати оболонку Bash для інтерпретації та виконання сценарію.
  2. ` каталог=″ `: цей рядок призначає перший аргумент командного рядка (позначений ) змінній ` каталог `.
  3. ` if [ -z $каталог ]; потім `: цей рядок починає оператор if, який перевіряє, чи ` каталог ` змінна порожня (-z перевіряє порожній рядок).
  4. ` echo Використання:

    Для всіх дистрибутивів Linux сценарій оболонки — це як чарівна паличка, яка автоматизує процес, економить час користувачів і підвищує продуктивність. У цьому навчальному посібнику зі створення сценаріїв ви познайомитеся з 25 плюс прикладами сценаріїв.

    Але перш ніж ми перейдемо до теми сценарій оболонки приклади, давайте розберемося зі сценарієм оболонки та реальними випадками використання сценаріїв оболонки.

    Що таке Shell Script?

    Ну, оболонка - це a CLI ( інтерпретатор командного рядка ), який запускається в текстовому вікні, де користувачі можуть керувати та виконувати команди оболонки. З іншого боку, процес написання набору команд для виконання в системі Linux. Файл, який містить такі інструкції, називається сценарієм bash.

    Використання сценаріїв оболонки

    Нижче наведено деякі поширені способи використання сценарію оболонки:

    • Автоматизація завдань – Його можна використовувати для автоматизації повторюваних завдань, таких як звичайне резервне копіювання та завдання встановлення програмного забезпечення.
    • Налаштування – Можна використовувати сценарії оболонки, щоб створити середовище командного рядка та легко виконувати завдання відповідно до потреб.
    • Керування файлами – Сценарії оболонки також можна використовувати для керування та маніпулювання файлами та каталогами, наприклад для переміщення, копіювання, перейменування або видалення файлів.

    Приклади сценаріїв оболонки в Linux

    1) Що означає символ (#!) на початку сценарію оболонки?

    The шибання (#!) на початку сценарію вказує інтерпретатор, який слід використовувати для виконання сценарію. Він повідомляє системі, яка оболонка чи інтерпретатор має інтерпретувати команди сценарію.

    Наприклад: Припустимо, у нас є сценарій з назвою myscript.sh написаний в оболонці Bash:

    shebang

    shebang

    У цьому прикладі:

    • #!/bin/bash на початку сценарію вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
    • Команди echo використовуються для друку повідомлень на термінал.

    2) Як запустити сценарій оболонки з командного рядка?

    Щоб запустити сценарій оболонки з командного рядка, нам потрібно виконати такі дії:

    • Переконайтеся, що файл сценарію має дозволи на виконання за допомогою команда chmod :
    chmod +x myscript.sh>
    • Виконайте сценарій, використовуючи його назву файлу:
    ./myscript.sh>

    Тут треба замінити myscrtipt.sh з назвою вашого сценарію.

    3) Напишіть сценарій оболонки, який друкує techcodeview.com на терміналі.

    Створіть назву сценарію `myscript.sh` (ми використовуємо ` оскільки ` редактор, ви можете вибрати будь-який редактор)

    vim myscript.sh>

    #!/bin/bash
    # Цей сценарій друкує techcodeview.com на терміналі
    луна techcodeview.com

    надруковане ім'я

    надруковане ім'я

    Ми робимо наш сценарій виконуваним за допомогою `chmod +x`, потім виконуємо за допомогою `./myscipt.sh` і отримуємо бажаний результат techcodeview.com.

    4) Поясніть призначення команди echo в сценаріях оболонки.

    The команда echo використовується для відображення тексту або змінних на терміналі. Він зазвичай використовується для друку повідомлень, значень змінних і генерування вихідних даних програми.

    434

    команда echo

    У цьому прикладі ми виконали `echo` на терміналі безпосередньо, оскільки він працює так само в сценарії оболонки.

    5) Як ви можете призначити значення змінній у сценарії оболонки?

    Змінним присвоюються значення за допомогою оператора присвоювання =.

    Наприклад:

    #!/bin/bash
    # Присвоєння значення змінній
    ім'я=Джаєш
    вік=21
    echo $name $age

    Пояснення:

    • Змінній name присвоєно значення Jayesh.
    • Змінній віку присвоєно значення 21.
    • echo використовується для друку, а `$name` `$age` використовується для виклику значення, що зберігається в змінних.

    435

    6) Напишіть сценарій оболонки, який приймає ім’я користувача як вхідні дані та вітає його.

    Створіть назву сценарію `example.sh`.

    #!/bin/bash
    # Запитайте в користувача ім'я
    echo Як тебе звуть?
    прочитати назву
    # Привітайте користувача
    echo Привіт, $name! Приємно познайомитись.

    Пояснення:

    • #!/bin/bash: це рядок shebang. Він повідомляє системі використовувати інтерпретатор Bash для виконання сценарію.
    • # Запитайте в користувача ім'я: це коментар. Він надає контекст про майбутній код. Коментарі ігноруються перекладачем.
    • echo Як вас звати?: Команда echo використовується для відображення тексту в подвійних лапках на терміналі.
    • read name: команда read очікує, поки користувач введе текст, і зберігає його в імені змінної.
    • echo Привіт, $name! Приємно познайомитися.: цей рядок використовує команду echo для друку вітального повідомлення, яке містить значення змінної name, яке було зібрано з введених користувачем даних.

    436

    7) Як додати коментарі до сценарію оболонки?

    Коментарі в сценаріях оболонки використовуються для надання пояснень або контексту до коду. Вони ігноруються перекладачем і призначені лише для людей, які читають сценарій. Ви можете додавати коментарі за допомогою символу #.

    #!/bin/bash
    # Це коментар, що пояснює мету сценарію
    відлуння gfg

    8) Створіть сценарій оболонки, який перевіряє, чи існує файл у поточному каталозі.

    Ось сценарій, який перевіряє, чи існує файл під назвою example.txt у поточному каталозі:

    #!/bin/bash
    file=example.txt
    # Перевірте, чи файл існує
    if [ -e $file ]; потім
    echo Файл існує: $file
    інше
    echo Файл не знайдено: $file
    бути

    Пояснення:

    1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
    2. file=example.txt: цей рядок визначає файл змінної та присвоює йому значення example.txt. Ви можете замінити це назвою файлу, який потрібно перевірити.
    3. if [ -e $file ]; then: Цей рядок починає оператор if. Умова [ -e $file ] перевіряє, чи існує файл, визначений значенням змінної file. Прапор -e використовується для перевірки існування файлу.
    4. echo Файл існує: $file: якщо умова вірна (тобто файл існує), цей рядок друкує повідомлення про те, що файл існує, разом із назвою файлу.
    5. else: якщо умова хибна (тобто файл не існує), сценарій виконує код у гілці else.
    6. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено, разом із назвою файлу.
    7. fi: цей рядок позначає кінець оператора if.
    Пошук файлу

    Пошук файлу

    9) Яка різниця між одинарними лапками (‘) і подвійними лапками () у сценаріях оболонки?

    Одинарні лапки (‘) і подвійні лапки () використовуються для включення рядків у сценарії оболонки, але вони мають різну поведінку:

    • Одинарні лапки: усе, що знаходиться в одинарних лапках, розглядається як літеральний рядок. Імена змінних і більшість спеціальних символів не розгортаються.
    • Подвійні лапки: змінні та певні спеціальні символи в подвійних лапках розгортаються. Вміст підлягає підстановці змінних і підстановці команд.

    #!/bin/bash

    abcd=Привіт
    echo ‘$abcd’ # Вихід: $abcd
    echo $abcd # Вихід: Привіт

    10) Як ви можете використовувати аргументи командного рядка в сценарії оболонки?

    Аргументи командного рядка це значення, які надаються сценарію під час його виконання. До них можна отримати доступ у сценарії за допомогою спеціальних змінних, таких як $1, $2 тощо, де $1 представляє перший аргумент, $2 представляє другий аргумент і так далі.

    Наприклад: Якщо ім'я нашого сценарію в `example.sh`

    #!/bin/bash

    echo Назва сценарію: $0
    echo Перший аргумент: $1
    echo Другий аргумент: $2

    Якщо ми запустимо сценарій із `.example.sh hello_1 hello_2`, він виведе:

    аргументи cli

    аргументи cli

    11) Як ви використовуєте цикл for для перебору списку значень?

    Створіть назву сценарію `example.sh`.

    #!/bin/bash

    фрукти=(яблуко банан вишня фінік)
    для фруктів у ${fruits[@]}; робити
    echo Поточний фрукт: $fruit
    зроблено

    Пояснення:

    Рядок `fruits=` створює масив під назвою fruits із чотирьох елементів: яблуко, банан, вишня та фінік.

    • для фруктів у ${fruits[@]}; do: Цей рядок починає цикл for. Ось що означає кожна частина:
    • for fruit: Це оголошує змінну циклу під назвою fruit. У кожній ітерації циклу fruit буде зберігати значення поточного елемента з масиву fruits.
    • ${fruits[@]}: це розширення масиву, яке бере всі елементи з масиву fruits. Синтаксис ${…} гарантує, що кожен елемент розглядається як окремий елемент.
    • do: це ключове слово позначає початок тіла циклу.
    • echo Поточний плод: $fruit: усередині циклу цей рядок використовує команду echo для відображення поточного значення змінної циклу fruit. Він друкує повідомлення на кшталт Current fruit: apple для кожного фрукта в масиві.
    • done: це ключове слово позначає кінець тіла циклу. Він повідомляє сценарію, що цикл завершено.
    для циклу

    для циклу

    12) Напишіть сценарій оболонки, який обчислює суму цілих чисел від 1 до N за допомогою циклу.

    Створіть назву сценарію `example.sh`.

    #!/bin/bash

    echo Введіть число (N):
    читати Н
    сума=0
    for (( i=1; i<=$N; i++ )); робити
    сума=$((сума + i))
    зроблено
    echo Сума цілих чисел від 1 до $N: $sum

    Пояснення:
    Сценарій починається з запиту на введення числа (N) за допомогою read. Це число визначить, скільки разів виконується цикл.

    1. Змінна sum ініціалізується рівним 0. Ця змінна відстежуватиме суму цілих чисел.
    2. Цикл for починається з for (( i=1; i<=$N; i++ )). Ця структура циклу використовується для повторення набору дій певну кількість разів, у цьому випадку від 1 до значення N.
    3. Усередині циклу відбуваються такі речі:
      • i=1 встановлює для змінної циклу i значення 1 на початку кожної ітерації.
      • Умова циклу i<=$N перевіряє, чи i все ще менше або дорівнює заданому числу N.
      • Якщо умова виконується, виконується тіло циклу.
      • sum=$((sum + i)) обчислює нове значення sum, додаючи до нього поточне значення i. Це додає цілі числа від 1 до поточного значення i.
    4. Після кожної ітерації i++ збільшує значення i на 1.
    5. Цикл продовжує працювати, доки умова i<=$N не стане помилковою (коли i стане більшим за N).
    6. Після завершення циклу сценарій відображає суму цілих чисел від 1 до введеного числа N.

    439

    13) Створіть сценарій, який шукатиме певне слово у файлі та підраховуватиме його випадки.

    Створіть назву сценарію `word_count.sh`

    #!/bin/bash

    echo Введіть слово для пошуку:
    читати target_word
    echo Введіть назву файлу:
    прочитати назву файлу
    count=$(grep -o -w $target_word $filename | wc -l)
    echo Слово «$target_word» з’являється $count разів у «$filename».

    Пояснення:

    • echo Введіть слово для пошуку:: Цей рядок відображає повідомлення з проханням до користувача ввести слово, яке він хоче знайти у файлі.
    • read target_word: цей рядок читає введені користувачем дані та зберігає їх у змінній під назвою target_word.
    • echo Введіть ім'я файлу:: Цей рядок відображає повідомлення з проханням до користувача ввести назву файлу, у якому він бажає виконати пошук.
    • read filename: Цей рядок читає введені користувачем дані та зберігає їх у змінній з назвою filename.
    • count=$(grep -o -w $target_word $filename | wc -l): цей рядок виконує основну роботу сценарію. Давайте розберемо це далі:
      • grep -o -w $target_word $filename: Ця частина команди шукає входження target_word у вказаному імені файлу. Параметри -o і -w гарантують, що враховуються лише цілі збіги слів.
      • |: Це канал, який приймає вихідні дані попередньої команди та надсилає їх як вхідні дані для наступної команди.
      • wc -l: ця частина команди використовує команду wc для підрахунку кількості рядків у вхідних даних. Параметр -l спеціально підраховує рядки.
      • Уся команда обчислює кількість входжень target_word у файлі та призначає цю кількість змінній coun

    441

    14) Поясніть різницю між стандартним виведенням (stdout) і стандартною помилкою (stderr).

    Основна відмінність між стандартним виведенням (stdout) і стандартною помилкою (stderr) полягає в наступному:

    • Стандартний вихід (stdout): Це стандартний вихідний потік, куди надходить звичайний вихід команди. Він відображається на терміналі за замовчуванням. Ви можете перенаправити його до файлу за допомогою>.
    • Стандартна помилка (stderr): Це вихідний потік для повідомлень про помилки та попереджень. Він також відображається на терміналі за замовчуванням. Ви можете перенаправити його у файл за допомогою 2>.

    15) Поясніть концепцію умовних операторів у сценаріях оболонки.

    Умовні оператори в сценаріях оболонки дозволяють нам приймати рішення та контролювати потік нашого сценарію на основі певних умов. Вони дозволяють нашому сценарію виконувати різні набори команд залежно від того, чи є конкретна умова істинною чи хибною. Основними умовними операторами в сценаріях оболонки є оператор if, оператор elif (необов’язковий) і оператор else (необов’язковий).

    Ось базова структура умовного оператора в сценаріях оболонки:

    якщо [умова]; потім
    # Команди для виконання, якщо умова виконується
    elif [інша_умова]; потім
    # Команди для виконання, якщо another_condition є істинним (необов’язково)
    інше
    # Команди для виконання, якщо жодна з умов не виконується (необов’язково)
    бути

    Пояснення:

    • [умова] = Команда, яка оцінює умову та повертає істинний (0) або хибний (ненульовий) статус виходу.
    • then = Це ключове слово, яке вказує, що наступні за ним команди будуть виконані, якщо умова оцінюється як істина.
    • elif = (скорочення від else if) Це розділ, який дозволяє нам вказати додаткові умови для перевірки.
    • else = це розділ, який містить команди, які будуть виконані, якщо жодна з умов не виконується.
    • fi = Це ключове слово, яке позначає кінець умовного блоку.

    16) Як ви читаєте рядки з файлу в сценарії оболонки?

    до читати рядки з файлу в сценарії оболонки, ми можемо використовувати різні методи, але один з поширених підходів полягає у використанні циклу while у поєднанні з командою read. Ось як ми можемо це зробити:

    #!/bin/bash
    file=/home/jayeshkumar/jayesh.txt
    # Перевірте, чи файл існує
    if [ -e $file ]; потім
    while IFS= читання рядка -r; робити
    echo Читання рядка: $line
    # Додайте тут свою логіку обробки
    виконано <$файл
    інше
    echo Файл не знайдено: $file
    бути

    Пояснення:

    1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
    2. file=/home/jayeshkumar/jayesh.txt: цей рядок визначає файл змінної та призначає повний шлях до файлу jayesh.txt у каталозі /home/jayeshkumar. Змініть цей шлях, щоб відповідати фактичному шляху до файлу, який ви хочете прочитати.
    3. if [ -e $file ]; then: Цей рядок починає оператор if. Він перевіряє, чи існує файл, визначений змінною $file. Прапор -e перевіряє наявність файлу.
    4. while IFS= читання рядка -r; do: цей рядок ініціює цикл while, який читає рядки з файлу.
      • IFS=: IFS (внутрішній роздільник полів) має порожнє значення, щоб зберегти пробіли на початку та в кінці.
      • read -r рядок: це зчитує поточний рядок із файлу та зберігає його у рядку змінної.
    5. echo Прочитаний рядок: $line: цей рядок друкує вміст рядка, який було прочитано з файлу. Змінна $line містить вміст поточного рядка.
    6. # Додайте свою логіку обробки тут: це коментар-заповнювач, де ви можете додати свою власну логіку для обробки кожного рядка. Наприклад, ви можете проаналізувати рядок, отримати інформацію або виконати певні дії на основі вмісту.
    7. done <$file: це позначає кінець циклу while. <$file перенаправляє вміст файлу, який буде прочитано циклом.
    8. else: якщо файл не існує (умова оператора if невірна), сценарій виконує код у гілці else.
    9. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено.
    10. fi: цей рядок позначає кінець оператора if.
    читання файлу

    читання файлу

    Тут ми використали ` pwd `, щоб отримати шлях до поточного каталогу.

    17) Напишіть функцію в сценарії оболонки, яка обчислює факториал заданого числа.

    Ось такий сценарійобчислити факторіалзаданого числа.

    #!/bin/bash
    # Визначте функцію для обчислення факторіалу
    calculate_factory() {
    num=$1
    факт=1
    for ((i=1; i<=num; i++)); робити
    факт=$((факт * i))
    зроблено
    луна $факт
    }
    # Запропонувати користувачеві ввести число
    echo Введіть число:
    читати input_num
    # Викличте функцію calculate_factorial із введеним числом
    factorial_result=$(calculate_factorial $input_num)
    # Відобразити факторний результат
    echo Факторіал $input_num: $factorial_result

    Пояснення:

    1. Сценарій починається з рядка shebang #!/bin/bash для визначення інтерпретатора.
    2. Calculate_factorial() визначається як функція. Він приймає один аргумент, num, який є числом, факторіал якого потрібно обчислити.
    3. Усередині функції факт ініціалізується рівним 1. Ця змінна зберігатиме факторний результат.
    4. Цикл for повторює від 1 до заданого числа (num). У кожній ітерації він множить поточне значення факту на індекс циклу i.
    5. Після завершення циклу змінна fact містить обчислений факториал.
    6. Сценарій пропонує користувачеві ввести число за допомогою read.
    7. Функція calculate_factorial викликається з числом, наданим користувачем, і результат зберігається в змінній factorial_result.
    8. Нарешті сценарій відображає обчислений факторний результат.
    Факторіал

    Факторіал

    18) Як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки?

    У сценарії оболонки ви можете обробляти такі сигнали, як Ctrl+C (також відомий як SIGINT), використовуючи команду trap. Ctrl+C генерує сигнал SIGINT, коли користувач натискає його, щоб перервати запущений сценарій або програму. Використовуючи команду trap, ви можете вказати дії, які мають бути виконані при отриманні певного сигналу. Ось як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки:

    #!/bin/bash
    прибирати() {
    echo Сценарій перервано. Виконання очищення…
    # Додайте тут свої дії з очищення
    вихід 1
    }
    # Налаштувати перехоплення для виклику функції очищення, коли отримано Ctrl+C (SIGINT).
    очищення пастки SIGINT
    # Решта вашого сценарію
    луна Бігає…
    спати 10
    echo Готово.

    Обробка сигналів важлива для того, щоб зробити сценарії надійними та забезпечити ефективну обробку несподіваних переривань. Ви можете налаштувати функцію очищення відповідно до ваших конкретних потреб, як-от закриття файлів, зупинка процесів або запис інформації перед виходом зі сценарію.

    Пояснення:

    1. #!/bin/bash: цей рядок shebang визначає інтерпретатор, який буде використовуватися для виконання сценарію.
    2. cleanup() { … }: це визначає функцію під назвою cleanup. У цю функцію можна включити будь-які дії, які потрібно виконати, коли сценарій переривається, наприклад закриття файлів, звільнення ресурсів або виконання інших завдань очищення.
    3. trap cleanup SIGINT: Команда trap використовується для налаштування обробника сигналів. У цьому випадку це вказує, що коли отримано сигнал SIGINT (Ctrl+C), слід виконати функцію очищення.
    4. echo Виконується…, sleep 10, echo Finished.: Це лише приклади команд для імітації виконання сценарію.

    446

    19) Створіть сценарій, який перевіряє та видаляє повторювані рядки в текстовому файлі.

    Ось наш сценарій Linux, у якому ми будемо видаляти повторювані рядки з текстового файлу.

    #!/bin/bash
    input_file=input.txt
    вихідний_файл=вихідний.txt
    сортувати $input_file | uniq> $output_file
    echo Повторювані рядки успішно видалено.

    Пояснення:

    1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
    2. Змінна input_file встановлюється на ім’я вхідного файлу, що містить повторювані рядки (змініть це на фактичне ім’я вхідного файлу).
    3. Змінна output_file встановлюється на назву вихідного файлу, з якого буде видалено дублікати (змініть це на бажане ім’я вихідного файлу).
    4. Сценарій використовує команду sort для сортування рядків у вхідному файлі. Сортування рядків гарантує, що повторювані рядки групуються разом.
    5. Потім відсортовані рядки передаються через команду uniq, яка видаляє послідовні повторювані рядки. Вихідні дані цього процесу перенаправляються у вихідний файл.
    6. Після видалення дублікатів сценарій друкує повідомлення про успіх.
    видалення повторюваних рядків

    видалення повторюваних рядків

    Тут ми використовуємо ` кішка `, щоб відобразити текст у текстовому файлі.

    20) Напишіть сценарій, який генерує безпечний випадковий пароль.

    Ось наш скрипт для створення безпечного випадкового пароля.

    #!/bin/bash
    # Функція генерації випадкового пароля
    generate_password() {
    tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
    }
    # Виклик функції та збереження згенерованого пароля
    пароль=$(згенерувати_пароль)
    echo Згенерований пароль: $password

    Примітка: користувач може відповідно змінити довжину пароля, замінивши число `12`.

    Пояснення:

    1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
    2. Функція generate_password призначена для створення випадкового пароля. Ось як це працює:
      • tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
      • fold -w 12 розбиває відфільтровані випадкові дані на рядки по 12 символів у кожному.
      • head -n 1 вибирає перший рядок, фактично надаючи нам випадкову послідовність символів довжиною 12.
    3. Змінній password присвоюється результат виклику функції generate_password.
    4. Нарешті, згенерований пароль відображається за допомогою луни.

    448

    21) Напишіть сценарій оболонки, який обчислює загальний розмір усіх файлів у каталозі.

    Ось сценарій оболонки для обчислення загального розміру всіх файлів у каталозі.

    #!/bin/bash
    каталог=/шлях/до/вашого/каталогу
    total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
    echo Загальний розмір файлів у $directory: $total_size

    Пояснення:

    1. Сценарій починається з #!/bin/bash shebang, що вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
    2. Змінна каталогу встановлюється на шлях до каталогу, для якого потрібно обчислити загальний розмір файлу. Замініть /path/to/your/directory справжнім шляхом.
    3. Команда du використовується для оцінки використання файлового простору. Використовуються такі варіанти:
      • -c: створити загальну суму.
      • -s: відображати лише загальний розмір зазначеного каталогу.
      • -h: друкувати розміри в зручному для читання форматі (наприклад, КБ, МБ, ГБ).
    4. Вихід du передається до grep total, щоб відфільтрувати рядок, який містить загальний розмір.
    5. awk ‘{print $1}’ використовується для виділення першого поля (загального розміру) з рядка.
    6. Розрахований загальний розмір зберігається в змінній total_size.
    7. Нарешті, сценарій відображає загальний розмір за допомогою echo.
    Загальний розмір файлів

    Загальний розмір файлів

    Тут ми використали ` pwd `, щоб побачити поточний шлях до каталогу.

    22) Поясніть різницю між операторами if і elif у сценаріях оболонки.

    Особливість `if`Staiftement Заява `elif`
    призначення Поясніть різницю між операторами if і elif у сценаріях оболонки. Надає альтернативні умови для перевірки, коли початкова умова if є хибною.
    використання Використовується для початкового стану. Використовується після початкової умови if для перевірки додаткових умов.
    кількість блоків Може мати лише один блок if. Може мати декілька блоків elif, але лише один блок else (необов’язково).
    виконання Виконує блок коду, пов’язаний із оператором if, якщо умова виконується. Якщо умова false, блок else (якщо присутній) виконується (необов’язково). Перевіряє кожну умову elif по порядку. Якщо одна з умов elif виконується, виконується відповідний блок коду, і сценарій завершує роботу з усього умовного блоку. Якщо жодна з умов elif не виконується, виконується блок else (якщо він присутній).
    Вкладені структури Може бути вкладено в інші блоки if, elif або else. Не можна вкладати в інший блок elif, але можна використовувати всередині блоку if або else.

    Розберемося в цьому на прикладі.

    #!/bin/bash
    число=5
    if [$number -gt 10]; потім
    echo $number більше 10
    інше
    echo $number не більше 10
    бути
    луна ——–
    if [$number -gt 10]; потім
    echo $number більше 10
    elif [$number -eq 10]; потім
    echo $number дорівнює 10
    інше
    echo $number менше 10
    бути

    Пояснення:

    У цьому прикладі перший блок if перевіряє, чи число більше 10. Якщо ні, він друкує повідомлення про те, що число не більше 10. Другий блок із операторами elif перевіряє кілька умов послідовно, доки одна з них не стане істинною. У цьому випадку, оскільки значення числа дорівнює 5, результатом буде:

    if_elif різниця

    if_elif різниця

    23) Як ви використовуєте цикл while для багаторазового виконання команд?

    Цикл while використовується в сценаріях оболонки для багаторазового виконання набору команд, доки виконується певна умова. Цикл продовжує виконувати команди, поки умова не стане помилковою.

    Ось основний синтаксис циклу while:

    while [умова]; робити
    # Команди для виконання
    зроблено

    Пояснення:

    1. Цикл `while` починається з ключового слова `while`, після якого йде умова, укладена в квадратні дужки `[ ]`.
    2. Тіло циклу, яке містить команди для виконання, укладено в ключові слова `do` і `done`.
    3. Цикл спочатку перевіряє умову. Якщо умова виконується, виконуються команди в тілі циклу. Після виконання тіла циклу умова перевіряється знову, і процес повторюється, доки умова не стане помилковою.

    приклад: Якщо ми хочемо надрукувати числа від 1 до 5

    #!/bin/bash
    лічильник=1
    while [$counter -le 5]; робити
    echo Номер: $лічильник
    лічильник=$((лічильник + 1))
    зроблено

    Пояснення:

    • Змінна лічильника має значення 1.
    • Цикл while перевіряє, чи значення лічильника менше або дорівнює 5. Поки ця умова виконується, цикл продовжує виконуватися.
    • Усередині циклу поточне значення лічильника друкується за допомогою echo.
    • Лічильник збільшується на 1 за допомогою виразу $((лічильник + 1)).
    цикл while

    цикл while

    24) Створіть сценарій оболонки, який знаходить і перераховує всі порожні файли в каталозі.

    Сценарій оболонки, який можна використовувати для пошуку та списку всіх порожніх файлів у каталозі за допомогою команд `find` і `stat`:

    #!/bin/bash
    каталог=$1″
    if [ -z $каталог ]; потім
    echo Використання: $0
    вихід 1
    бути

    якщо [! -d $каталог]; потім
    echo Помилка: «$directory» не є дійсним каталогом.
    вихід 1
    бути
    echo Порожні файли в $directory:
    find $directory -type f -empty

    Пояснення:

    1. ` #!/bin/bash `: Це називається shebang, і воно повідомляє операційній системі використовувати оболонку Bash для інтерпретації та виконання сценарію.
    2. ` каталог=$1″ `: цей рядок призначає перший аргумент командного рядка (позначений $1) змінній ` каталог `.
    3. ` if [ -z $каталог ]; потім `: цей рядок починає оператор if, який перевіряє, чи ` каталог ` змінна порожня (-z перевіряє порожній рядок).
    4. ` echo Використання: $0 `: якщо каталог порожній, цей рядок друкує повідомлення про використання, де ` $0 ` представляє назву сценарію.
    5. ` вихід 1 `: цей рядок завершує роботу сценарію з кодом виходу ` 1 `, що вказує на помилку.
    6. ` бути `: цей рядок позначає кінець ` якщо ` заява.
    7. ` якщо [! -d $каталог]; потім `: запускається інший оператор if, щоб перевірити, чи існує наданий каталог (` ` тести для каталогу).
    8. ` echo Помилка: «$directory» не є дійсним каталогом. `: якщо наданий каталог не існує, цей рядок друкує повідомлення про помилку.
    9. ` вихід 1 `: вихід зі сценарію з кодом виходу ` 1 `.
    10. ` бути `: позначає кінець другого ` якщо` заява.
    11. ` echo Порожні файли в $directory: `: якщо наразі все вірно, цей рядок друкує повідомлення про те, що сценарій перерахує порожні файли у вказаному каталозі.
    12. ` find $directory -type f -empty `: у цьому рядку використовується ` знайти ` команда пошуку порожніх файлів (` - порожній `) типу звичайних файлів (` - тип f `) у вказаному каталозі. Потім він перераховує ці порожні файли.
    Пошук порожніх файлів

    Пошук порожніх файлів

    Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях поточного каталогу home/jayeshkumar/

    25) Яка мета команди read у сценаріях оболонки?

    Команда read у сценаріях оболонки дозволяє сценарію запитувати у вас інформацію. Це як коли комп’ютер задає вам запитання й чекає на відповідь. Це корисно для сценаріїв, які вимагають, щоб ви щось ввели, або коли сценарію потрібно працювати з інформацією з файлів. Команда read допомагає сценарію зупинятися й чекати, що ви введете, а потім він може використовувати цю інформацію для виконання інших завдань у сценарії.

    Синтаксис команди read:

    read variable_name>

    приклад : якщо ми хочемо взяти ім’я як вхідні дані від користувача, щоб надрукувати його.

    #!/bin/bash
    echo Будь ласка, введіть своє ім'я:
    прочитати назву
    echo Привіт, $name!

    453

    прочитати ім

    Таким чином, команда read використовується для захоплення введених користувачем даних або даних із файлів у сценаріях оболонки, що робить сценарії більш інтерактивними та універсальними.

    26) Напишіть сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

    Ось сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

    #!/bin/bash
    каталог=$1″
    if [ -z $каталог ]; потім
    echo Використання: $0
    вихід 1
    бути

    якщо [! -d $каталог]; потім

    echo Помилка: «$directory» не є дійсним каталогом.
    вихід 1
    бути

    cd $каталог || вихід 1

    для файлу в *; робити
    if [ -f $file ]; потім
    newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
    [ $file != $newname ] && mv $file $newname
    бути
    зроблено

    Пояснення:

    1. #!/bin/bash : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. каталог=$1″ : цей рядок призначає перший аргумент командного рядка каталогу змінних.
    3. if [ -z $каталог ]; потім : цей рядок перевіряє, чи порожня змінна каталогу (під час виконання сценарію не надається аргумент).
    4. echo Використання: $0 : якщо каталог порожній, цей рядок друкує повідомлення про використання з назвою сценарію ($0).
    5. вихід 1 : цей рядок завершує роботу сценарію з кодом виходу 1, що вказує на помилку.
    6. f i: Це означає кінець першого оператора if.
    7. якщо [! -d $каталог]; потім : цей рядок перевіряє, чи не існує вказаного каталогу (-d перевіряє наявність каталогу).
    8. echo Помилка: «$directory» не є дійсним каталогом. : якщо вказаний каталог не існує, цей рядок друкує повідомлення про помилку.
    9. вихід 1 : вихід зі сценарію з кодом виходу 1.
    10. бути : Позначає кінець другого оператора if.
    11. cd $каталог || вихід 1 : змінює поточний робочий каталог на вказаний каталог. Якщо змінити каталог не вдалося (наприклад, каталог не існує), сценарій завершує роботу з кодом помилки.
    12. для файлу в *; зробити: я для файлу в *; зробити: ініціює цикл, який перебирає всі елементи в поточному каталозі (* відповідає всім назвам файлів).
    13. if [ -f $file ]; потім : перевіряє, чи поточний елемент ітерації циклу є звичайним файлом (-f перевіряє звичайний файл).
    14. newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : перетворює поточне ім’я файлу ($file) на нижній регістр за допомогою команди tr і зберігає результат у змінній newname.
    15. [ $file != $newname ] && mv $file $newname : Порівнює оригінальну назву файлу з новою назвою файлу, написаною в нижньому регістрі. Якщо вони різні, він перейменовує файл за допомогою команди mv.
    16. бути : Позначає кінець внутрішнього оператора if.
    17. зроблено : Позначає кінець циклу.

    454

    Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях до поточного каталогу home/jayeshkumar/test

    27) Як можна використовувати арифметичні операції в сценарії оболонки?

    Арифметичні операції можна виконувати в сценарії оболонки за допомогою різних вбудованих методів. Оболонка надає механізми для простих арифметичних обчислень за допомогою арифметичного розширення, наприклад:

    1. Арифметичне розширення ($((…)))
    2. Використання команди expr
    3. Використання команди let

    Ось наш сценарій Shell, що пояснює всі три методи арифметичних операцій.

    #!/bin/bash
    num1=10
    num2=5

    #Арифметичне розширення ($((…)))

    результат=$((num1 + num2))
    echo Сума: $результат

    #Використання команди expr

    сума=$(вираз $num1 + $num2)
    echo Сума: $сума

    #Використання команди let

    нехай сума = num1 + num2
    echo Сума: $сума

    Пояснення:

    1. `#!/bin/bash` : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. `num1=10` і ` num2=5` : ці рядки присвоюють значення 10 і 5 змінним ` num1 ` і ` num2 ` відповідно.
    3. `#Арифметичне розширення ($((…)))` : це коментар, що вказує на початок розділу, який демонструє арифметичне розширення.
    4. `результат=$((num1 + num2))` : цей рядок використовує арифметичне розширення для обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` результат ` змінна.
    5. `echo Sum: $result` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` результат ` змінна.
    6. `#Використання команди expr` : це коментар, що вказує на початок розділу, який демонструє використання ` вираз ` команда арифметичних операцій.
    7. `sum=$(expr $num1 + $num2)` : цей рядок використовує ` вираз ` команда обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` сума ` змінна. Зауважте, що ` вираз Команда ` вимагає пробілів навколо операторів.
    8. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
    9. `#Використання команди let` : це коментар, що вказує на початок розділу, який демонструє використання ` дозволяти ` команда арифметичних операцій.
    10. `нехай сума = num1 + num2″` : цей рядок використовує ` дозволяти ` команда обчислення суми ` num1 ` і ` num2 ` і призначає результат ` сума ` змінна. ` дозволяти Команда ` не вимагає пробілів навколо операторів.
    11. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
    арифметика

    арифметика

    28) Створіть сценарій, який перевіряє, чи доступний хост мережі.

    Ось простий сценарій оболонки, який використовує команду ping, щоб перевірити, чи доступний хост мережі:

    #!/bin/bash
    хост=$1″
    якщо [ -z $хост]; потім
    echo Використання: $0
    вихід 1
    бути
    ping -c 4 $хост

    якщо [ $? -екв 0]; потім
    echo $host доступний.
    інше
    echo $host недоступний.
    бути

    Пояснення:

    1. Він приймає ім’я хоста або IP-адресу як аргумент і перевіряє, чи надано аргумент.
    2. Якщо аргумент не вказано, відображається повідомлення про використання та завершується робота.
    3. Він використовує команду ping з опцією -c 4 для надсилання чотирьох ехо-запитів ICMP на вказаний хост.
    4. Після виконання команди ping перевіряється статус виходу ($?). Якщо статус виходу дорівнює 0, це означає, що хост доступний і сценарій друкує повідомлення про успіх. В іншому випадку він друкує повідомлення про помилку.

    456

    Примітка : нам потрібно надати ім’я хоста як аргумент під час виконання сценарію. Тут ми використали google.com

    29) Напишіть сценарій оболонки, щоб знайти найбільший елемент у масиві:

    Ось сценарій оболонки для пошуку найбільшого елемента в масиві.

    #!/bin/bash
    # Оголошення масиву
    масив=(3 56 24 89 67)

    # Ініціалізація змінної для збереження максимального значення, починаючи з першого елемента

    макс=${масив[0]}

    # Ітерація по масиву

    для числа в ${array[@]}; робити

    # Порівняти кожен елемент із поточним максимумом

    if ((num> max)); потім
    max=$num
    бути
    зроблено

    # Вивести максимальне значення

    echo Максимальний елемент у масиві: $max

    Пояснення:

    1. ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. ` масив=(3 56 24 89 67) `: масив оголошується та ініціалізується значеннями.
    3. ` макс=${масив[0]} `: `max` ініціалізується першим елементом масиву.
    4. ` для числа в ${array[@]}; робити `: цикл `for` використовується для перебору елементів масиву.
    5. ` if ((num> max)); потім `: Оператор `if` перевіряє, чи поточний елемент `num` більший за поточний максимальний `max`.
    6. ` max=$num`: Якщо`num ` більше ніж `max`, `max` оновлюється значенням num.
    7. ` зроблено `: цикл `for` закрито.
    8. ` echo Максимальний елемент у масиві: $max `: нарешті сценарій друкує максимальне значення, знайдене в масиві.
    461

    найбільше число

    30) Напишіть скрипт для обчислення суми елементів у масиві.

    #!/bin/bash

    # Оголошення масиву

    масив=(1 65 22 19 94)

    # Ініціалізація змінної для збереження суми

    сума=0

    # Перебираємо масив і додаємо кожен елемент до суми

    для числа в ${array[@]}; робити
    am=$((am + am))
    зроблено

    # Вивести суму

    echo Сума елементів у масиві: $sum

    Пояснення:

    ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.

    ` масив=(1 65 22 19 94) `: масив оголошується та ініціалізується значеннями.

    ` сума=0 `:` сума ` ініціалізується нулем, щоб зберегти суму елементів.

    ` для числа в ${array[@]}; робити `: A ` для Цикл ` використовується для перебору елементів масиву.

    ` am=$((am + am)) `: усередині циклу кожен елемент ` на одному ` додається до ` сума ` змінна.

    ` зроблено `: ` для ` цикл закрито.

    `echo Сума елементів у масиві: $sum`: Нарешті, скрипт друкує суму всіх елементів у масиві.

    462

    Сума елементів

    Дізнайтеся більше про сценарії оболонки

    Висновок

    Ми всі фанати знаємо, що сценарій оболонки дуже корисний для підвищення продуктивності роботи, а також економії часу. Отже, у цій статті ми розглянули 30 дуже корисних і найбільш шахрайських прикладів сценаріїв оболонки . Ми сподіваємося, що цей повний посібник із прикладів сценаріїв оболонки допоможе вам зрозуміти все про сценарії оболонки.



    `: якщо каталог порожній, цей рядок друкує повідомлення про використання, де `

    Для всіх дистрибутивів Linux сценарій оболонки — це як чарівна паличка, яка автоматизує процес, економить час користувачів і підвищує продуктивність. У цьому навчальному посібнику зі створення сценаріїв ви познайомитеся з 25 плюс прикладами сценаріїв.

    Але перш ніж ми перейдемо до теми сценарій оболонки приклади, давайте розберемося зі сценарієм оболонки та реальними випадками використання сценаріїв оболонки.

    Що таке Shell Script?

    Ну, оболонка - це a CLI ( інтерпретатор командного рядка ), який запускається в текстовому вікні, де користувачі можуть керувати та виконувати команди оболонки. З іншого боку, процес написання набору команд для виконання в системі Linux. Файл, який містить такі інструкції, називається сценарієм bash.

    Використання сценаріїв оболонки

    Нижче наведено деякі поширені способи використання сценарію оболонки:

    • Автоматизація завдань – Його можна використовувати для автоматизації повторюваних завдань, таких як звичайне резервне копіювання та завдання встановлення програмного забезпечення.
    • Налаштування – Можна використовувати сценарії оболонки, щоб створити середовище командного рядка та легко виконувати завдання відповідно до потреб.
    • Керування файлами – Сценарії оболонки також можна використовувати для керування та маніпулювання файлами та каталогами, наприклад для переміщення, копіювання, перейменування або видалення файлів.

    Приклади сценаріїв оболонки в Linux

    1) Що означає символ (#!) на початку сценарію оболонки?

    The шибання (#!) на початку сценарію вказує інтерпретатор, який слід використовувати для виконання сценарію. Він повідомляє системі, яка оболонка чи інтерпретатор має інтерпретувати команди сценарію.

    Наприклад: Припустимо, у нас є сценарій з назвою myscript.sh написаний в оболонці Bash:

    shebang

    shebang

    У цьому прикладі:

    • #!/bin/bash на початку сценарію вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
    • Команди echo використовуються для друку повідомлень на термінал.

    2) Як запустити сценарій оболонки з командного рядка?

    Щоб запустити сценарій оболонки з командного рядка, нам потрібно виконати такі дії:

    • Переконайтеся, що файл сценарію має дозволи на виконання за допомогою команда chmod :
    chmod +x myscript.sh>
    • Виконайте сценарій, використовуючи його назву файлу:
    ./myscript.sh>

    Тут треба замінити myscrtipt.sh з назвою вашого сценарію.

    3) Напишіть сценарій оболонки, який друкує techcodeview.com на терміналі.

    Створіть назву сценарію `myscript.sh` (ми використовуємо ` оскільки ` редактор, ви можете вибрати будь-який редактор)

    vim myscript.sh>

    #!/bin/bash
    # Цей сценарій друкує techcodeview.com на терміналі
    луна techcodeview.com

    надруковане ім'я

    надруковане ім'я

    Ми робимо наш сценарій виконуваним за допомогою `chmod +x`, потім виконуємо за допомогою `./myscipt.sh` і отримуємо бажаний результат techcodeview.com.

    4) Поясніть призначення команди echo в сценаріях оболонки.

    The команда echo використовується для відображення тексту або змінних на терміналі. Він зазвичай використовується для друку повідомлень, значень змінних і генерування вихідних даних програми.

    434

    команда echo

    У цьому прикладі ми виконали `echo` на терміналі безпосередньо, оскільки він працює так само в сценарії оболонки.

    5) Як ви можете призначити значення змінній у сценарії оболонки?

    Змінним присвоюються значення за допомогою оператора присвоювання =.

    Наприклад:

    #!/bin/bash
    # Присвоєння значення змінній
    ім'я=Джаєш
    вік=21
    echo $name $age

    Пояснення:

    • Змінній name присвоєно значення Jayesh.
    • Змінній віку присвоєно значення 21.
    • echo використовується для друку, а `$name` `$age` використовується для виклику значення, що зберігається в змінних.

    435

    6) Напишіть сценарій оболонки, який приймає ім’я користувача як вхідні дані та вітає його.

    Створіть назву сценарію `example.sh`.

    #!/bin/bash
    # Запитайте в користувача ім'я
    echo Як тебе звуть?
    прочитати назву
    # Привітайте користувача
    echo Привіт, $name! Приємно познайомитись.

    Пояснення:

    • #!/bin/bash: це рядок shebang. Він повідомляє системі використовувати інтерпретатор Bash для виконання сценарію.
    • # Запитайте в користувача ім'я: це коментар. Він надає контекст про майбутній код. Коментарі ігноруються перекладачем.
    • echo Як вас звати?: Команда echo використовується для відображення тексту в подвійних лапках на терміналі.
    • read name: команда read очікує, поки користувач введе текст, і зберігає його в імені змінної.
    • echo Привіт, $name! Приємно познайомитися.: цей рядок використовує команду echo для друку вітального повідомлення, яке містить значення змінної name, яке було зібрано з введених користувачем даних.

    436

    7) Як додати коментарі до сценарію оболонки?

    Коментарі в сценаріях оболонки використовуються для надання пояснень або контексту до коду. Вони ігноруються перекладачем і призначені лише для людей, які читають сценарій. Ви можете додавати коментарі за допомогою символу #.

    #!/bin/bash
    # Це коментар, що пояснює мету сценарію
    відлуння gfg

    8) Створіть сценарій оболонки, який перевіряє, чи існує файл у поточному каталозі.

    Ось сценарій, який перевіряє, чи існує файл під назвою example.txt у поточному каталозі:

    #!/bin/bash
    file=example.txt
    # Перевірте, чи файл існує
    if [ -e $file ]; потім
    echo Файл існує: $file
    інше
    echo Файл не знайдено: $file
    бути

    Пояснення:

    1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
    2. file=example.txt: цей рядок визначає файл змінної та присвоює йому значення example.txt. Ви можете замінити це назвою файлу, який потрібно перевірити.
    3. if [ -e $file ]; then: Цей рядок починає оператор if. Умова [ -e $file ] перевіряє, чи існує файл, визначений значенням змінної file. Прапор -e використовується для перевірки існування файлу.
    4. echo Файл існує: $file: якщо умова вірна (тобто файл існує), цей рядок друкує повідомлення про те, що файл існує, разом із назвою файлу.
    5. else: якщо умова хибна (тобто файл не існує), сценарій виконує код у гілці else.
    6. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено, разом із назвою файлу.
    7. fi: цей рядок позначає кінець оператора if.
    Пошук файлу

    Пошук файлу

    9) Яка різниця між одинарними лапками (‘) і подвійними лапками () у сценаріях оболонки?

    Одинарні лапки (‘) і подвійні лапки () використовуються для включення рядків у сценарії оболонки, але вони мають різну поведінку:

    • Одинарні лапки: усе, що знаходиться в одинарних лапках, розглядається як літеральний рядок. Імена змінних і більшість спеціальних символів не розгортаються.
    • Подвійні лапки: змінні та певні спеціальні символи в подвійних лапках розгортаються. Вміст підлягає підстановці змінних і підстановці команд.

    #!/bin/bash

    abcd=Привіт
    echo ‘$abcd’ # Вихід: $abcd
    echo $abcd # Вихід: Привіт

    10) Як ви можете використовувати аргументи командного рядка в сценарії оболонки?

    Аргументи командного рядка це значення, які надаються сценарію під час його виконання. До них можна отримати доступ у сценарії за допомогою спеціальних змінних, таких як $1, $2 тощо, де $1 представляє перший аргумент, $2 представляє другий аргумент і так далі.

    Наприклад: Якщо ім'я нашого сценарію в `example.sh`

    #!/bin/bash

    echo Назва сценарію: $0
    echo Перший аргумент: $1
    echo Другий аргумент: $2

    Якщо ми запустимо сценарій із `.example.sh hello_1 hello_2`, він виведе:

    аргументи cli

    аргументи cli

    11) Як ви використовуєте цикл for для перебору списку значень?

    Створіть назву сценарію `example.sh`.

    #!/bin/bash

    фрукти=(яблуко банан вишня фінік)
    для фруктів у ${fruits[@]}; робити
    echo Поточний фрукт: $fruit
    зроблено

    Пояснення:

    Рядок `fruits=` створює масив під назвою fruits із чотирьох елементів: яблуко, банан, вишня та фінік.

    • для фруктів у ${fruits[@]}; do: Цей рядок починає цикл for. Ось що означає кожна частина:
    • for fruit: Це оголошує змінну циклу під назвою fruit. У кожній ітерації циклу fruit буде зберігати значення поточного елемента з масиву fruits.
    • ${fruits[@]}: це розширення масиву, яке бере всі елементи з масиву fruits. Синтаксис ${…} гарантує, що кожен елемент розглядається як окремий елемент.
    • do: це ключове слово позначає початок тіла циклу.
    • echo Поточний плод: $fruit: усередині циклу цей рядок використовує команду echo для відображення поточного значення змінної циклу fruit. Він друкує повідомлення на кшталт Current fruit: apple для кожного фрукта в масиві.
    • done: це ключове слово позначає кінець тіла циклу. Він повідомляє сценарію, що цикл завершено.
    для циклу

    для циклу

    12) Напишіть сценарій оболонки, який обчислює суму цілих чисел від 1 до N за допомогою циклу.

    Створіть назву сценарію `example.sh`.

    #!/bin/bash

    echo Введіть число (N):
    читати Н
    сума=0
    for (( i=1; i<=$N; i++ )); робити
    сума=$((сума + i))
    зроблено
    echo Сума цілих чисел від 1 до $N: $sum

    Пояснення:
    Сценарій починається з запиту на введення числа (N) за допомогою read. Це число визначить, скільки разів виконується цикл.

    1. Змінна sum ініціалізується рівним 0. Ця змінна відстежуватиме суму цілих чисел.
    2. Цикл for починається з for (( i=1; i<=$N; i++ )). Ця структура циклу використовується для повторення набору дій певну кількість разів, у цьому випадку від 1 до значення N.
    3. Усередині циклу відбуваються такі речі:
      • i=1 встановлює для змінної циклу i значення 1 на початку кожної ітерації.
      • Умова циклу i<=$N перевіряє, чи i все ще менше або дорівнює заданому числу N.
      • Якщо умова виконується, виконується тіло циклу.
      • sum=$((sum + i)) обчислює нове значення sum, додаючи до нього поточне значення i. Це додає цілі числа від 1 до поточного значення i.
    4. Після кожної ітерації i++ збільшує значення i на 1.
    5. Цикл продовжує працювати, доки умова i<=$N не стане помилковою (коли i стане більшим за N).
    6. Після завершення циклу сценарій відображає суму цілих чисел від 1 до введеного числа N.

    439

    13) Створіть сценарій, який шукатиме певне слово у файлі та підраховуватиме його випадки.

    Створіть назву сценарію `word_count.sh`

    #!/bin/bash

    echo Введіть слово для пошуку:
    читати target_word
    echo Введіть назву файлу:
    прочитати назву файлу
    count=$(grep -o -w $target_word $filename | wc -l)
    echo Слово «$target_word» з’являється $count разів у «$filename».

    Пояснення:

    • echo Введіть слово для пошуку:: Цей рядок відображає повідомлення з проханням до користувача ввести слово, яке він хоче знайти у файлі.
    • read target_word: цей рядок читає введені користувачем дані та зберігає їх у змінній під назвою target_word.
    • echo Введіть ім'я файлу:: Цей рядок відображає повідомлення з проханням до користувача ввести назву файлу, у якому він бажає виконати пошук.
    • read filename: Цей рядок читає введені користувачем дані та зберігає їх у змінній з назвою filename.
    • count=$(grep -o -w $target_word $filename | wc -l): цей рядок виконує основну роботу сценарію. Давайте розберемо це далі:
      • grep -o -w $target_word $filename: Ця частина команди шукає входження target_word у вказаному імені файлу. Параметри -o і -w гарантують, що враховуються лише цілі збіги слів.
      • |: Це канал, який приймає вихідні дані попередньої команди та надсилає їх як вхідні дані для наступної команди.
      • wc -l: ця частина команди використовує команду wc для підрахунку кількості рядків у вхідних даних. Параметр -l спеціально підраховує рядки.
      • Уся команда обчислює кількість входжень target_word у файлі та призначає цю кількість змінній coun

    441

    14) Поясніть різницю між стандартним виведенням (stdout) і стандартною помилкою (stderr).

    Основна відмінність між стандартним виведенням (stdout) і стандартною помилкою (stderr) полягає в наступному:

    • Стандартний вихід (stdout): Це стандартний вихідний потік, куди надходить звичайний вихід команди. Він відображається на терміналі за замовчуванням. Ви можете перенаправити його до файлу за допомогою>.
    • Стандартна помилка (stderr): Це вихідний потік для повідомлень про помилки та попереджень. Він також відображається на терміналі за замовчуванням. Ви можете перенаправити його у файл за допомогою 2>.

    15) Поясніть концепцію умовних операторів у сценаріях оболонки.

    Умовні оператори в сценаріях оболонки дозволяють нам приймати рішення та контролювати потік нашого сценарію на основі певних умов. Вони дозволяють нашому сценарію виконувати різні набори команд залежно від того, чи є конкретна умова істинною чи хибною. Основними умовними операторами в сценаріях оболонки є оператор if, оператор elif (необов’язковий) і оператор else (необов’язковий).

    Ось базова структура умовного оператора в сценаріях оболонки:

    якщо [умова]; потім
    # Команди для виконання, якщо умова виконується
    elif [інша_умова]; потім
    # Команди для виконання, якщо another_condition є істинним (необов’язково)
    інше
    # Команди для виконання, якщо жодна з умов не виконується (необов’язково)
    бути

    Пояснення:

    • [умова] = Команда, яка оцінює умову та повертає істинний (0) або хибний (ненульовий) статус виходу.
    • then = Це ключове слово, яке вказує, що наступні за ним команди будуть виконані, якщо умова оцінюється як істина.
    • elif = (скорочення від else if) Це розділ, який дозволяє нам вказати додаткові умови для перевірки.
    • else = це розділ, який містить команди, які будуть виконані, якщо жодна з умов не виконується.
    • fi = Це ключове слово, яке позначає кінець умовного блоку.

    16) Як ви читаєте рядки з файлу в сценарії оболонки?

    до читати рядки з файлу в сценарії оболонки, ми можемо використовувати різні методи, але один з поширених підходів полягає у використанні циклу while у поєднанні з командою read. Ось як ми можемо це зробити:

    #!/bin/bash
    file=/home/jayeshkumar/jayesh.txt
    # Перевірте, чи файл існує
    if [ -e $file ]; потім
    while IFS= читання рядка -r; робити
    echo Читання рядка: $line
    # Додайте тут свою логіку обробки
    виконано <$файл
    інше
    echo Файл не знайдено: $file
    бути

    Пояснення:

    1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
    2. file=/home/jayeshkumar/jayesh.txt: цей рядок визначає файл змінної та призначає повний шлях до файлу jayesh.txt у каталозі /home/jayeshkumar. Змініть цей шлях, щоб відповідати фактичному шляху до файлу, який ви хочете прочитати.
    3. if [ -e $file ]; then: Цей рядок починає оператор if. Він перевіряє, чи існує файл, визначений змінною $file. Прапор -e перевіряє наявність файлу.
    4. while IFS= читання рядка -r; do: цей рядок ініціює цикл while, який читає рядки з файлу.
      • IFS=: IFS (внутрішній роздільник полів) має порожнє значення, щоб зберегти пробіли на початку та в кінці.
      • read -r рядок: це зчитує поточний рядок із файлу та зберігає його у рядку змінної.
    5. echo Прочитаний рядок: $line: цей рядок друкує вміст рядка, який було прочитано з файлу. Змінна $line містить вміст поточного рядка.
    6. # Додайте свою логіку обробки тут: це коментар-заповнювач, де ви можете додати свою власну логіку для обробки кожного рядка. Наприклад, ви можете проаналізувати рядок, отримати інформацію або виконати певні дії на основі вмісту.
    7. done <$file: це позначає кінець циклу while. <$file перенаправляє вміст файлу, який буде прочитано циклом.
    8. else: якщо файл не існує (умова оператора if невірна), сценарій виконує код у гілці else.
    9. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено.
    10. fi: цей рядок позначає кінець оператора if.
    читання файлу

    читання файлу

    Тут ми використали ` pwd `, щоб отримати шлях до поточного каталогу.

    17) Напишіть функцію в сценарії оболонки, яка обчислює факториал заданого числа.

    Ось такий сценарійобчислити факторіалзаданого числа.

    #!/bin/bash
    # Визначте функцію для обчислення факторіалу
    calculate_factory() {
    num=$1
    факт=1
    for ((i=1; i<=num; i++)); робити
    факт=$((факт * i))
    зроблено
    луна $факт
    }
    # Запропонувати користувачеві ввести число
    echo Введіть число:
    читати input_num
    # Викличте функцію calculate_factorial із введеним числом
    factorial_result=$(calculate_factorial $input_num)
    # Відобразити факторний результат
    echo Факторіал $input_num: $factorial_result

    Пояснення:

    1. Сценарій починається з рядка shebang #!/bin/bash для визначення інтерпретатора.
    2. Calculate_factorial() визначається як функція. Він приймає один аргумент, num, який є числом, факторіал якого потрібно обчислити.
    3. Усередині функції факт ініціалізується рівним 1. Ця змінна зберігатиме факторний результат.
    4. Цикл for повторює від 1 до заданого числа (num). У кожній ітерації він множить поточне значення факту на індекс циклу i.
    5. Після завершення циклу змінна fact містить обчислений факториал.
    6. Сценарій пропонує користувачеві ввести число за допомогою read.
    7. Функція calculate_factorial викликається з числом, наданим користувачем, і результат зберігається в змінній factorial_result.
    8. Нарешті сценарій відображає обчислений факторний результат.
    Факторіал

    Факторіал

    18) Як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки?

    У сценарії оболонки ви можете обробляти такі сигнали, як Ctrl+C (також відомий як SIGINT), використовуючи команду trap. Ctrl+C генерує сигнал SIGINT, коли користувач натискає його, щоб перервати запущений сценарій або програму. Використовуючи команду trap, ви можете вказати дії, які мають бути виконані при отриманні певного сигналу. Ось як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки:

    #!/bin/bash
    прибирати() {
    echo Сценарій перервано. Виконання очищення…
    # Додайте тут свої дії з очищення
    вихід 1
    }
    # Налаштувати перехоплення для виклику функції очищення, коли отримано Ctrl+C (SIGINT).
    очищення пастки SIGINT
    # Решта вашого сценарію
    луна Бігає…
    спати 10
    echo Готово.

    Обробка сигналів важлива для того, щоб зробити сценарії надійними та забезпечити ефективну обробку несподіваних переривань. Ви можете налаштувати функцію очищення відповідно до ваших конкретних потреб, як-от закриття файлів, зупинка процесів або запис інформації перед виходом зі сценарію.

    Пояснення:

    1. #!/bin/bash: цей рядок shebang визначає інтерпретатор, який буде використовуватися для виконання сценарію.
    2. cleanup() { … }: це визначає функцію під назвою cleanup. У цю функцію можна включити будь-які дії, які потрібно виконати, коли сценарій переривається, наприклад закриття файлів, звільнення ресурсів або виконання інших завдань очищення.
    3. trap cleanup SIGINT: Команда trap використовується для налаштування обробника сигналів. У цьому випадку це вказує, що коли отримано сигнал SIGINT (Ctrl+C), слід виконати функцію очищення.
    4. echo Виконується…, sleep 10, echo Finished.: Це лише приклади команд для імітації виконання сценарію.

    446

    19) Створіть сценарій, який перевіряє та видаляє повторювані рядки в текстовому файлі.

    Ось наш сценарій Linux, у якому ми будемо видаляти повторювані рядки з текстового файлу.

    #!/bin/bash
    input_file=input.txt
    вихідний_файл=вихідний.txt
    сортувати $input_file | uniq> $output_file
    echo Повторювані рядки успішно видалено.

    Пояснення:

    1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
    2. Змінна input_file встановлюється на ім’я вхідного файлу, що містить повторювані рядки (змініть це на фактичне ім’я вхідного файлу).
    3. Змінна output_file встановлюється на назву вихідного файлу, з якого буде видалено дублікати (змініть це на бажане ім’я вихідного файлу).
    4. Сценарій використовує команду sort для сортування рядків у вхідному файлі. Сортування рядків гарантує, що повторювані рядки групуються разом.
    5. Потім відсортовані рядки передаються через команду uniq, яка видаляє послідовні повторювані рядки. Вихідні дані цього процесу перенаправляються у вихідний файл.
    6. Після видалення дублікатів сценарій друкує повідомлення про успіх.
    видалення повторюваних рядків

    видалення повторюваних рядків

    Тут ми використовуємо ` кішка `, щоб відобразити текст у текстовому файлі.

    20) Напишіть сценарій, який генерує безпечний випадковий пароль.

    Ось наш скрипт для створення безпечного випадкового пароля.

    #!/bin/bash
    # Функція генерації випадкового пароля
    generate_password() {
    tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
    }
    # Виклик функції та збереження згенерованого пароля
    пароль=$(згенерувати_пароль)
    echo Згенерований пароль: $password

    Примітка: користувач може відповідно змінити довжину пароля, замінивши число `12`.

    Пояснення:

    1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
    2. Функція generate_password призначена для створення випадкового пароля. Ось як це працює:
      • tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
      • fold -w 12 розбиває відфільтровані випадкові дані на рядки по 12 символів у кожному.
      • head -n 1 вибирає перший рядок, фактично надаючи нам випадкову послідовність символів довжиною 12.
    3. Змінній password присвоюється результат виклику функції generate_password.
    4. Нарешті, згенерований пароль відображається за допомогою луни.

    448

    21) Напишіть сценарій оболонки, який обчислює загальний розмір усіх файлів у каталозі.

    Ось сценарій оболонки для обчислення загального розміру всіх файлів у каталозі.

    #!/bin/bash
    каталог=/шлях/до/вашого/каталогу
    total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
    echo Загальний розмір файлів у $directory: $total_size

    Пояснення:

    1. Сценарій починається з #!/bin/bash shebang, що вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
    2. Змінна каталогу встановлюється на шлях до каталогу, для якого потрібно обчислити загальний розмір файлу. Замініть /path/to/your/directory справжнім шляхом.
    3. Команда du використовується для оцінки використання файлового простору. Використовуються такі варіанти:
      • -c: створити загальну суму.
      • -s: відображати лише загальний розмір зазначеного каталогу.
      • -h: друкувати розміри в зручному для читання форматі (наприклад, КБ, МБ, ГБ).
    4. Вихід du передається до grep total, щоб відфільтрувати рядок, який містить загальний розмір.
    5. awk ‘{print $1}’ використовується для виділення першого поля (загального розміру) з рядка.
    6. Розрахований загальний розмір зберігається в змінній total_size.
    7. Нарешті, сценарій відображає загальний розмір за допомогою echo.
    Загальний розмір файлів

    Загальний розмір файлів

    Тут ми використали ` pwd `, щоб побачити поточний шлях до каталогу.

    22) Поясніть різницю між операторами if і elif у сценаріях оболонки.

    Особливість `if`Staiftement Заява `elif`
    призначення Поясніть різницю між операторами if і elif у сценаріях оболонки. Надає альтернативні умови для перевірки, коли початкова умова if є хибною.
    використання Використовується для початкового стану. Використовується після початкової умови if для перевірки додаткових умов.
    кількість блоків Може мати лише один блок if. Може мати декілька блоків elif, але лише один блок else (необов’язково).
    виконання Виконує блок коду, пов’язаний із оператором if, якщо умова виконується. Якщо умова false, блок else (якщо присутній) виконується (необов’язково). Перевіряє кожну умову elif по порядку. Якщо одна з умов elif виконується, виконується відповідний блок коду, і сценарій завершує роботу з усього умовного блоку. Якщо жодна з умов elif не виконується, виконується блок else (якщо він присутній).
    Вкладені структури Може бути вкладено в інші блоки if, elif або else. Не можна вкладати в інший блок elif, але можна використовувати всередині блоку if або else.

    Розберемося в цьому на прикладі.

    #!/bin/bash
    число=5
    if [$number -gt 10]; потім
    echo $number більше 10
    інше
    echo $number не більше 10
    бути
    луна ——–
    if [$number -gt 10]; потім
    echo $number більше 10
    elif [$number -eq 10]; потім
    echo $number дорівнює 10
    інше
    echo $number менше 10
    бути

    Пояснення:

    У цьому прикладі перший блок if перевіряє, чи число більше 10. Якщо ні, він друкує повідомлення про те, що число не більше 10. Другий блок із операторами elif перевіряє кілька умов послідовно, доки одна з них не стане істинною. У цьому випадку, оскільки значення числа дорівнює 5, результатом буде:

    if_elif різниця

    if_elif різниця

    23) Як ви використовуєте цикл while для багаторазового виконання команд?

    Цикл while використовується в сценаріях оболонки для багаторазового виконання набору команд, доки виконується певна умова. Цикл продовжує виконувати команди, поки умова не стане помилковою.

    Ось основний синтаксис циклу while:

    while [умова]; робити
    # Команди для виконання
    зроблено

    Пояснення:

    1. Цикл `while` починається з ключового слова `while`, після якого йде умова, укладена в квадратні дужки `[ ]`.
    2. Тіло циклу, яке містить команди для виконання, укладено в ключові слова `do` і `done`.
    3. Цикл спочатку перевіряє умову. Якщо умова виконується, виконуються команди в тілі циклу. Після виконання тіла циклу умова перевіряється знову, і процес повторюється, доки умова не стане помилковою.

    приклад: Якщо ми хочемо надрукувати числа від 1 до 5

    #!/bin/bash
    лічильник=1
    while [$counter -le 5]; робити
    echo Номер: $лічильник
    лічильник=$((лічильник + 1))
    зроблено

    Пояснення:

    • Змінна лічильника має значення 1.
    • Цикл while перевіряє, чи значення лічильника менше або дорівнює 5. Поки ця умова виконується, цикл продовжує виконуватися.
    • Усередині циклу поточне значення лічильника друкується за допомогою echo.
    • Лічильник збільшується на 1 за допомогою виразу $((лічильник + 1)).
    цикл while

    цикл while

    24) Створіть сценарій оболонки, який знаходить і перераховує всі порожні файли в каталозі.

    Сценарій оболонки, який можна використовувати для пошуку та списку всіх порожніх файлів у каталозі за допомогою команд `find` і `stat`:

    #!/bin/bash
    каталог=$1″
    if [ -z $каталог ]; потім
    echo Використання: $0
    вихід 1
    бути

    якщо [! -d $каталог]; потім
    echo Помилка: «$directory» не є дійсним каталогом.
    вихід 1
    бути
    echo Порожні файли в $directory:
    find $directory -type f -empty

    Пояснення:

    1. ` #!/bin/bash `: Це називається shebang, і воно повідомляє операційній системі використовувати оболонку Bash для інтерпретації та виконання сценарію.
    2. ` каталог=$1″ `: цей рядок призначає перший аргумент командного рядка (позначений $1) змінній ` каталог `.
    3. ` if [ -z $каталог ]; потім `: цей рядок починає оператор if, який перевіряє, чи ` каталог ` змінна порожня (-z перевіряє порожній рядок).
    4. ` echo Використання: $0 `: якщо каталог порожній, цей рядок друкує повідомлення про використання, де ` $0 ` представляє назву сценарію.
    5. ` вихід 1 `: цей рядок завершує роботу сценарію з кодом виходу ` 1 `, що вказує на помилку.
    6. ` бути `: цей рядок позначає кінець ` якщо ` заява.
    7. ` якщо [! -d $каталог]; потім `: запускається інший оператор if, щоб перевірити, чи існує наданий каталог (` ` тести для каталогу).
    8. ` echo Помилка: «$directory» не є дійсним каталогом. `: якщо наданий каталог не існує, цей рядок друкує повідомлення про помилку.
    9. ` вихід 1 `: вихід зі сценарію з кодом виходу ` 1 `.
    10. ` бути `: позначає кінець другого ` якщо` заява.
    11. ` echo Порожні файли в $directory: `: якщо наразі все вірно, цей рядок друкує повідомлення про те, що сценарій перерахує порожні файли у вказаному каталозі.
    12. ` find $directory -type f -empty `: у цьому рядку використовується ` знайти ` команда пошуку порожніх файлів (` - порожній `) типу звичайних файлів (` - тип f `) у вказаному каталозі. Потім він перераховує ці порожні файли.
    Пошук порожніх файлів

    Пошук порожніх файлів

    Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях поточного каталогу home/jayeshkumar/

    25) Яка мета команди read у сценаріях оболонки?

    Команда read у сценаріях оболонки дозволяє сценарію запитувати у вас інформацію. Це як коли комп’ютер задає вам запитання й чекає на відповідь. Це корисно для сценаріїв, які вимагають, щоб ви щось ввели, або коли сценарію потрібно працювати з інформацією з файлів. Команда read допомагає сценарію зупинятися й чекати, що ви введете, а потім він може використовувати цю інформацію для виконання інших завдань у сценарії.

    Синтаксис команди read:

    read variable_name>

    приклад : якщо ми хочемо взяти ім’я як вхідні дані від користувача, щоб надрукувати його.

    #!/bin/bash
    echo Будь ласка, введіть своє ім'я:
    прочитати назву
    echo Привіт, $name!

    453

    прочитати ім

    Таким чином, команда read використовується для захоплення введених користувачем даних або даних із файлів у сценаріях оболонки, що робить сценарії більш інтерактивними та універсальними.

    26) Напишіть сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

    Ось сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

    #!/bin/bash
    каталог=$1″
    if [ -z $каталог ]; потім
    echo Використання: $0
    вихід 1
    бути

    якщо [! -d $каталог]; потім

    echo Помилка: «$directory» не є дійсним каталогом.
    вихід 1
    бути

    cd $каталог || вихід 1

    для файлу в *; робити
    if [ -f $file ]; потім
    newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
    [ $file != $newname ] && mv $file $newname
    бути
    зроблено

    Пояснення:

    1. #!/bin/bash : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. каталог=$1″ : цей рядок призначає перший аргумент командного рядка каталогу змінних.
    3. if [ -z $каталог ]; потім : цей рядок перевіряє, чи порожня змінна каталогу (під час виконання сценарію не надається аргумент).
    4. echo Використання: $0 : якщо каталог порожній, цей рядок друкує повідомлення про використання з назвою сценарію ($0).
    5. вихід 1 : цей рядок завершує роботу сценарію з кодом виходу 1, що вказує на помилку.
    6. f i: Це означає кінець першого оператора if.
    7. якщо [! -d $каталог]; потім : цей рядок перевіряє, чи не існує вказаного каталогу (-d перевіряє наявність каталогу).
    8. echo Помилка: «$directory» не є дійсним каталогом. : якщо вказаний каталог не існує, цей рядок друкує повідомлення про помилку.
    9. вихід 1 : вихід зі сценарію з кодом виходу 1.
    10. бути : Позначає кінець другого оператора if.
    11. cd $каталог || вихід 1 : змінює поточний робочий каталог на вказаний каталог. Якщо змінити каталог не вдалося (наприклад, каталог не існує), сценарій завершує роботу з кодом помилки.
    12. для файлу в *; зробити: я для файлу в *; зробити: ініціює цикл, який перебирає всі елементи в поточному каталозі (* відповідає всім назвам файлів).
    13. if [ -f $file ]; потім : перевіряє, чи поточний елемент ітерації циклу є звичайним файлом (-f перевіряє звичайний файл).
    14. newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : перетворює поточне ім’я файлу ($file) на нижній регістр за допомогою команди tr і зберігає результат у змінній newname.
    15. [ $file != $newname ] && mv $file $newname : Порівнює оригінальну назву файлу з новою назвою файлу, написаною в нижньому регістрі. Якщо вони різні, він перейменовує файл за допомогою команди mv.
    16. бути : Позначає кінець внутрішнього оператора if.
    17. зроблено : Позначає кінець циклу.

    454

    Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях до поточного каталогу home/jayeshkumar/test

    27) Як можна використовувати арифметичні операції в сценарії оболонки?

    Арифметичні операції можна виконувати в сценарії оболонки за допомогою різних вбудованих методів. Оболонка надає механізми для простих арифметичних обчислень за допомогою арифметичного розширення, наприклад:

    1. Арифметичне розширення ($((…)))
    2. Використання команди expr
    3. Використання команди let

    Ось наш сценарій Shell, що пояснює всі три методи арифметичних операцій.

    #!/bin/bash
    num1=10
    num2=5

    #Арифметичне розширення ($((…)))

    результат=$((num1 + num2))
    echo Сума: $результат

    #Використання команди expr

    сума=$(вираз $num1 + $num2)
    echo Сума: $сума

    #Використання команди let

    нехай сума = num1 + num2
    echo Сума: $сума

    Пояснення:

    1. `#!/bin/bash` : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. `num1=10` і ` num2=5` : ці рядки присвоюють значення 10 і 5 змінним ` num1 ` і ` num2 ` відповідно.
    3. `#Арифметичне розширення ($((…)))` : це коментар, що вказує на початок розділу, який демонструє арифметичне розширення.
    4. `результат=$((num1 + num2))` : цей рядок використовує арифметичне розширення для обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` результат ` змінна.
    5. `echo Sum: $result` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` результат ` змінна.
    6. `#Використання команди expr` : це коментар, що вказує на початок розділу, який демонструє використання ` вираз ` команда арифметичних операцій.
    7. `sum=$(expr $num1 + $num2)` : цей рядок використовує ` вираз ` команда обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` сума ` змінна. Зауважте, що ` вираз Команда ` вимагає пробілів навколо операторів.
    8. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
    9. `#Використання команди let` : це коментар, що вказує на початок розділу, який демонструє використання ` дозволяти ` команда арифметичних операцій.
    10. `нехай сума = num1 + num2″` : цей рядок використовує ` дозволяти ` команда обчислення суми ` num1 ` і ` num2 ` і призначає результат ` сума ` змінна. ` дозволяти Команда ` не вимагає пробілів навколо операторів.
    11. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
    арифметика

    арифметика

    28) Створіть сценарій, який перевіряє, чи доступний хост мережі.

    Ось простий сценарій оболонки, який використовує команду ping, щоб перевірити, чи доступний хост мережі:

    #!/bin/bash
    хост=$1″
    якщо [ -z $хост]; потім
    echo Використання: $0
    вихід 1
    бути
    ping -c 4 $хост

    якщо [ $? -екв 0]; потім
    echo $host доступний.
    інше
    echo $host недоступний.
    бути

    Пояснення:

    1. Він приймає ім’я хоста або IP-адресу як аргумент і перевіряє, чи надано аргумент.
    2. Якщо аргумент не вказано, відображається повідомлення про використання та завершується робота.
    3. Він використовує команду ping з опцією -c 4 для надсилання чотирьох ехо-запитів ICMP на вказаний хост.
    4. Після виконання команди ping перевіряється статус виходу ($?). Якщо статус виходу дорівнює 0, це означає, що хост доступний і сценарій друкує повідомлення про успіх. В іншому випадку він друкує повідомлення про помилку.

    456

    Примітка : нам потрібно надати ім’я хоста як аргумент під час виконання сценарію. Тут ми використали google.com

    29) Напишіть сценарій оболонки, щоб знайти найбільший елемент у масиві:

    Ось сценарій оболонки для пошуку найбільшого елемента в масиві.

    #!/bin/bash
    # Оголошення масиву
    масив=(3 56 24 89 67)

    # Ініціалізація змінної для збереження максимального значення, починаючи з першого елемента

    макс=${масив[0]}

    # Ітерація по масиву

    для числа в ${array[@]}; робити

    # Порівняти кожен елемент із поточним максимумом

    if ((num> max)); потім
    max=$num
    бути
    зроблено

    # Вивести максимальне значення

    echo Максимальний елемент у масиві: $max

    Пояснення:

    1. ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. ` масив=(3 56 24 89 67) `: масив оголошується та ініціалізується значеннями.
    3. ` макс=${масив[0]} `: `max` ініціалізується першим елементом масиву.
    4. ` для числа в ${array[@]}; робити `: цикл `for` використовується для перебору елементів масиву.
    5. ` if ((num> max)); потім `: Оператор `if` перевіряє, чи поточний елемент `num` більший за поточний максимальний `max`.
    6. ` max=$num`: Якщо`num ` більше ніж `max`, `max` оновлюється значенням num.
    7. ` зроблено `: цикл `for` закрито.
    8. ` echo Максимальний елемент у масиві: $max `: нарешті сценарій друкує максимальне значення, знайдене в масиві.
    461

    найбільше число

    30) Напишіть скрипт для обчислення суми елементів у масиві.

    #!/bin/bash

    # Оголошення масиву

    масив=(1 65 22 19 94)

    # Ініціалізація змінної для збереження суми

    сума=0

    # Перебираємо масив і додаємо кожен елемент до суми

    для числа в ${array[@]}; робити
    am=$((am + am))
    зроблено

    # Вивести суму

    echo Сума елементів у масиві: $sum

    Пояснення:

    ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.

    ` масив=(1 65 22 19 94) `: масив оголошується та ініціалізується значеннями.

    ` сума=0 `:` сума ` ініціалізується нулем, щоб зберегти суму елементів.

    ` для числа в ${array[@]}; робити `: A ` для Цикл ` використовується для перебору елементів масиву.

    ` am=$((am + am)) `: усередині циклу кожен елемент ` на одному ` додається до ` сума ` змінна.

    ` зроблено `: ` для ` цикл закрито.

    `echo Сума елементів у масиві: $sum`: Нарешті, скрипт друкує суму всіх елементів у масиві.

    462

    Сума елементів

    Дізнайтеся більше про сценарії оболонки

    Висновок

    Ми всі фанати знаємо, що сценарій оболонки дуже корисний для підвищення продуктивності роботи, а також економії часу. Отже, у цій статті ми розглянули 30 дуже корисних і найбільш шахрайських прикладів сценаріїв оболонки . Ми сподіваємося, що цей повний посібник із прикладів сценаріїв оболонки допоможе вам зрозуміти все про сценарії оболонки.



    ` представляє назву сценарію.
  5. ` вихід 1 `: цей рядок завершує роботу сценарію з кодом виходу ` 1 `, що вказує на помилку.
  6. ` бути `: цей рядок позначає кінець ` якщо ` заява.
  7. ` якщо [! -d $каталог]; потім `: запускається інший оператор if, щоб перевірити, чи існує наданий каталог (` ` тести для каталогу).
  8. ` echo Помилка: «$directory» не є дійсним каталогом. `: якщо наданий каталог не існує, цей рядок друкує повідомлення про помилку.
  9. ` вихід 1 `: вихід зі сценарію з кодом виходу ` 1 `.
  10. ` бути `: позначає кінець другого ` якщо` заява.
  11. ` echo Порожні файли в $directory: `: якщо наразі все вірно, цей рядок друкує повідомлення про те, що сценарій перерахує порожні файли у вказаному каталозі.
  12. ` find $directory -type f -empty `: у цьому рядку використовується ` знайти ` команда пошуку порожніх файлів (` - порожній `) типу звичайних файлів (` - тип f `) у вказаному каталозі. Потім він перераховує ці порожні файли.
Пошук порожніх файлів

Пошук порожніх файлів

як отримати яблучні емодзі на андроїд

Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях поточного каталогу home/jayeshkumar/

25) Яка мета команди read у сценаріях оболонки?

Команда read у сценаріях оболонки дозволяє сценарію запитувати у вас інформацію. Це як коли комп’ютер задає вам запитання й чекає на відповідь. Це корисно для сценаріїв, які вимагають, щоб ви щось ввели, або коли сценарію потрібно працювати з інформацією з файлів. Команда read допомагає сценарію зупинятися й чекати, що ви введете, а потім він може використовувати цю інформацію для виконання інших завдань у сценарії.

Синтаксис команди read:

read variable_name>

приклад : якщо ми хочемо взяти ім’я як вхідні дані від користувача, щоб надрукувати його.

#!/bin/bash
echo Будь ласка, введіть своє ім'я:
прочитати назву
echo Привіт, $name!

453

прочитати ім

Таким чином, команда read використовується для захоплення введених користувачем даних або даних із файлів у сценаріях оболонки, що робить сценарії більш інтерактивними та універсальними.

26) Напишіть сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

Ось сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

#!/bin/bash
каталог=″
if [ -z $каталог ]; потім
echo Використання:

Для всіх дистрибутивів Linux сценарій оболонки — це як чарівна паличка, яка автоматизує процес, економить час користувачів і підвищує продуктивність. У цьому навчальному посібнику зі створення сценаріїв ви познайомитеся з 25 плюс прикладами сценаріїв.

Але перш ніж ми перейдемо до теми сценарій оболонки приклади, давайте розберемося зі сценарієм оболонки та реальними випадками використання сценаріїв оболонки.

Що таке Shell Script?

Ну, оболонка - це a CLI ( інтерпретатор командного рядка ), який запускається в текстовому вікні, де користувачі можуть керувати та виконувати команди оболонки. З іншого боку, процес написання набору команд для виконання в системі Linux. Файл, який містить такі інструкції, називається сценарієм bash.

Використання сценаріїв оболонки

Нижче наведено деякі поширені способи використання сценарію оболонки:

  • Автоматизація завдань – Його можна використовувати для автоматизації повторюваних завдань, таких як звичайне резервне копіювання та завдання встановлення програмного забезпечення.
  • Налаштування – Можна використовувати сценарії оболонки, щоб створити середовище командного рядка та легко виконувати завдання відповідно до потреб.
  • Керування файлами – Сценарії оболонки також можна використовувати для керування та маніпулювання файлами та каталогами, наприклад для переміщення, копіювання, перейменування або видалення файлів.

Приклади сценаріїв оболонки в Linux

1) Що означає символ (#!) на початку сценарію оболонки?

The шибання (#!) на початку сценарію вказує інтерпретатор, який слід використовувати для виконання сценарію. Він повідомляє системі, яка оболонка чи інтерпретатор має інтерпретувати команди сценарію.

Наприклад: Припустимо, у нас є сценарій з назвою myscript.sh написаний в оболонці Bash:

shebang

shebang

У цьому прикладі:

  • #!/bin/bash на початку сценарію вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
  • Команди echo використовуються для друку повідомлень на термінал.

2) Як запустити сценарій оболонки з командного рядка?

Щоб запустити сценарій оболонки з командного рядка, нам потрібно виконати такі дії:

  • Переконайтеся, що файл сценарію має дозволи на виконання за допомогою команда chmod :
chmod +x myscript.sh>
  • Виконайте сценарій, використовуючи його назву файлу:
./myscript.sh>

Тут треба замінити myscrtipt.sh з назвою вашого сценарію.

3) Напишіть сценарій оболонки, який друкує techcodeview.com на терміналі.

Створіть назву сценарію `myscript.sh` (ми використовуємо ` оскільки ` редактор, ви можете вибрати будь-який редактор)

vim myscript.sh>

#!/bin/bash
# Цей сценарій друкує techcodeview.com на терміналі
луна techcodeview.com

надруковане ім'я

надруковане ім'я

Ми робимо наш сценарій виконуваним за допомогою `chmod +x`, потім виконуємо за допомогою `./myscipt.sh` і отримуємо бажаний результат techcodeview.com.

4) Поясніть призначення команди echo в сценаріях оболонки.

The команда echo використовується для відображення тексту або змінних на терміналі. Він зазвичай використовується для друку повідомлень, значень змінних і генерування вихідних даних програми.

434

команда echo

У цьому прикладі ми виконали `echo` на терміналі безпосередньо, оскільки він працює так само в сценарії оболонки.

5) Як ви можете призначити значення змінній у сценарії оболонки?

Змінним присвоюються значення за допомогою оператора присвоювання =.

Наприклад:

#!/bin/bash
# Присвоєння значення змінній
ім'я=Джаєш
вік=21
echo $name $age

Пояснення:

  • Змінній name присвоєно значення Jayesh.
  • Змінній віку присвоєно значення 21.
  • echo використовується для друку, а `$name` `$age` використовується для виклику значення, що зберігається в змінних.

435

6) Напишіть сценарій оболонки, який приймає ім’я користувача як вхідні дані та вітає його.

Створіть назву сценарію `example.sh`.

#!/bin/bash
# Запитайте в користувача ім'я
echo Як тебе звуть?
прочитати назву
# Привітайте користувача
echo Привіт, $name! Приємно познайомитись.

Пояснення:

  • #!/bin/bash: це рядок shebang. Він повідомляє системі використовувати інтерпретатор Bash для виконання сценарію.
  • # Запитайте в користувача ім'я: це коментар. Він надає контекст про майбутній код. Коментарі ігноруються перекладачем.
  • echo Як вас звати?: Команда echo використовується для відображення тексту в подвійних лапках на терміналі.
  • read name: команда read очікує, поки користувач введе текст, і зберігає його в імені змінної.
  • echo Привіт, $name! Приємно познайомитися.: цей рядок використовує команду echo для друку вітального повідомлення, яке містить значення змінної name, яке було зібрано з введених користувачем даних.

436

7) Як додати коментарі до сценарію оболонки?

Коментарі в сценаріях оболонки використовуються для надання пояснень або контексту до коду. Вони ігноруються перекладачем і призначені лише для людей, які читають сценарій. Ви можете додавати коментарі за допомогою символу #.

#!/bin/bash
# Це коментар, що пояснює мету сценарію
відлуння gfg

8) Створіть сценарій оболонки, який перевіряє, чи існує файл у поточному каталозі.

Ось сценарій, який перевіряє, чи існує файл під назвою example.txt у поточному каталозі:

#!/bin/bash
file=example.txt
# Перевірте, чи файл існує
if [ -e $file ]; потім
echo Файл існує: $file
інше
echo Файл не знайдено: $file
бути

Пояснення:

  1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
  2. file=example.txt: цей рядок визначає файл змінної та присвоює йому значення example.txt. Ви можете замінити це назвою файлу, який потрібно перевірити.
  3. if [ -e $file ]; then: Цей рядок починає оператор if. Умова [ -e $file ] перевіряє, чи існує файл, визначений значенням змінної file. Прапор -e використовується для перевірки існування файлу.
  4. echo Файл існує: $file: якщо умова вірна (тобто файл існує), цей рядок друкує повідомлення про те, що файл існує, разом із назвою файлу.
  5. else: якщо умова хибна (тобто файл не існує), сценарій виконує код у гілці else.
  6. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено, разом із назвою файлу.
  7. fi: цей рядок позначає кінець оператора if.
Пошук файлу

Пошук файлу

9) Яка різниця між одинарними лапками (‘) і подвійними лапками () у сценаріях оболонки?

Одинарні лапки (‘) і подвійні лапки () використовуються для включення рядків у сценарії оболонки, але вони мають різну поведінку:

  • Одинарні лапки: усе, що знаходиться в одинарних лапках, розглядається як літеральний рядок. Імена змінних і більшість спеціальних символів не розгортаються.
  • Подвійні лапки: змінні та певні спеціальні символи в подвійних лапках розгортаються. Вміст підлягає підстановці змінних і підстановці команд.

#!/bin/bash

abcd=Привіт
echo ‘$abcd’ # Вихід: $abcd
echo $abcd # Вихід: Привіт

10) Як ви можете використовувати аргументи командного рядка в сценарії оболонки?

Аргументи командного рядка це значення, які надаються сценарію під час його виконання. До них можна отримати доступ у сценарії за допомогою спеціальних змінних, таких як $1, $2 тощо, де $1 представляє перший аргумент, $2 представляє другий аргумент і так далі.

Наприклад: Якщо ім'я нашого сценарію в `example.sh`

#!/bin/bash

echo Назва сценарію: $0
echo Перший аргумент: $1
echo Другий аргумент: $2

Якщо ми запустимо сценарій із `.example.sh hello_1 hello_2`, він виведе:

аргументи cli

аргументи cli

11) Як ви використовуєте цикл for для перебору списку значень?

Створіть назву сценарію `example.sh`.

#!/bin/bash

фрукти=(яблуко банан вишня фінік)
для фруктів у ${fruits[@]}; робити
echo Поточний фрукт: $fruit
зроблено

Пояснення:

Рядок `fruits=` створює масив під назвою fruits із чотирьох елементів: яблуко, банан, вишня та фінік.

  • для фруктів у ${fruits[@]}; do: Цей рядок починає цикл for. Ось що означає кожна частина:
  • for fruit: Це оголошує змінну циклу під назвою fruit. У кожній ітерації циклу fruit буде зберігати значення поточного елемента з масиву fruits.
  • ${fruits[@]}: це розширення масиву, яке бере всі елементи з масиву fruits. Синтаксис ${…} гарантує, що кожен елемент розглядається як окремий елемент.
  • do: це ключове слово позначає початок тіла циклу.
  • echo Поточний плод: $fruit: усередині циклу цей рядок використовує команду echo для відображення поточного значення змінної циклу fruit. Він друкує повідомлення на кшталт Current fruit: apple для кожного фрукта в масиві.
  • done: це ключове слово позначає кінець тіла циклу. Він повідомляє сценарію, що цикл завершено.
для циклу

для циклу

12) Напишіть сценарій оболонки, який обчислює суму цілих чисел від 1 до N за допомогою циклу.

Створіть назву сценарію `example.sh`.

#!/bin/bash

echo Введіть число (N):
читати Н
сума=0
for (( i=1; i<=$N; i++ )); робити
сума=$((сума + i))
зроблено
echo Сума цілих чисел від 1 до $N: $sum

Пояснення:
Сценарій починається з запиту на введення числа (N) за допомогою read. Це число визначить, скільки разів виконується цикл.

  1. Змінна sum ініціалізується рівним 0. Ця змінна відстежуватиме суму цілих чисел.
  2. Цикл for починається з for (( i=1; i<=$N; i++ )). Ця структура циклу використовується для повторення набору дій певну кількість разів, у цьому випадку від 1 до значення N.
  3. Усередині циклу відбуваються такі речі:
    • i=1 встановлює для змінної циклу i значення 1 на початку кожної ітерації.
    • Умова циклу i<=$N перевіряє, чи i все ще менше або дорівнює заданому числу N.
    • Якщо умова виконується, виконується тіло циклу.
    • sum=$((sum + i)) обчислює нове значення sum, додаючи до нього поточне значення i. Це додає цілі числа від 1 до поточного значення i.
  4. Після кожної ітерації i++ збільшує значення i на 1.
  5. Цикл продовжує працювати, доки умова i<=$N не стане помилковою (коли i стане більшим за N).
  6. Після завершення циклу сценарій відображає суму цілих чисел від 1 до введеного числа N.

439

13) Створіть сценарій, який шукатиме певне слово у файлі та підраховуватиме його випадки.

Створіть назву сценарію `word_count.sh`

#!/bin/bash

echo Введіть слово для пошуку:
читати target_word
echo Введіть назву файлу:
прочитати назву файлу
count=$(grep -o -w $target_word $filename | wc -l)
echo Слово «$target_word» з’являється $count разів у «$filename».

Пояснення:

  • echo Введіть слово для пошуку:: Цей рядок відображає повідомлення з проханням до користувача ввести слово, яке він хоче знайти у файлі.
  • read target_word: цей рядок читає введені користувачем дані та зберігає їх у змінній під назвою target_word.
  • echo Введіть ім'я файлу:: Цей рядок відображає повідомлення з проханням до користувача ввести назву файлу, у якому він бажає виконати пошук.
  • read filename: Цей рядок читає введені користувачем дані та зберігає їх у змінній з назвою filename.
  • count=$(grep -o -w $target_word $filename | wc -l): цей рядок виконує основну роботу сценарію. Давайте розберемо це далі:
    • grep -o -w $target_word $filename: Ця частина команди шукає входження target_word у вказаному імені файлу. Параметри -o і -w гарантують, що враховуються лише цілі збіги слів.
    • |: Це канал, який приймає вихідні дані попередньої команди та надсилає їх як вхідні дані для наступної команди.
    • wc -l: ця частина команди використовує команду wc для підрахунку кількості рядків у вхідних даних. Параметр -l спеціально підраховує рядки.
    • Уся команда обчислює кількість входжень target_word у файлі та призначає цю кількість змінній coun

441

14) Поясніть різницю між стандартним виведенням (stdout) і стандартною помилкою (stderr).

Основна відмінність між стандартним виведенням (stdout) і стандартною помилкою (stderr) полягає в наступному:

  • Стандартний вихід (stdout): Це стандартний вихідний потік, куди надходить звичайний вихід команди. Він відображається на терміналі за замовчуванням. Ви можете перенаправити його до файлу за допомогою>.
  • Стандартна помилка (stderr): Це вихідний потік для повідомлень про помилки та попереджень. Він також відображається на терміналі за замовчуванням. Ви можете перенаправити його у файл за допомогою 2>.

15) Поясніть концепцію умовних операторів у сценаріях оболонки.

Умовні оператори в сценаріях оболонки дозволяють нам приймати рішення та контролювати потік нашого сценарію на основі певних умов. Вони дозволяють нашому сценарію виконувати різні набори команд залежно від того, чи є конкретна умова істинною чи хибною. Основними умовними операторами в сценаріях оболонки є оператор if, оператор elif (необов’язковий) і оператор else (необов’язковий).

Ось базова структура умовного оператора в сценаріях оболонки:

якщо [умова]; потім
# Команди для виконання, якщо умова виконується
elif [інша_умова]; потім
# Команди для виконання, якщо another_condition є істинним (необов’язково)
інше
# Команди для виконання, якщо жодна з умов не виконується (необов’язково)
бути

Пояснення:

  • [умова] = Команда, яка оцінює умову та повертає істинний (0) або хибний (ненульовий) статус виходу.
  • then = Це ключове слово, яке вказує, що наступні за ним команди будуть виконані, якщо умова оцінюється як істина.
  • elif = (скорочення від else if) Це розділ, який дозволяє нам вказати додаткові умови для перевірки.
  • else = це розділ, який містить команди, які будуть виконані, якщо жодна з умов не виконується.
  • fi = Це ключове слово, яке позначає кінець умовного блоку.

16) Як ви читаєте рядки з файлу в сценарії оболонки?

до читати рядки з файлу в сценарії оболонки, ми можемо використовувати різні методи, але один з поширених підходів полягає у використанні циклу while у поєднанні з командою read. Ось як ми можемо це зробити:

#!/bin/bash
file=/home/jayeshkumar/jayesh.txt
# Перевірте, чи файл існує
if [ -e $file ]; потім
while IFS= читання рядка -r; робити
echo Читання рядка: $line
# Додайте тут свою логіку обробки
виконано <$файл
інше
echo Файл не знайдено: $file
бути

Пояснення:

  1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
  2. file=/home/jayeshkumar/jayesh.txt: цей рядок визначає файл змінної та призначає повний шлях до файлу jayesh.txt у каталозі /home/jayeshkumar. Змініть цей шлях, щоб відповідати фактичному шляху до файлу, який ви хочете прочитати.
  3. if [ -e $file ]; then: Цей рядок починає оператор if. Він перевіряє, чи існує файл, визначений змінною $file. Прапор -e перевіряє наявність файлу.
  4. while IFS= читання рядка -r; do: цей рядок ініціює цикл while, який читає рядки з файлу.
    • IFS=: IFS (внутрішній роздільник полів) має порожнє значення, щоб зберегти пробіли на початку та в кінці.
    • read -r рядок: це зчитує поточний рядок із файлу та зберігає його у рядку змінної.
  5. echo Прочитаний рядок: $line: цей рядок друкує вміст рядка, який було прочитано з файлу. Змінна $line містить вміст поточного рядка.
  6. # Додайте свою логіку обробки тут: це коментар-заповнювач, де ви можете додати свою власну логіку для обробки кожного рядка. Наприклад, ви можете проаналізувати рядок, отримати інформацію або виконати певні дії на основі вмісту.
  7. done <$file: це позначає кінець циклу while. <$file перенаправляє вміст файлу, який буде прочитано циклом.
  8. else: якщо файл не існує (умова оператора if невірна), сценарій виконує код у гілці else.
  9. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено.
  10. fi: цей рядок позначає кінець оператора if.
читання файлу

читання файлу

Тут ми використали ` pwd `, щоб отримати шлях до поточного каталогу.

17) Напишіть функцію в сценарії оболонки, яка обчислює факториал заданого числа.

Ось такий сценарійобчислити факторіалзаданого числа.

#!/bin/bash
# Визначте функцію для обчислення факторіалу
calculate_factory() {
num=$1
факт=1
for ((i=1; i<=num; i++)); робити
факт=$((факт * i))
зроблено
луна $факт
}
# Запропонувати користувачеві ввести число
echo Введіть число:
читати input_num
# Викличте функцію calculate_factorial із введеним числом
factorial_result=$(calculate_factorial $input_num)
# Відобразити факторний результат
echo Факторіал $input_num: $factorial_result

Пояснення:

  1. Сценарій починається з рядка shebang #!/bin/bash для визначення інтерпретатора.
  2. Calculate_factorial() визначається як функція. Він приймає один аргумент, num, який є числом, факторіал якого потрібно обчислити.
  3. Усередині функції факт ініціалізується рівним 1. Ця змінна зберігатиме факторний результат.
  4. Цикл for повторює від 1 до заданого числа (num). У кожній ітерації він множить поточне значення факту на індекс циклу i.
  5. Після завершення циклу змінна fact містить обчислений факториал.
  6. Сценарій пропонує користувачеві ввести число за допомогою read.
  7. Функція calculate_factorial викликається з числом, наданим користувачем, і результат зберігається в змінній factorial_result.
  8. Нарешті сценарій відображає обчислений факторний результат.
Факторіал

Факторіал

18) Як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки?

У сценарії оболонки ви можете обробляти такі сигнали, як Ctrl+C (також відомий як SIGINT), використовуючи команду trap. Ctrl+C генерує сигнал SIGINT, коли користувач натискає його, щоб перервати запущений сценарій або програму. Використовуючи команду trap, ви можете вказати дії, які мають бути виконані при отриманні певного сигналу. Ось як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки:

#!/bin/bash
прибирати() {
echo Сценарій перервано. Виконання очищення…
# Додайте тут свої дії з очищення
вихід 1
}
# Налаштувати перехоплення для виклику функції очищення, коли отримано Ctrl+C (SIGINT).
очищення пастки SIGINT
# Решта вашого сценарію
луна Бігає…
спати 10
echo Готово.

Обробка сигналів важлива для того, щоб зробити сценарії надійними та забезпечити ефективну обробку несподіваних переривань. Ви можете налаштувати функцію очищення відповідно до ваших конкретних потреб, як-от закриття файлів, зупинка процесів або запис інформації перед виходом зі сценарію.

Пояснення:

  1. #!/bin/bash: цей рядок shebang визначає інтерпретатор, який буде використовуватися для виконання сценарію.
  2. cleanup() { … }: це визначає функцію під назвою cleanup. У цю функцію можна включити будь-які дії, які потрібно виконати, коли сценарій переривається, наприклад закриття файлів, звільнення ресурсів або виконання інших завдань очищення.
  3. trap cleanup SIGINT: Команда trap використовується для налаштування обробника сигналів. У цьому випадку це вказує, що коли отримано сигнал SIGINT (Ctrl+C), слід виконати функцію очищення.
  4. echo Виконується…, sleep 10, echo Finished.: Це лише приклади команд для імітації виконання сценарію.

446

19) Створіть сценарій, який перевіряє та видаляє повторювані рядки в текстовому файлі.

Ось наш сценарій Linux, у якому ми будемо видаляти повторювані рядки з текстового файлу.

#!/bin/bash
input_file=input.txt
вихідний_файл=вихідний.txt
сортувати $input_file | uniq> $output_file
echo Повторювані рядки успішно видалено.

Пояснення:

  1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
  2. Змінна input_file встановлюється на ім’я вхідного файлу, що містить повторювані рядки (змініть це на фактичне ім’я вхідного файлу).
  3. Змінна output_file встановлюється на назву вихідного файлу, з якого буде видалено дублікати (змініть це на бажане ім’я вихідного файлу).
  4. Сценарій використовує команду sort для сортування рядків у вхідному файлі. Сортування рядків гарантує, що повторювані рядки групуються разом.
  5. Потім відсортовані рядки передаються через команду uniq, яка видаляє послідовні повторювані рядки. Вихідні дані цього процесу перенаправляються у вихідний файл.
  6. Після видалення дублікатів сценарій друкує повідомлення про успіх.
видалення повторюваних рядків

видалення повторюваних рядків

Тут ми використовуємо ` кішка `, щоб відобразити текст у текстовому файлі.

20) Напишіть сценарій, який генерує безпечний випадковий пароль.

Ось наш скрипт для створення безпечного випадкового пароля.

#!/bin/bash
# Функція генерації випадкового пароля
generate_password() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# Виклик функції та збереження згенерованого пароля
пароль=$(згенерувати_пароль)
echo Згенерований пароль: $password

Примітка: користувач може відповідно змінити довжину пароля, замінивши число `12`.

Пояснення:

  1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
  2. Функція generate_password призначена для створення випадкового пароля. Ось як це працює:
    • tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
    • fold -w 12 розбиває відфільтровані випадкові дані на рядки по 12 символів у кожному.
    • head -n 1 вибирає перший рядок, фактично надаючи нам випадкову послідовність символів довжиною 12.
  3. Змінній password присвоюється результат виклику функції generate_password.
  4. Нарешті, згенерований пароль відображається за допомогою луни.

448

21) Напишіть сценарій оболонки, який обчислює загальний розмір усіх файлів у каталозі.

Ось сценарій оболонки для обчислення загального розміру всіх файлів у каталозі.

#!/bin/bash
каталог=/шлях/до/вашого/каталогу
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo Загальний розмір файлів у $directory: $total_size

Пояснення:

  1. Сценарій починається з #!/bin/bash shebang, що вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
  2. Змінна каталогу встановлюється на шлях до каталогу, для якого потрібно обчислити загальний розмір файлу. Замініть /path/to/your/directory справжнім шляхом.
  3. Команда du використовується для оцінки використання файлового простору. Використовуються такі варіанти:
    • -c: створити загальну суму.
    • -s: відображати лише загальний розмір зазначеного каталогу.
    • -h: друкувати розміри в зручному для читання форматі (наприклад, КБ, МБ, ГБ).
  4. Вихід du передається до grep total, щоб відфільтрувати рядок, який містить загальний розмір.
  5. awk ‘{print $1}’ використовується для виділення першого поля (загального розміру) з рядка.
  6. Розрахований загальний розмір зберігається в змінній total_size.
  7. Нарешті, сценарій відображає загальний розмір за допомогою echo.
Загальний розмір файлів

Загальний розмір файлів

Тут ми використали ` pwd `, щоб побачити поточний шлях до каталогу.

22) Поясніть різницю між операторами if і elif у сценаріях оболонки.

Особливість `if`Staiftement Заява `elif`
призначення Поясніть різницю між операторами if і elif у сценаріях оболонки. Надає альтернативні умови для перевірки, коли початкова умова if є хибною.
використання Використовується для початкового стану. Використовується після початкової умови if для перевірки додаткових умов.
кількість блоків Може мати лише один блок if. Може мати декілька блоків elif, але лише один блок else (необов’язково).
виконання Виконує блок коду, пов’язаний із оператором if, якщо умова виконується. Якщо умова false, блок else (якщо присутній) виконується (необов’язково). Перевіряє кожну умову elif по порядку. Якщо одна з умов elif виконується, виконується відповідний блок коду, і сценарій завершує роботу з усього умовного блоку. Якщо жодна з умов elif не виконується, виконується блок else (якщо він присутній).
Вкладені структури Може бути вкладено в інші блоки if, elif або else. Не можна вкладати в інший блок elif, але можна використовувати всередині блоку if або else.

Розберемося в цьому на прикладі.

#!/bin/bash
число=5
if [$number -gt 10]; потім
echo $number більше 10
інше
echo $number не більше 10
бути
луна ——–
if [$number -gt 10]; потім
echo $number більше 10
elif [$number -eq 10]; потім
echo $number дорівнює 10
інше
echo $number менше 10
бути

Пояснення:

У цьому прикладі перший блок if перевіряє, чи число більше 10. Якщо ні, він друкує повідомлення про те, що число не більше 10. Другий блок із операторами elif перевіряє кілька умов послідовно, доки одна з них не стане істинною. У цьому випадку, оскільки значення числа дорівнює 5, результатом буде:

if_elif різниця

if_elif різниця

23) Як ви використовуєте цикл while для багаторазового виконання команд?

Цикл while використовується в сценаріях оболонки для багаторазового виконання набору команд, доки виконується певна умова. Цикл продовжує виконувати команди, поки умова не стане помилковою.

Ось основний синтаксис циклу while:

while [умова]; робити
# Команди для виконання
зроблено

Пояснення:

  1. Цикл `while` починається з ключового слова `while`, після якого йде умова, укладена в квадратні дужки `[ ]`.
  2. Тіло циклу, яке містить команди для виконання, укладено в ключові слова `do` і `done`.
  3. Цикл спочатку перевіряє умову. Якщо умова виконується, виконуються команди в тілі циклу. Після виконання тіла циклу умова перевіряється знову, і процес повторюється, доки умова не стане помилковою.

приклад: Якщо ми хочемо надрукувати числа від 1 до 5

#!/bin/bash
лічильник=1
while [$counter -le 5]; робити
echo Номер: $лічильник
лічильник=$((лічильник + 1))
зроблено

Пояснення:

  • Змінна лічильника має значення 1.
  • Цикл while перевіряє, чи значення лічильника менше або дорівнює 5. Поки ця умова виконується, цикл продовжує виконуватися.
  • Усередині циклу поточне значення лічильника друкується за допомогою echo.
  • Лічильник збільшується на 1 за допомогою виразу $((лічильник + 1)).
цикл while

цикл while

24) Створіть сценарій оболонки, який знаходить і перераховує всі порожні файли в каталозі.

Сценарій оболонки, який можна використовувати для пошуку та списку всіх порожніх файлів у каталозі за допомогою команд `find` і `stat`:

#!/bin/bash
каталог=$1″
if [ -z $каталог ]; потім
echo Використання: $0
вихід 1
бути

якщо [! -d $каталог]; потім
echo Помилка: «$directory» не є дійсним каталогом.
вихід 1
бути
echo Порожні файли в $directory:
find $directory -type f -empty

Пояснення:

  1. ` #!/bin/bash `: Це називається shebang, і воно повідомляє операційній системі використовувати оболонку Bash для інтерпретації та виконання сценарію.
  2. ` каталог=$1″ `: цей рядок призначає перший аргумент командного рядка (позначений $1) змінній ` каталог `.
  3. ` if [ -z $каталог ]; потім `: цей рядок починає оператор if, який перевіряє, чи ` каталог ` змінна порожня (-z перевіряє порожній рядок).
  4. ` echo Використання: $0 `: якщо каталог порожній, цей рядок друкує повідомлення про використання, де ` $0 ` представляє назву сценарію.
  5. ` вихід 1 `: цей рядок завершує роботу сценарію з кодом виходу ` 1 `, що вказує на помилку.
  6. ` бути `: цей рядок позначає кінець ` якщо ` заява.
  7. ` якщо [! -d $каталог]; потім `: запускається інший оператор if, щоб перевірити, чи існує наданий каталог (` ` тести для каталогу).
  8. ` echo Помилка: «$directory» не є дійсним каталогом. `: якщо наданий каталог не існує, цей рядок друкує повідомлення про помилку.
  9. ` вихід 1 `: вихід зі сценарію з кодом виходу ` 1 `.
  10. ` бути `: позначає кінець другого ` якщо` заява.
  11. ` echo Порожні файли в $directory: `: якщо наразі все вірно, цей рядок друкує повідомлення про те, що сценарій перерахує порожні файли у вказаному каталозі.
  12. ` find $directory -type f -empty `: у цьому рядку використовується ` знайти ` команда пошуку порожніх файлів (` - порожній `) типу звичайних файлів (` - тип f `) у вказаному каталозі. Потім він перераховує ці порожні файли.
Пошук порожніх файлів

Пошук порожніх файлів

Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях поточного каталогу home/jayeshkumar/

25) Яка мета команди read у сценаріях оболонки?

Команда read у сценаріях оболонки дозволяє сценарію запитувати у вас інформацію. Це як коли комп’ютер задає вам запитання й чекає на відповідь. Це корисно для сценаріїв, які вимагають, щоб ви щось ввели, або коли сценарію потрібно працювати з інформацією з файлів. Команда read допомагає сценарію зупинятися й чекати, що ви введете, а потім він може використовувати цю інформацію для виконання інших завдань у сценарії.

Синтаксис команди read:

read variable_name>

приклад : якщо ми хочемо взяти ім’я як вхідні дані від користувача, щоб надрукувати його.

#!/bin/bash
echo Будь ласка, введіть своє ім'я:
прочитати назву
echo Привіт, $name!

453

прочитати ім

Таким чином, команда read використовується для захоплення введених користувачем даних або даних із файлів у сценаріях оболонки, що робить сценарії більш інтерактивними та універсальними.

26) Напишіть сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

Ось сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

#!/bin/bash
каталог=$1″
if [ -z $каталог ]; потім
echo Використання: $0
вихід 1
бути

якщо [! -d $каталог]; потім

echo Помилка: «$directory» не є дійсним каталогом.
вихід 1
бути

cd $каталог || вихід 1

для файлу в *; робити
if [ -f $file ]; потім
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
бути
зроблено

Пояснення:

  1. #!/bin/bash : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. каталог=$1″ : цей рядок призначає перший аргумент командного рядка каталогу змінних.
  3. if [ -z $каталог ]; потім : цей рядок перевіряє, чи порожня змінна каталогу (під час виконання сценарію не надається аргумент).
  4. echo Використання: $0 : якщо каталог порожній, цей рядок друкує повідомлення про використання з назвою сценарію ($0).
  5. вихід 1 : цей рядок завершує роботу сценарію з кодом виходу 1, що вказує на помилку.
  6. f i: Це означає кінець першого оператора if.
  7. якщо [! -d $каталог]; потім : цей рядок перевіряє, чи не існує вказаного каталогу (-d перевіряє наявність каталогу).
  8. echo Помилка: «$directory» не є дійсним каталогом. : якщо вказаний каталог не існує, цей рядок друкує повідомлення про помилку.
  9. вихід 1 : вихід зі сценарію з кодом виходу 1.
  10. бути : Позначає кінець другого оператора if.
  11. cd $каталог || вихід 1 : змінює поточний робочий каталог на вказаний каталог. Якщо змінити каталог не вдалося (наприклад, каталог не існує), сценарій завершує роботу з кодом помилки.
  12. для файлу в *; зробити: я для файлу в *; зробити: ініціює цикл, який перебирає всі елементи в поточному каталозі (* відповідає всім назвам файлів).
  13. if [ -f $file ]; потім : перевіряє, чи поточний елемент ітерації циклу є звичайним файлом (-f перевіряє звичайний файл).
  14. newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : перетворює поточне ім’я файлу ($file) на нижній регістр за допомогою команди tr і зберігає результат у змінній newname.
  15. [ $file != $newname ] && mv $file $newname : Порівнює оригінальну назву файлу з новою назвою файлу, написаною в нижньому регістрі. Якщо вони різні, він перейменовує файл за допомогою команди mv.
  16. бути : Позначає кінець внутрішнього оператора if.
  17. зроблено : Позначає кінець циклу.

454

Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях до поточного каталогу home/jayeshkumar/test

27) Як можна використовувати арифметичні операції в сценарії оболонки?

Арифметичні операції можна виконувати в сценарії оболонки за допомогою різних вбудованих методів. Оболонка надає механізми для простих арифметичних обчислень за допомогою арифметичного розширення, наприклад:

  1. Арифметичне розширення ($((…)))
  2. Використання команди expr
  3. Використання команди let

Ось наш сценарій Shell, що пояснює всі три методи арифметичних операцій.

#!/bin/bash
num1=10
num2=5

#Арифметичне розширення ($((…)))

результат=$((num1 + num2))
echo Сума: $результат

#Використання команди expr

сума=$(вираз $num1 + $num2)
echo Сума: $сума

#Використання команди let

нехай сума = num1 + num2
echo Сума: $сума

Пояснення:

  1. `#!/bin/bash` : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. `num1=10` і ` num2=5` : ці рядки присвоюють значення 10 і 5 змінним ` num1 ` і ` num2 ` відповідно.
  3. `#Арифметичне розширення ($((…)))` : це коментар, що вказує на початок розділу, який демонструє арифметичне розширення.
  4. `результат=$((num1 + num2))` : цей рядок використовує арифметичне розширення для обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` результат ` змінна.
  5. `echo Sum: $result` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` результат ` змінна.
  6. `#Використання команди expr` : це коментар, що вказує на початок розділу, який демонструє використання ` вираз ` команда арифметичних операцій.
  7. `sum=$(expr $num1 + $num2)` : цей рядок використовує ` вираз ` команда обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` сума ` змінна. Зауважте, що ` вираз Команда ` вимагає пробілів навколо операторів.
  8. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
  9. `#Використання команди let` : це коментар, що вказує на початок розділу, який демонструє використання ` дозволяти ` команда арифметичних операцій.
  10. `нехай сума = num1 + num2″` : цей рядок використовує ` дозволяти ` команда обчислення суми ` num1 ` і ` num2 ` і призначає результат ` сума ` змінна. ` дозволяти Команда ` не вимагає пробілів навколо операторів.
  11. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
арифметика

арифметика

28) Створіть сценарій, який перевіряє, чи доступний хост мережі.

Ось простий сценарій оболонки, який використовує команду ping, щоб перевірити, чи доступний хост мережі:

#!/bin/bash
хост=$1″
якщо [ -z $хост]; потім
echo Використання: $0
вихід 1
бути
ping -c 4 $хост

якщо [ $? -екв 0]; потім
echo $host доступний.
інше
echo $host недоступний.
бути

Пояснення:

  1. Він приймає ім’я хоста або IP-адресу як аргумент і перевіряє, чи надано аргумент.
  2. Якщо аргумент не вказано, відображається повідомлення про використання та завершується робота.
  3. Він використовує команду ping з опцією -c 4 для надсилання чотирьох ехо-запитів ICMP на вказаний хост.
  4. Після виконання команди ping перевіряється статус виходу ($?). Якщо статус виходу дорівнює 0, це означає, що хост доступний і сценарій друкує повідомлення про успіх. В іншому випадку він друкує повідомлення про помилку.

456

Примітка : нам потрібно надати ім’я хоста як аргумент під час виконання сценарію. Тут ми використали google.com

29) Напишіть сценарій оболонки, щоб знайти найбільший елемент у масиві:

Ось сценарій оболонки для пошуку найбільшого елемента в масиві.

#!/bin/bash
# Оголошення масиву
масив=(3 56 24 89 67)

# Ініціалізація змінної для збереження максимального значення, починаючи з першого елемента

макс=${масив[0]}

# Ітерація по масиву

для числа в ${array[@]}; робити

# Порівняти кожен елемент із поточним максимумом

if ((num> max)); потім
max=$num
бути
зроблено

# Вивести максимальне значення

echo Максимальний елемент у масиві: $max

Пояснення:

  1. ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. ` масив=(3 56 24 89 67) `: масив оголошується та ініціалізується значеннями.
  3. ` макс=${масив[0]} `: `max` ініціалізується першим елементом масиву.
  4. ` для числа в ${array[@]}; робити `: цикл `for` використовується для перебору елементів масиву.
  5. ` if ((num> max)); потім `: Оператор `if` перевіряє, чи поточний елемент `num` більший за поточний максимальний `max`.
  6. ` max=$num`: Якщо`num ` більше ніж `max`, `max` оновлюється значенням num.
  7. ` зроблено `: цикл `for` закрито.
  8. ` echo Максимальний елемент у масиві: $max `: нарешті сценарій друкує максимальне значення, знайдене в масиві.
461

найбільше число

30) Напишіть скрипт для обчислення суми елементів у масиві.

#!/bin/bash

# Оголошення масиву

масив=(1 65 22 19 94)

# Ініціалізація змінної для збереження суми

сума=0

# Перебираємо масив і додаємо кожен елемент до суми

для числа в ${array[@]}; робити
am=$((am + am))
зроблено

# Вивести суму

echo Сума елементів у масиві: $sum

Пояснення:

` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.

` масив=(1 65 22 19 94) `: масив оголошується та ініціалізується значеннями.

` сума=0 `:` сума ` ініціалізується нулем, щоб зберегти суму елементів.

` для числа в ${array[@]}; робити `: A ` для Цикл ` використовується для перебору елементів масиву.

` am=$((am + am)) `: усередині циклу кожен елемент ` на одному ` додається до ` сума ` змінна.

` зроблено `: ` для ` цикл закрито.

`echo Сума елементів у масиві: $sum`: Нарешті, скрипт друкує суму всіх елементів у масиві.

462

Сума елементів

Дізнайтеся більше про сценарії оболонки

Висновок

Ми всі фанати знаємо, що сценарій оболонки дуже корисний для підвищення продуктивності роботи, а також економії часу. Отже, у цій статті ми розглянули 30 дуже корисних і найбільш шахрайських прикладів сценаріїв оболонки . Ми сподіваємося, що цей повний посібник із прикладів сценаріїв оболонки допоможе вам зрозуміти все про сценарії оболонки.




вихід 1
бути

якщо [! -d $каталог]; потім

echo Помилка: «$directory» не є дійсним каталогом.
вихід 1
бути

cd $каталог || вихід 1

для файлу в *; робити
if [ -f $file ]; потім
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
бути
зроблено

Пояснення:

  1. #!/bin/bash : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. каталог=″ : цей рядок призначає перший аргумент командного рядка каталогу змінних.
  3. if [ -z $каталог ]; потім : цей рядок перевіряє, чи порожня змінна каталогу (під час виконання сценарію не надається аргумент).
  4. echo Використання:

    Для всіх дистрибутивів Linux сценарій оболонки — це як чарівна паличка, яка автоматизує процес, економить час користувачів і підвищує продуктивність. У цьому навчальному посібнику зі створення сценаріїв ви познайомитеся з 25 плюс прикладами сценаріїв.

    Але перш ніж ми перейдемо до теми сценарій оболонки приклади, давайте розберемося зі сценарієм оболонки та реальними випадками використання сценаріїв оболонки.

    Що таке Shell Script?

    Ну, оболонка - це a CLI ( інтерпретатор командного рядка ), який запускається в текстовому вікні, де користувачі можуть керувати та виконувати команди оболонки. З іншого боку, процес написання набору команд для виконання в системі Linux. Файл, який містить такі інструкції, називається сценарієм bash.

    Використання сценаріїв оболонки

    Нижче наведено деякі поширені способи використання сценарію оболонки:

    • Автоматизація завдань – Його можна використовувати для автоматизації повторюваних завдань, таких як звичайне резервне копіювання та завдання встановлення програмного забезпечення.
    • Налаштування – Можна використовувати сценарії оболонки, щоб створити середовище командного рядка та легко виконувати завдання відповідно до потреб.
    • Керування файлами – Сценарії оболонки також можна використовувати для керування та маніпулювання файлами та каталогами, наприклад для переміщення, копіювання, перейменування або видалення файлів.

    Приклади сценаріїв оболонки в Linux

    1) Що означає символ (#!) на початку сценарію оболонки?

    The шибання (#!) на початку сценарію вказує інтерпретатор, який слід використовувати для виконання сценарію. Він повідомляє системі, яка оболонка чи інтерпретатор має інтерпретувати команди сценарію.

    Наприклад: Припустимо, у нас є сценарій з назвою myscript.sh написаний в оболонці Bash:

    shebang

    shebang

    У цьому прикладі:

    • #!/bin/bash на початку сценарію вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
    • Команди echo використовуються для друку повідомлень на термінал.

    2) Як запустити сценарій оболонки з командного рядка?

    Щоб запустити сценарій оболонки з командного рядка, нам потрібно виконати такі дії:

    • Переконайтеся, що файл сценарію має дозволи на виконання за допомогою команда chmod :
    chmod +x myscript.sh>
    • Виконайте сценарій, використовуючи його назву файлу:
    ./myscript.sh>

    Тут треба замінити myscrtipt.sh з назвою вашого сценарію.

    3) Напишіть сценарій оболонки, який друкує techcodeview.com на терміналі.

    Створіть назву сценарію `myscript.sh` (ми використовуємо ` оскільки ` редактор, ви можете вибрати будь-який редактор)

    vim myscript.sh>

    #!/bin/bash
    # Цей сценарій друкує techcodeview.com на терміналі
    луна techcodeview.com

    надруковане ім'я

    надруковане ім'я

    Ми робимо наш сценарій виконуваним за допомогою `chmod +x`, потім виконуємо за допомогою `./myscipt.sh` і отримуємо бажаний результат techcodeview.com.

    4) Поясніть призначення команди echo в сценаріях оболонки.

    The команда echo використовується для відображення тексту або змінних на терміналі. Він зазвичай використовується для друку повідомлень, значень змінних і генерування вихідних даних програми.

    434

    команда echo

    У цьому прикладі ми виконали `echo` на терміналі безпосередньо, оскільки він працює так само в сценарії оболонки.

    5) Як ви можете призначити значення змінній у сценарії оболонки?

    Змінним присвоюються значення за допомогою оператора присвоювання =.

    Наприклад:

    #!/bin/bash
    # Присвоєння значення змінній
    ім'я=Джаєш
    вік=21
    echo $name $age

    Пояснення:

    • Змінній name присвоєно значення Jayesh.
    • Змінній віку присвоєно значення 21.
    • echo використовується для друку, а `$name` `$age` використовується для виклику значення, що зберігається в змінних.

    435

    6) Напишіть сценарій оболонки, який приймає ім’я користувача як вхідні дані та вітає його.

    Створіть назву сценарію `example.sh`.

    #!/bin/bash
    # Запитайте в користувача ім'я
    echo Як тебе звуть?
    прочитати назву
    # Привітайте користувача
    echo Привіт, $name! Приємно познайомитись.

    Пояснення:

    • #!/bin/bash: це рядок shebang. Він повідомляє системі використовувати інтерпретатор Bash для виконання сценарію.
    • # Запитайте в користувача ім'я: це коментар. Він надає контекст про майбутній код. Коментарі ігноруються перекладачем.
    • echo Як вас звати?: Команда echo використовується для відображення тексту в подвійних лапках на терміналі.
    • read name: команда read очікує, поки користувач введе текст, і зберігає його в імені змінної.
    • echo Привіт, $name! Приємно познайомитися.: цей рядок використовує команду echo для друку вітального повідомлення, яке містить значення змінної name, яке було зібрано з введених користувачем даних.

    436

    7) Як додати коментарі до сценарію оболонки?

    Коментарі в сценаріях оболонки використовуються для надання пояснень або контексту до коду. Вони ігноруються перекладачем і призначені лише для людей, які читають сценарій. Ви можете додавати коментарі за допомогою символу #.

    #!/bin/bash
    # Це коментар, що пояснює мету сценарію
    відлуння gfg

    8) Створіть сценарій оболонки, який перевіряє, чи існує файл у поточному каталозі.

    Ось сценарій, який перевіряє, чи існує файл під назвою example.txt у поточному каталозі:

    #!/bin/bash
    file=example.txt
    # Перевірте, чи файл існує
    if [ -e $file ]; потім
    echo Файл існує: $file
    інше
    echo Файл не знайдено: $file
    бути

    Пояснення:

    1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
    2. file=example.txt: цей рядок визначає файл змінної та присвоює йому значення example.txt. Ви можете замінити це назвою файлу, який потрібно перевірити.
    3. if [ -e $file ]; then: Цей рядок починає оператор if. Умова [ -e $file ] перевіряє, чи існує файл, визначений значенням змінної file. Прапор -e використовується для перевірки існування файлу.
    4. echo Файл існує: $file: якщо умова вірна (тобто файл існує), цей рядок друкує повідомлення про те, що файл існує, разом із назвою файлу.
    5. else: якщо умова хибна (тобто файл не існує), сценарій виконує код у гілці else.
    6. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено, разом із назвою файлу.
    7. fi: цей рядок позначає кінець оператора if.
    Пошук файлу

    Пошук файлу

    9) Яка різниця між одинарними лапками (‘) і подвійними лапками () у сценаріях оболонки?

    Одинарні лапки (‘) і подвійні лапки () використовуються для включення рядків у сценарії оболонки, але вони мають різну поведінку:

    • Одинарні лапки: усе, що знаходиться в одинарних лапках, розглядається як літеральний рядок. Імена змінних і більшість спеціальних символів не розгортаються.
    • Подвійні лапки: змінні та певні спеціальні символи в подвійних лапках розгортаються. Вміст підлягає підстановці змінних і підстановці команд.

    #!/bin/bash

    abcd=Привіт
    echo ‘$abcd’ # Вихід: $abcd
    echo $abcd # Вихід: Привіт

    10) Як ви можете використовувати аргументи командного рядка в сценарії оболонки?

    Аргументи командного рядка це значення, які надаються сценарію під час його виконання. До них можна отримати доступ у сценарії за допомогою спеціальних змінних, таких як $1, $2 тощо, де $1 представляє перший аргумент, $2 представляє другий аргумент і так далі.

    Наприклад: Якщо ім'я нашого сценарію в `example.sh`

    #!/bin/bash

    echo Назва сценарію: $0
    echo Перший аргумент: $1
    echo Другий аргумент: $2

    Якщо ми запустимо сценарій із `.example.sh hello_1 hello_2`, він виведе:

    аргументи cli

    аргументи cli

    11) Як ви використовуєте цикл for для перебору списку значень?

    Створіть назву сценарію `example.sh`.

    #!/bin/bash

    фрукти=(яблуко банан вишня фінік)
    для фруктів у ${fruits[@]}; робити
    echo Поточний фрукт: $fruit
    зроблено

    Пояснення:

    Рядок `fruits=` створює масив під назвою fruits із чотирьох елементів: яблуко, банан, вишня та фінік.

    • для фруктів у ${fruits[@]}; do: Цей рядок починає цикл for. Ось що означає кожна частина:
    • for fruit: Це оголошує змінну циклу під назвою fruit. У кожній ітерації циклу fruit буде зберігати значення поточного елемента з масиву fruits.
    • ${fruits[@]}: це розширення масиву, яке бере всі елементи з масиву fruits. Синтаксис ${…} гарантує, що кожен елемент розглядається як окремий елемент.
    • do: це ключове слово позначає початок тіла циклу.
    • echo Поточний плод: $fruit: усередині циклу цей рядок використовує команду echo для відображення поточного значення змінної циклу fruit. Він друкує повідомлення на кшталт Current fruit: apple для кожного фрукта в масиві.
    • done: це ключове слово позначає кінець тіла циклу. Він повідомляє сценарію, що цикл завершено.
    для циклу

    для циклу

    12) Напишіть сценарій оболонки, який обчислює суму цілих чисел від 1 до N за допомогою циклу.

    Створіть назву сценарію `example.sh`.

    #!/bin/bash

    echo Введіть число (N):
    читати Н
    сума=0
    for (( i=1; i<=$N; i++ )); робити
    сума=$((сума + i))
    зроблено
    echo Сума цілих чисел від 1 до $N: $sum

    Пояснення:
    Сценарій починається з запиту на введення числа (N) за допомогою read. Це число визначить, скільки разів виконується цикл.

    1. Змінна sum ініціалізується рівним 0. Ця змінна відстежуватиме суму цілих чисел.
    2. Цикл for починається з for (( i=1; i<=$N; i++ )). Ця структура циклу використовується для повторення набору дій певну кількість разів, у цьому випадку від 1 до значення N.
    3. Усередині циклу відбуваються такі речі:
      • i=1 встановлює для змінної циклу i значення 1 на початку кожної ітерації.
      • Умова циклу i<=$N перевіряє, чи i все ще менше або дорівнює заданому числу N.
      • Якщо умова виконується, виконується тіло циклу.
      • sum=$((sum + i)) обчислює нове значення sum, додаючи до нього поточне значення i. Це додає цілі числа від 1 до поточного значення i.
    4. Після кожної ітерації i++ збільшує значення i на 1.
    5. Цикл продовжує працювати, доки умова i<=$N не стане помилковою (коли i стане більшим за N).
    6. Після завершення циклу сценарій відображає суму цілих чисел від 1 до введеного числа N.

    439

    13) Створіть сценарій, який шукатиме певне слово у файлі та підраховуватиме його випадки.

    Створіть назву сценарію `word_count.sh`

    #!/bin/bash

    echo Введіть слово для пошуку:
    читати target_word
    echo Введіть назву файлу:
    прочитати назву файлу
    count=$(grep -o -w $target_word $filename | wc -l)
    echo Слово «$target_word» з’являється $count разів у «$filename».

    Пояснення:

    • echo Введіть слово для пошуку:: Цей рядок відображає повідомлення з проханням до користувача ввести слово, яке він хоче знайти у файлі.
    • read target_word: цей рядок читає введені користувачем дані та зберігає їх у змінній під назвою target_word.
    • echo Введіть ім'я файлу:: Цей рядок відображає повідомлення з проханням до користувача ввести назву файлу, у якому він бажає виконати пошук.
    • read filename: Цей рядок читає введені користувачем дані та зберігає їх у змінній з назвою filename.
    • count=$(grep -o -w $target_word $filename | wc -l): цей рядок виконує основну роботу сценарію. Давайте розберемо це далі:
      • grep -o -w $target_word $filename: Ця частина команди шукає входження target_word у вказаному імені файлу. Параметри -o і -w гарантують, що враховуються лише цілі збіги слів.
      • |: Це канал, який приймає вихідні дані попередньої команди та надсилає їх як вхідні дані для наступної команди.
      • wc -l: ця частина команди використовує команду wc для підрахунку кількості рядків у вхідних даних. Параметр -l спеціально підраховує рядки.
      • Уся команда обчислює кількість входжень target_word у файлі та призначає цю кількість змінній coun

    441

    14) Поясніть різницю між стандартним виведенням (stdout) і стандартною помилкою (stderr).

    Основна відмінність між стандартним виведенням (stdout) і стандартною помилкою (stderr) полягає в наступному:

    • Стандартний вихід (stdout): Це стандартний вихідний потік, куди надходить звичайний вихід команди. Він відображається на терміналі за замовчуванням. Ви можете перенаправити його до файлу за допомогою>.
    • Стандартна помилка (stderr): Це вихідний потік для повідомлень про помилки та попереджень. Він також відображається на терміналі за замовчуванням. Ви можете перенаправити його у файл за допомогою 2>.

    15) Поясніть концепцію умовних операторів у сценаріях оболонки.

    Умовні оператори в сценаріях оболонки дозволяють нам приймати рішення та контролювати потік нашого сценарію на основі певних умов. Вони дозволяють нашому сценарію виконувати різні набори команд залежно від того, чи є конкретна умова істинною чи хибною. Основними умовними операторами в сценаріях оболонки є оператор if, оператор elif (необов’язковий) і оператор else (необов’язковий).

    Ось базова структура умовного оператора в сценаріях оболонки:

    якщо [умова]; потім
    # Команди для виконання, якщо умова виконується
    elif [інша_умова]; потім
    # Команди для виконання, якщо another_condition є істинним (необов’язково)
    інше
    # Команди для виконання, якщо жодна з умов не виконується (необов’язково)
    бути

    Пояснення:

    • [умова] = Команда, яка оцінює умову та повертає істинний (0) або хибний (ненульовий) статус виходу.
    • then = Це ключове слово, яке вказує, що наступні за ним команди будуть виконані, якщо умова оцінюється як істина.
    • elif = (скорочення від else if) Це розділ, який дозволяє нам вказати додаткові умови для перевірки.
    • else = це розділ, який містить команди, які будуть виконані, якщо жодна з умов не виконується.
    • fi = Це ключове слово, яке позначає кінець умовного блоку.

    16) Як ви читаєте рядки з файлу в сценарії оболонки?

    до читати рядки з файлу в сценарії оболонки, ми можемо використовувати різні методи, але один з поширених підходів полягає у використанні циклу while у поєднанні з командою read. Ось як ми можемо це зробити:

    #!/bin/bash
    file=/home/jayeshkumar/jayesh.txt
    # Перевірте, чи файл існує
    if [ -e $file ]; потім
    while IFS= читання рядка -r; робити
    echo Читання рядка: $line
    # Додайте тут свою логіку обробки
    виконано <$файл
    інше
    echo Файл не знайдено: $file
    бути

    Пояснення:

    1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
    2. file=/home/jayeshkumar/jayesh.txt: цей рядок визначає файл змінної та призначає повний шлях до файлу jayesh.txt у каталозі /home/jayeshkumar. Змініть цей шлях, щоб відповідати фактичному шляху до файлу, який ви хочете прочитати.
    3. if [ -e $file ]; then: Цей рядок починає оператор if. Він перевіряє, чи існує файл, визначений змінною $file. Прапор -e перевіряє наявність файлу.
    4. while IFS= читання рядка -r; do: цей рядок ініціює цикл while, який читає рядки з файлу.
      • IFS=: IFS (внутрішній роздільник полів) має порожнє значення, щоб зберегти пробіли на початку та в кінці.
      • read -r рядок: це зчитує поточний рядок із файлу та зберігає його у рядку змінної.
    5. echo Прочитаний рядок: $line: цей рядок друкує вміст рядка, який було прочитано з файлу. Змінна $line містить вміст поточного рядка.
    6. # Додайте свою логіку обробки тут: це коментар-заповнювач, де ви можете додати свою власну логіку для обробки кожного рядка. Наприклад, ви можете проаналізувати рядок, отримати інформацію або виконати певні дії на основі вмісту.
    7. done <$file: це позначає кінець циклу while. <$file перенаправляє вміст файлу, який буде прочитано циклом.
    8. else: якщо файл не існує (умова оператора if невірна), сценарій виконує код у гілці else.
    9. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено.
    10. fi: цей рядок позначає кінець оператора if.
    читання файлу

    читання файлу

    Тут ми використали ` pwd `, щоб отримати шлях до поточного каталогу.

    17) Напишіть функцію в сценарії оболонки, яка обчислює факториал заданого числа.

    Ось такий сценарійобчислити факторіалзаданого числа.

    #!/bin/bash
    # Визначте функцію для обчислення факторіалу
    calculate_factory() {
    num=$1
    факт=1
    for ((i=1; i<=num; i++)); робити
    факт=$((факт * i))
    зроблено
    луна $факт
    }
    # Запропонувати користувачеві ввести число
    echo Введіть число:
    читати input_num
    # Викличте функцію calculate_factorial із введеним числом
    factorial_result=$(calculate_factorial $input_num)
    # Відобразити факторний результат
    echo Факторіал $input_num: $factorial_result

    Пояснення:

    1. Сценарій починається з рядка shebang #!/bin/bash для визначення інтерпретатора.
    2. Calculate_factorial() визначається як функція. Він приймає один аргумент, num, який є числом, факторіал якого потрібно обчислити.
    3. Усередині функції факт ініціалізується рівним 1. Ця змінна зберігатиме факторний результат.
    4. Цикл for повторює від 1 до заданого числа (num). У кожній ітерації він множить поточне значення факту на індекс циклу i.
    5. Після завершення циклу змінна fact містить обчислений факториал.
    6. Сценарій пропонує користувачеві ввести число за допомогою read.
    7. Функція calculate_factorial викликається з числом, наданим користувачем, і результат зберігається в змінній factorial_result.
    8. Нарешті сценарій відображає обчислений факторний результат.
    Факторіал

    Факторіал

    18) Як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки?

    У сценарії оболонки ви можете обробляти такі сигнали, як Ctrl+C (також відомий як SIGINT), використовуючи команду trap. Ctrl+C генерує сигнал SIGINT, коли користувач натискає його, щоб перервати запущений сценарій або програму. Використовуючи команду trap, ви можете вказати дії, які мають бути виконані при отриманні певного сигналу. Ось як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки:

    #!/bin/bash
    прибирати() {
    echo Сценарій перервано. Виконання очищення…
    # Додайте тут свої дії з очищення
    вихід 1
    }
    # Налаштувати перехоплення для виклику функції очищення, коли отримано Ctrl+C (SIGINT).
    очищення пастки SIGINT
    # Решта вашого сценарію
    луна Бігає…
    спати 10
    echo Готово.

    Обробка сигналів важлива для того, щоб зробити сценарії надійними та забезпечити ефективну обробку несподіваних переривань. Ви можете налаштувати функцію очищення відповідно до ваших конкретних потреб, як-от закриття файлів, зупинка процесів або запис інформації перед виходом зі сценарію.

    Пояснення:

    1. #!/bin/bash: цей рядок shebang визначає інтерпретатор, який буде використовуватися для виконання сценарію.
    2. cleanup() { … }: це визначає функцію під назвою cleanup. У цю функцію можна включити будь-які дії, які потрібно виконати, коли сценарій переривається, наприклад закриття файлів, звільнення ресурсів або виконання інших завдань очищення.
    3. trap cleanup SIGINT: Команда trap використовується для налаштування обробника сигналів. У цьому випадку це вказує, що коли отримано сигнал SIGINT (Ctrl+C), слід виконати функцію очищення.
    4. echo Виконується…, sleep 10, echo Finished.: Це лише приклади команд для імітації виконання сценарію.

    446

    19) Створіть сценарій, який перевіряє та видаляє повторювані рядки в текстовому файлі.

    Ось наш сценарій Linux, у якому ми будемо видаляти повторювані рядки з текстового файлу.

    #!/bin/bash
    input_file=input.txt
    вихідний_файл=вихідний.txt
    сортувати $input_file | uniq> $output_file
    echo Повторювані рядки успішно видалено.

    Пояснення:

    1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
    2. Змінна input_file встановлюється на ім’я вхідного файлу, що містить повторювані рядки (змініть це на фактичне ім’я вхідного файлу).
    3. Змінна output_file встановлюється на назву вихідного файлу, з якого буде видалено дублікати (змініть це на бажане ім’я вихідного файлу).
    4. Сценарій використовує команду sort для сортування рядків у вхідному файлі. Сортування рядків гарантує, що повторювані рядки групуються разом.
    5. Потім відсортовані рядки передаються через команду uniq, яка видаляє послідовні повторювані рядки. Вихідні дані цього процесу перенаправляються у вихідний файл.
    6. Після видалення дублікатів сценарій друкує повідомлення про успіх.
    видалення повторюваних рядків

    видалення повторюваних рядків

    Тут ми використовуємо ` кішка `, щоб відобразити текст у текстовому файлі.

    20) Напишіть сценарій, який генерує безпечний випадковий пароль.

    Ось наш скрипт для створення безпечного випадкового пароля.

    #!/bin/bash
    # Функція генерації випадкового пароля
    generate_password() {
    tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
    }
    # Виклик функції та збереження згенерованого пароля
    пароль=$(згенерувати_пароль)
    echo Згенерований пароль: $password

    Примітка: користувач може відповідно змінити довжину пароля, замінивши число `12`.

    Пояснення:

    1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
    2. Функція generate_password призначена для створення випадкового пароля. Ось як це працює:
      • tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
      • fold -w 12 розбиває відфільтровані випадкові дані на рядки по 12 символів у кожному.
      • head -n 1 вибирає перший рядок, фактично надаючи нам випадкову послідовність символів довжиною 12.
    3. Змінній password присвоюється результат виклику функції generate_password.
    4. Нарешті, згенерований пароль відображається за допомогою луни.

    448

    21) Напишіть сценарій оболонки, який обчислює загальний розмір усіх файлів у каталозі.

    Ось сценарій оболонки для обчислення загального розміру всіх файлів у каталозі.

    #!/bin/bash
    каталог=/шлях/до/вашого/каталогу
    total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
    echo Загальний розмір файлів у $directory: $total_size

    Пояснення:

    1. Сценарій починається з #!/bin/bash shebang, що вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
    2. Змінна каталогу встановлюється на шлях до каталогу, для якого потрібно обчислити загальний розмір файлу. Замініть /path/to/your/directory справжнім шляхом.
    3. Команда du використовується для оцінки використання файлового простору. Використовуються такі варіанти:
      • -c: створити загальну суму.
      • -s: відображати лише загальний розмір зазначеного каталогу.
      • -h: друкувати розміри в зручному для читання форматі (наприклад, КБ, МБ, ГБ).
    4. Вихід du передається до grep total, щоб відфільтрувати рядок, який містить загальний розмір.
    5. awk ‘{print $1}’ використовується для виділення першого поля (загального розміру) з рядка.
    6. Розрахований загальний розмір зберігається в змінній total_size.
    7. Нарешті, сценарій відображає загальний розмір за допомогою echo.
    Загальний розмір файлів

    Загальний розмір файлів

    Тут ми використали ` pwd `, щоб побачити поточний шлях до каталогу.

    22) Поясніть різницю між операторами if і elif у сценаріях оболонки.

    Особливість `if`Staiftement Заява `elif`
    призначення Поясніть різницю між операторами if і elif у сценаріях оболонки. Надає альтернативні умови для перевірки, коли початкова умова if є хибною.
    використання Використовується для початкового стану. Використовується після початкової умови if для перевірки додаткових умов.
    кількість блоків Може мати лише один блок if. Може мати декілька блоків elif, але лише один блок else (необов’язково).
    виконання Виконує блок коду, пов’язаний із оператором if, якщо умова виконується. Якщо умова false, блок else (якщо присутній) виконується (необов’язково). Перевіряє кожну умову elif по порядку. Якщо одна з умов elif виконується, виконується відповідний блок коду, і сценарій завершує роботу з усього умовного блоку. Якщо жодна з умов elif не виконується, виконується блок else (якщо він присутній).
    Вкладені структури Може бути вкладено в інші блоки if, elif або else. Не можна вкладати в інший блок elif, але можна використовувати всередині блоку if або else.

    Розберемося в цьому на прикладі.

    #!/bin/bash
    число=5
    if [$number -gt 10]; потім
    echo $number більше 10
    інше
    echo $number не більше 10
    бути
    луна ——–
    if [$number -gt 10]; потім
    echo $number більше 10
    elif [$number -eq 10]; потім
    echo $number дорівнює 10
    інше
    echo $number менше 10
    бути

    Пояснення:

    У цьому прикладі перший блок if перевіряє, чи число більше 10. Якщо ні, він друкує повідомлення про те, що число не більше 10. Другий блок із операторами elif перевіряє кілька умов послідовно, доки одна з них не стане істинною. У цьому випадку, оскільки значення числа дорівнює 5, результатом буде:

    if_elif різниця

    if_elif різниця

    23) Як ви використовуєте цикл while для багаторазового виконання команд?

    Цикл while використовується в сценаріях оболонки для багаторазового виконання набору команд, доки виконується певна умова. Цикл продовжує виконувати команди, поки умова не стане помилковою.

    Ось основний синтаксис циклу while:

    while [умова]; робити
    # Команди для виконання
    зроблено

    Пояснення:

    1. Цикл `while` починається з ключового слова `while`, після якого йде умова, укладена в квадратні дужки `[ ]`.
    2. Тіло циклу, яке містить команди для виконання, укладено в ключові слова `do` і `done`.
    3. Цикл спочатку перевіряє умову. Якщо умова виконується, виконуються команди в тілі циклу. Після виконання тіла циклу умова перевіряється знову, і процес повторюється, доки умова не стане помилковою.

    приклад: Якщо ми хочемо надрукувати числа від 1 до 5

    #!/bin/bash
    лічильник=1
    while [$counter -le 5]; робити
    echo Номер: $лічильник
    лічильник=$((лічильник + 1))
    зроблено

    Пояснення:

    • Змінна лічильника має значення 1.
    • Цикл while перевіряє, чи значення лічильника менше або дорівнює 5. Поки ця умова виконується, цикл продовжує виконуватися.
    • Усередині циклу поточне значення лічильника друкується за допомогою echo.
    • Лічильник збільшується на 1 за допомогою виразу $((лічильник + 1)).
    цикл while

    цикл while

    24) Створіть сценарій оболонки, який знаходить і перераховує всі порожні файли в каталозі.

    Сценарій оболонки, який можна використовувати для пошуку та списку всіх порожніх файлів у каталозі за допомогою команд `find` і `stat`:

    #!/bin/bash
    каталог=$1″
    if [ -z $каталог ]; потім
    echo Використання: $0
    вихід 1
    бути

    якщо [! -d $каталог]; потім
    echo Помилка: «$directory» не є дійсним каталогом.
    вихід 1
    бути
    echo Порожні файли в $directory:
    find $directory -type f -empty

    Пояснення:

    1. ` #!/bin/bash `: Це називається shebang, і воно повідомляє операційній системі використовувати оболонку Bash для інтерпретації та виконання сценарію.
    2. ` каталог=$1″ `: цей рядок призначає перший аргумент командного рядка (позначений $1) змінній ` каталог `.
    3. ` if [ -z $каталог ]; потім `: цей рядок починає оператор if, який перевіряє, чи ` каталог ` змінна порожня (-z перевіряє порожній рядок).
    4. ` echo Використання: $0 `: якщо каталог порожній, цей рядок друкує повідомлення про використання, де ` $0 ` представляє назву сценарію.
    5. ` вихід 1 `: цей рядок завершує роботу сценарію з кодом виходу ` 1 `, що вказує на помилку.
    6. ` бути `: цей рядок позначає кінець ` якщо ` заява.
    7. ` якщо [! -d $каталог]; потім `: запускається інший оператор if, щоб перевірити, чи існує наданий каталог (` ` тести для каталогу).
    8. ` echo Помилка: «$directory» не є дійсним каталогом. `: якщо наданий каталог не існує, цей рядок друкує повідомлення про помилку.
    9. ` вихід 1 `: вихід зі сценарію з кодом виходу ` 1 `.
    10. ` бути `: позначає кінець другого ` якщо` заява.
    11. ` echo Порожні файли в $directory: `: якщо наразі все вірно, цей рядок друкує повідомлення про те, що сценарій перерахує порожні файли у вказаному каталозі.
    12. ` find $directory -type f -empty `: у цьому рядку використовується ` знайти ` команда пошуку порожніх файлів (` - порожній `) типу звичайних файлів (` - тип f `) у вказаному каталозі. Потім він перераховує ці порожні файли.
    Пошук порожніх файлів

    Пошук порожніх файлів

    Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях поточного каталогу home/jayeshkumar/

    25) Яка мета команди read у сценаріях оболонки?

    Команда read у сценаріях оболонки дозволяє сценарію запитувати у вас інформацію. Це як коли комп’ютер задає вам запитання й чекає на відповідь. Це корисно для сценаріїв, які вимагають, щоб ви щось ввели, або коли сценарію потрібно працювати з інформацією з файлів. Команда read допомагає сценарію зупинятися й чекати, що ви введете, а потім він може використовувати цю інформацію для виконання інших завдань у сценарії.

    Синтаксис команди read:

    read variable_name>

    приклад : якщо ми хочемо взяти ім’я як вхідні дані від користувача, щоб надрукувати його.

    #!/bin/bash
    echo Будь ласка, введіть своє ім'я:
    прочитати назву
    echo Привіт, $name!

    453

    прочитати ім

    Таким чином, команда read використовується для захоплення введених користувачем даних або даних із файлів у сценаріях оболонки, що робить сценарії більш інтерактивними та універсальними.

    26) Напишіть сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

    Ось сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

    #!/bin/bash
    каталог=$1″
    if [ -z $каталог ]; потім
    echo Використання: $0
    вихід 1
    бути

    якщо [! -d $каталог]; потім

    echo Помилка: «$directory» не є дійсним каталогом.
    вихід 1
    бути

    cd $каталог || вихід 1

    для файлу в *; робити
    if [ -f $file ]; потім
    newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
    [ $file != $newname ] && mv $file $newname
    бути
    зроблено

    Пояснення:

    1. #!/bin/bash : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. каталог=$1″ : цей рядок призначає перший аргумент командного рядка каталогу змінних.
    3. if [ -z $каталог ]; потім : цей рядок перевіряє, чи порожня змінна каталогу (під час виконання сценарію не надається аргумент).
    4. echo Використання: $0 : якщо каталог порожній, цей рядок друкує повідомлення про використання з назвою сценарію ($0).
    5. вихід 1 : цей рядок завершує роботу сценарію з кодом виходу 1, що вказує на помилку.
    6. f i: Це означає кінець першого оператора if.
    7. якщо [! -d $каталог]; потім : цей рядок перевіряє, чи не існує вказаного каталогу (-d перевіряє наявність каталогу).
    8. echo Помилка: «$directory» не є дійсним каталогом. : якщо вказаний каталог не існує, цей рядок друкує повідомлення про помилку.
    9. вихід 1 : вихід зі сценарію з кодом виходу 1.
    10. бути : Позначає кінець другого оператора if.
    11. cd $каталог || вихід 1 : змінює поточний робочий каталог на вказаний каталог. Якщо змінити каталог не вдалося (наприклад, каталог не існує), сценарій завершує роботу з кодом помилки.
    12. для файлу в *; зробити: я для файлу в *; зробити: ініціює цикл, який перебирає всі елементи в поточному каталозі (* відповідає всім назвам файлів).
    13. if [ -f $file ]; потім : перевіряє, чи поточний елемент ітерації циклу є звичайним файлом (-f перевіряє звичайний файл).
    14. newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : перетворює поточне ім’я файлу ($file) на нижній регістр за допомогою команди tr і зберігає результат у змінній newname.
    15. [ $file != $newname ] && mv $file $newname : Порівнює оригінальну назву файлу з новою назвою файлу, написаною в нижньому регістрі. Якщо вони різні, він перейменовує файл за допомогою команди mv.
    16. бути : Позначає кінець внутрішнього оператора if.
    17. зроблено : Позначає кінець циклу.

    454

    Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях до поточного каталогу home/jayeshkumar/test

    27) Як можна використовувати арифметичні операції в сценарії оболонки?

    Арифметичні операції можна виконувати в сценарії оболонки за допомогою різних вбудованих методів. Оболонка надає механізми для простих арифметичних обчислень за допомогою арифметичного розширення, наприклад:

    1. Арифметичне розширення ($((…)))
    2. Використання команди expr
    3. Використання команди let

    Ось наш сценарій Shell, що пояснює всі три методи арифметичних операцій.

    #!/bin/bash
    num1=10
    num2=5

    #Арифметичне розширення ($((…)))

    результат=$((num1 + num2))
    echo Сума: $результат

    #Використання команди expr

    сума=$(вираз $num1 + $num2)
    echo Сума: $сума

    #Використання команди let

    нехай сума = num1 + num2
    echo Сума: $сума

    Пояснення:

    1. `#!/bin/bash` : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. `num1=10` і ` num2=5` : ці рядки присвоюють значення 10 і 5 змінним ` num1 ` і ` num2 ` відповідно.
    3. `#Арифметичне розширення ($((…)))` : це коментар, що вказує на початок розділу, який демонструє арифметичне розширення.
    4. `результат=$((num1 + num2))` : цей рядок використовує арифметичне розширення для обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` результат ` змінна.
    5. `echo Sum: $result` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` результат ` змінна.
    6. `#Використання команди expr` : це коментар, що вказує на початок розділу, який демонструє використання ` вираз ` команда арифметичних операцій.
    7. `sum=$(expr $num1 + $num2)` : цей рядок використовує ` вираз ` команда обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` сума ` змінна. Зауважте, що ` вираз Команда ` вимагає пробілів навколо операторів.
    8. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
    9. `#Використання команди let` : це коментар, що вказує на початок розділу, який демонструє використання ` дозволяти ` команда арифметичних операцій.
    10. `нехай сума = num1 + num2″` : цей рядок використовує ` дозволяти ` команда обчислення суми ` num1 ` і ` num2 ` і призначає результат ` сума ` змінна. ` дозволяти Команда ` не вимагає пробілів навколо операторів.
    11. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
    арифметика

    арифметика

    28) Створіть сценарій, який перевіряє, чи доступний хост мережі.

    Ось простий сценарій оболонки, який використовує команду ping, щоб перевірити, чи доступний хост мережі:

    #!/bin/bash
    хост=$1″
    якщо [ -z $хост]; потім
    echo Використання: $0
    вихід 1
    бути
    ping -c 4 $хост

    якщо [ $? -екв 0]; потім
    echo $host доступний.
    інше
    echo $host недоступний.
    бути

    Пояснення:

    1. Він приймає ім’я хоста або IP-адресу як аргумент і перевіряє, чи надано аргумент.
    2. Якщо аргумент не вказано, відображається повідомлення про використання та завершується робота.
    3. Він використовує команду ping з опцією -c 4 для надсилання чотирьох ехо-запитів ICMP на вказаний хост.
    4. Після виконання команди ping перевіряється статус виходу ($?). Якщо статус виходу дорівнює 0, це означає, що хост доступний і сценарій друкує повідомлення про успіх. В іншому випадку він друкує повідомлення про помилку.

    456

    Примітка : нам потрібно надати ім’я хоста як аргумент під час виконання сценарію. Тут ми використали google.com

    29) Напишіть сценарій оболонки, щоб знайти найбільший елемент у масиві:

    Ось сценарій оболонки для пошуку найбільшого елемента в масиві.

    #!/bin/bash
    # Оголошення масиву
    масив=(3 56 24 89 67)

    # Ініціалізація змінної для збереження максимального значення, починаючи з першого елемента

    макс=${масив[0]}

    # Ітерація по масиву

    для числа в ${array[@]}; робити

    # Порівняти кожен елемент із поточним максимумом

    if ((num> max)); потім
    max=$num
    бути
    зроблено

    # Вивести максимальне значення

    echo Максимальний елемент у масиві: $max

    Пояснення:

    1. ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. ` масив=(3 56 24 89 67) `: масив оголошується та ініціалізується значеннями.
    3. ` макс=${масив[0]} `: `max` ініціалізується першим елементом масиву.
    4. ` для числа в ${array[@]}; робити `: цикл `for` використовується для перебору елементів масиву.
    5. ` if ((num> max)); потім `: Оператор `if` перевіряє, чи поточний елемент `num` більший за поточний максимальний `max`.
    6. ` max=$num`: Якщо`num ` більше ніж `max`, `max` оновлюється значенням num.
    7. ` зроблено `: цикл `for` закрито.
    8. ` echo Максимальний елемент у масиві: $max `: нарешті сценарій друкує максимальне значення, знайдене в масиві.
    461

    найбільше число

    30) Напишіть скрипт для обчислення суми елементів у масиві.

    #!/bin/bash

    # Оголошення масиву

    масив=(1 65 22 19 94)

    # Ініціалізація змінної для збереження суми

    сума=0

    # Перебираємо масив і додаємо кожен елемент до суми

    для числа в ${array[@]}; робити
    am=$((am + am))
    зроблено

    # Вивести суму

    echo Сума елементів у масиві: $sum

    Пояснення:

    ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.

    ` масив=(1 65 22 19 94) `: масив оголошується та ініціалізується значеннями.

    ` сума=0 `:` сума ` ініціалізується нулем, щоб зберегти суму елементів.

    ` для числа в ${array[@]}; робити `: A ` для Цикл ` використовується для перебору елементів масиву.

    ` am=$((am + am)) `: усередині циклу кожен елемент ` на одному ` додається до ` сума ` змінна.

    ` зроблено `: ` для ` цикл закрито.

    `echo Сума елементів у масиві: $sum`: Нарешті, скрипт друкує суму всіх елементів у масиві.

    462

    Сума елементів

    Дізнайтеся більше про сценарії оболонки

    Висновок

    Ми всі фанати знаємо, що сценарій оболонки дуже корисний для підвищення продуктивності роботи, а також економії часу. Отже, у цій статті ми розглянули 30 дуже корисних і найбільш шахрайських прикладів сценаріїв оболонки . Ми сподіваємося, що цей повний посібник із прикладів сценаріїв оболонки допоможе вам зрозуміти все про сценарії оболонки.



    : якщо каталог порожній, цей рядок друкує повідомлення про використання з назвою сценарію (

    Для всіх дистрибутивів Linux сценарій оболонки — це як чарівна паличка, яка автоматизує процес, економить час користувачів і підвищує продуктивність. У цьому навчальному посібнику зі створення сценаріїв ви познайомитеся з 25 плюс прикладами сценаріїв.

    Але перш ніж ми перейдемо до теми сценарій оболонки приклади, давайте розберемося зі сценарієм оболонки та реальними випадками використання сценаріїв оболонки.

    Що таке Shell Script?

    Ну, оболонка - це a CLI ( інтерпретатор командного рядка ), який запускається в текстовому вікні, де користувачі можуть керувати та виконувати команди оболонки. З іншого боку, процес написання набору команд для виконання в системі Linux. Файл, який містить такі інструкції, називається сценарієм bash.

    Використання сценаріїв оболонки

    Нижче наведено деякі поширені способи використання сценарію оболонки:

    • Автоматизація завдань – Його можна використовувати для автоматизації повторюваних завдань, таких як звичайне резервне копіювання та завдання встановлення програмного забезпечення.
    • Налаштування – Можна використовувати сценарії оболонки, щоб створити середовище командного рядка та легко виконувати завдання відповідно до потреб.
    • Керування файлами – Сценарії оболонки також можна використовувати для керування та маніпулювання файлами та каталогами, наприклад для переміщення, копіювання, перейменування або видалення файлів.

    Приклади сценаріїв оболонки в Linux

    1) Що означає символ (#!) на початку сценарію оболонки?

    The шибання (#!) на початку сценарію вказує інтерпретатор, який слід використовувати для виконання сценарію. Він повідомляє системі, яка оболонка чи інтерпретатор має інтерпретувати команди сценарію.

    Наприклад: Припустимо, у нас є сценарій з назвою myscript.sh написаний в оболонці Bash:

    shebang

    shebang

    У цьому прикладі:

    • #!/bin/bash на початку сценарію вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
    • Команди echo використовуються для друку повідомлень на термінал.

    2) Як запустити сценарій оболонки з командного рядка?

    Щоб запустити сценарій оболонки з командного рядка, нам потрібно виконати такі дії:

    • Переконайтеся, що файл сценарію має дозволи на виконання за допомогою команда chmod :
    chmod +x myscript.sh>
    • Виконайте сценарій, використовуючи його назву файлу:
    ./myscript.sh>

    Тут треба замінити myscrtipt.sh з назвою вашого сценарію.

    3) Напишіть сценарій оболонки, який друкує techcodeview.com на терміналі.

    Створіть назву сценарію `myscript.sh` (ми використовуємо ` оскільки ` редактор, ви можете вибрати будь-який редактор)

    vim myscript.sh>

    #!/bin/bash
    # Цей сценарій друкує techcodeview.com на терміналі
    луна techcodeview.com

    надруковане ім'я

    надруковане ім'я

    Ми робимо наш сценарій виконуваним за допомогою `chmod +x`, потім виконуємо за допомогою `./myscipt.sh` і отримуємо бажаний результат techcodeview.com.

    4) Поясніть призначення команди echo в сценаріях оболонки.

    The команда echo використовується для відображення тексту або змінних на терміналі. Він зазвичай використовується для друку повідомлень, значень змінних і генерування вихідних даних програми.

    434

    команда echo

    У цьому прикладі ми виконали `echo` на терміналі безпосередньо, оскільки він працює так само в сценарії оболонки.

    5) Як ви можете призначити значення змінній у сценарії оболонки?

    Змінним присвоюються значення за допомогою оператора присвоювання =.

    Наприклад:

    #!/bin/bash
    # Присвоєння значення змінній
    ім'я=Джаєш
    вік=21
    echo $name $age

    Пояснення:

    • Змінній name присвоєно значення Jayesh.
    • Змінній віку присвоєно значення 21.
    • echo використовується для друку, а `$name` `$age` використовується для виклику значення, що зберігається в змінних.

    435

    6) Напишіть сценарій оболонки, який приймає ім’я користувача як вхідні дані та вітає його.

    Створіть назву сценарію `example.sh`.

    #!/bin/bash
    # Запитайте в користувача ім'я
    echo Як тебе звуть?
    прочитати назву
    # Привітайте користувача
    echo Привіт, $name! Приємно познайомитись.

    Пояснення:

    • #!/bin/bash: це рядок shebang. Він повідомляє системі використовувати інтерпретатор Bash для виконання сценарію.
    • # Запитайте в користувача ім'я: це коментар. Він надає контекст про майбутній код. Коментарі ігноруються перекладачем.
    • echo Як вас звати?: Команда echo використовується для відображення тексту в подвійних лапках на терміналі.
    • read name: команда read очікує, поки користувач введе текст, і зберігає його в імені змінної.
    • echo Привіт, $name! Приємно познайомитися.: цей рядок використовує команду echo для друку вітального повідомлення, яке містить значення змінної name, яке було зібрано з введених користувачем даних.

    436

    7) Як додати коментарі до сценарію оболонки?

    Коментарі в сценаріях оболонки використовуються для надання пояснень або контексту до коду. Вони ігноруються перекладачем і призначені лише для людей, які читають сценарій. Ви можете додавати коментарі за допомогою символу #.

    #!/bin/bash
    # Це коментар, що пояснює мету сценарію
    відлуння gfg

    8) Створіть сценарій оболонки, який перевіряє, чи існує файл у поточному каталозі.

    Ось сценарій, який перевіряє, чи існує файл під назвою example.txt у поточному каталозі:

    #!/bin/bash
    file=example.txt
    # Перевірте, чи файл існує
    if [ -e $file ]; потім
    echo Файл існує: $file
    інше
    echo Файл не знайдено: $file
    бути

    Пояснення:

    1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
    2. file=example.txt: цей рядок визначає файл змінної та присвоює йому значення example.txt. Ви можете замінити це назвою файлу, який потрібно перевірити.
    3. if [ -e $file ]; then: Цей рядок починає оператор if. Умова [ -e $file ] перевіряє, чи існує файл, визначений значенням змінної file. Прапор -e використовується для перевірки існування файлу.
    4. echo Файл існує: $file: якщо умова вірна (тобто файл існує), цей рядок друкує повідомлення про те, що файл існує, разом із назвою файлу.
    5. else: якщо умова хибна (тобто файл не існує), сценарій виконує код у гілці else.
    6. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено, разом із назвою файлу.
    7. fi: цей рядок позначає кінець оператора if.
    Пошук файлу

    Пошук файлу

    9) Яка різниця між одинарними лапками (‘) і подвійними лапками () у сценаріях оболонки?

    Одинарні лапки (‘) і подвійні лапки () використовуються для включення рядків у сценарії оболонки, але вони мають різну поведінку:

    • Одинарні лапки: усе, що знаходиться в одинарних лапках, розглядається як літеральний рядок. Імена змінних і більшість спеціальних символів не розгортаються.
    • Подвійні лапки: змінні та певні спеціальні символи в подвійних лапках розгортаються. Вміст підлягає підстановці змінних і підстановці команд.

    #!/bin/bash

    abcd=Привіт
    echo ‘$abcd’ # Вихід: $abcd
    echo $abcd # Вихід: Привіт

    10) Як ви можете використовувати аргументи командного рядка в сценарії оболонки?

    Аргументи командного рядка це значення, які надаються сценарію під час його виконання. До них можна отримати доступ у сценарії за допомогою спеціальних змінних, таких як $1, $2 тощо, де $1 представляє перший аргумент, $2 представляє другий аргумент і так далі.

    Наприклад: Якщо ім'я нашого сценарію в `example.sh`

    #!/bin/bash

    echo Назва сценарію: $0
    echo Перший аргумент: $1
    echo Другий аргумент: $2

    Якщо ми запустимо сценарій із `.example.sh hello_1 hello_2`, він виведе:

    аргументи cli

    аргументи cli

    11) Як ви використовуєте цикл for для перебору списку значень?

    Створіть назву сценарію `example.sh`.

    #!/bin/bash

    фрукти=(яблуко банан вишня фінік)
    для фруктів у ${fruits[@]}; робити
    echo Поточний фрукт: $fruit
    зроблено

    Пояснення:

    Рядок `fruits=` створює масив під назвою fruits із чотирьох елементів: яблуко, банан, вишня та фінік.

    • для фруктів у ${fruits[@]}; do: Цей рядок починає цикл for. Ось що означає кожна частина:
    • for fruit: Це оголошує змінну циклу під назвою fruit. У кожній ітерації циклу fruit буде зберігати значення поточного елемента з масиву fruits.
    • ${fruits[@]}: це розширення масиву, яке бере всі елементи з масиву fruits. Синтаксис ${…} гарантує, що кожен елемент розглядається як окремий елемент.
    • do: це ключове слово позначає початок тіла циклу.
    • echo Поточний плод: $fruit: усередині циклу цей рядок використовує команду echo для відображення поточного значення змінної циклу fruit. Він друкує повідомлення на кшталт Current fruit: apple для кожного фрукта в масиві.
    • done: це ключове слово позначає кінець тіла циклу. Він повідомляє сценарію, що цикл завершено.
    для циклу

    для циклу

    12) Напишіть сценарій оболонки, який обчислює суму цілих чисел від 1 до N за допомогою циклу.

    Створіть назву сценарію `example.sh`.

    #!/bin/bash

    echo Введіть число (N):
    читати Н
    сума=0
    for (( i=1; i<=$N; i++ )); робити
    сума=$((сума + i))
    зроблено
    echo Сума цілих чисел від 1 до $N: $sum

    Пояснення:
    Сценарій починається з запиту на введення числа (N) за допомогою read. Це число визначить, скільки разів виконується цикл.

    1. Змінна sum ініціалізується рівним 0. Ця змінна відстежуватиме суму цілих чисел.
    2. Цикл for починається з for (( i=1; i<=$N; i++ )). Ця структура циклу використовується для повторення набору дій певну кількість разів, у цьому випадку від 1 до значення N.
    3. Усередині циклу відбуваються такі речі:
      • i=1 встановлює для змінної циклу i значення 1 на початку кожної ітерації.
      • Умова циклу i<=$N перевіряє, чи i все ще менше або дорівнює заданому числу N.
      • Якщо умова виконується, виконується тіло циклу.
      • sum=$((sum + i)) обчислює нове значення sum, додаючи до нього поточне значення i. Це додає цілі числа від 1 до поточного значення i.
    4. Після кожної ітерації i++ збільшує значення i на 1.
    5. Цикл продовжує працювати, доки умова i<=$N не стане помилковою (коли i стане більшим за N).
    6. Після завершення циклу сценарій відображає суму цілих чисел від 1 до введеного числа N.

    439

    13) Створіть сценарій, який шукатиме певне слово у файлі та підраховуватиме його випадки.

    Створіть назву сценарію `word_count.sh`

    #!/bin/bash

    echo Введіть слово для пошуку:
    читати target_word
    echo Введіть назву файлу:
    прочитати назву файлу
    count=$(grep -o -w $target_word $filename | wc -l)
    echo Слово «$target_word» з’являється $count разів у «$filename».

    Пояснення:

    • echo Введіть слово для пошуку:: Цей рядок відображає повідомлення з проханням до користувача ввести слово, яке він хоче знайти у файлі.
    • read target_word: цей рядок читає введені користувачем дані та зберігає їх у змінній під назвою target_word.
    • echo Введіть ім'я файлу:: Цей рядок відображає повідомлення з проханням до користувача ввести назву файлу, у якому він бажає виконати пошук.
    • read filename: Цей рядок читає введені користувачем дані та зберігає їх у змінній з назвою filename.
    • count=$(grep -o -w $target_word $filename | wc -l): цей рядок виконує основну роботу сценарію. Давайте розберемо це далі:
      • grep -o -w $target_word $filename: Ця частина команди шукає входження target_word у вказаному імені файлу. Параметри -o і -w гарантують, що враховуються лише цілі збіги слів.
      • |: Це канал, який приймає вихідні дані попередньої команди та надсилає їх як вхідні дані для наступної команди.
      • wc -l: ця частина команди використовує команду wc для підрахунку кількості рядків у вхідних даних. Параметр -l спеціально підраховує рядки.
      • Уся команда обчислює кількість входжень target_word у файлі та призначає цю кількість змінній coun

    441

    14) Поясніть різницю між стандартним виведенням (stdout) і стандартною помилкою (stderr).

    Основна відмінність між стандартним виведенням (stdout) і стандартною помилкою (stderr) полягає в наступному:

    • Стандартний вихід (stdout): Це стандартний вихідний потік, куди надходить звичайний вихід команди. Він відображається на терміналі за замовчуванням. Ви можете перенаправити його до файлу за допомогою>.
    • Стандартна помилка (stderr): Це вихідний потік для повідомлень про помилки та попереджень. Він також відображається на терміналі за замовчуванням. Ви можете перенаправити його у файл за допомогою 2>.

    15) Поясніть концепцію умовних операторів у сценаріях оболонки.

    Умовні оператори в сценаріях оболонки дозволяють нам приймати рішення та контролювати потік нашого сценарію на основі певних умов. Вони дозволяють нашому сценарію виконувати різні набори команд залежно від того, чи є конкретна умова істинною чи хибною. Основними умовними операторами в сценаріях оболонки є оператор if, оператор elif (необов’язковий) і оператор else (необов’язковий).

    Ось базова структура умовного оператора в сценаріях оболонки:

    якщо [умова]; потім
    # Команди для виконання, якщо умова виконується
    elif [інша_умова]; потім
    # Команди для виконання, якщо another_condition є істинним (необов’язково)
    інше
    # Команди для виконання, якщо жодна з умов не виконується (необов’язково)
    бути

    Пояснення:

    • [умова] = Команда, яка оцінює умову та повертає істинний (0) або хибний (ненульовий) статус виходу.
    • then = Це ключове слово, яке вказує, що наступні за ним команди будуть виконані, якщо умова оцінюється як істина.
    • elif = (скорочення від else if) Це розділ, який дозволяє нам вказати додаткові умови для перевірки.
    • else = це розділ, який містить команди, які будуть виконані, якщо жодна з умов не виконується.
    • fi = Це ключове слово, яке позначає кінець умовного блоку.

    16) Як ви читаєте рядки з файлу в сценарії оболонки?

    до читати рядки з файлу в сценарії оболонки, ми можемо використовувати різні методи, але один з поширених підходів полягає у використанні циклу while у поєднанні з командою read. Ось як ми можемо це зробити:

    #!/bin/bash
    file=/home/jayeshkumar/jayesh.txt
    # Перевірте, чи файл існує
    if [ -e $file ]; потім
    while IFS= читання рядка -r; робити
    echo Читання рядка: $line
    # Додайте тут свою логіку обробки
    виконано <$файл
    інше
    echo Файл не знайдено: $file
    бути

    Пояснення:

    1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
    2. file=/home/jayeshkumar/jayesh.txt: цей рядок визначає файл змінної та призначає повний шлях до файлу jayesh.txt у каталозі /home/jayeshkumar. Змініть цей шлях, щоб відповідати фактичному шляху до файлу, який ви хочете прочитати.
    3. if [ -e $file ]; then: Цей рядок починає оператор if. Він перевіряє, чи існує файл, визначений змінною $file. Прапор -e перевіряє наявність файлу.
    4. while IFS= читання рядка -r; do: цей рядок ініціює цикл while, який читає рядки з файлу.
      • IFS=: IFS (внутрішній роздільник полів) має порожнє значення, щоб зберегти пробіли на початку та в кінці.
      • read -r рядок: це зчитує поточний рядок із файлу та зберігає його у рядку змінної.
    5. echo Прочитаний рядок: $line: цей рядок друкує вміст рядка, який було прочитано з файлу. Змінна $line містить вміст поточного рядка.
    6. # Додайте свою логіку обробки тут: це коментар-заповнювач, де ви можете додати свою власну логіку для обробки кожного рядка. Наприклад, ви можете проаналізувати рядок, отримати інформацію або виконати певні дії на основі вмісту.
    7. done <$file: це позначає кінець циклу while. <$file перенаправляє вміст файлу, який буде прочитано циклом.
    8. else: якщо файл не існує (умова оператора if невірна), сценарій виконує код у гілці else.
    9. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено.
    10. fi: цей рядок позначає кінець оператора if.
    читання файлу

    читання файлу

    Тут ми використали ` pwd `, щоб отримати шлях до поточного каталогу.

    17) Напишіть функцію в сценарії оболонки, яка обчислює факториал заданого числа.

    Ось такий сценарійобчислити факторіалзаданого числа.

    #!/bin/bash
    # Визначте функцію для обчислення факторіалу
    calculate_factory() {
    num=$1
    факт=1
    for ((i=1; i<=num; i++)); робити
    факт=$((факт * i))
    зроблено
    луна $факт
    }
    # Запропонувати користувачеві ввести число
    echo Введіть число:
    читати input_num
    # Викличте функцію calculate_factorial із введеним числом
    factorial_result=$(calculate_factorial $input_num)
    # Відобразити факторний результат
    echo Факторіал $input_num: $factorial_result

    Пояснення:

    1. Сценарій починається з рядка shebang #!/bin/bash для визначення інтерпретатора.
    2. Calculate_factorial() визначається як функція. Він приймає один аргумент, num, який є числом, факторіал якого потрібно обчислити.
    3. Усередині функції факт ініціалізується рівним 1. Ця змінна зберігатиме факторний результат.
    4. Цикл for повторює від 1 до заданого числа (num). У кожній ітерації він множить поточне значення факту на індекс циклу i.
    5. Після завершення циклу змінна fact містить обчислений факториал.
    6. Сценарій пропонує користувачеві ввести число за допомогою read.
    7. Функція calculate_factorial викликається з числом, наданим користувачем, і результат зберігається в змінній factorial_result.
    8. Нарешті сценарій відображає обчислений факторний результат.
    Факторіал

    Факторіал

    18) Як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки?

    У сценарії оболонки ви можете обробляти такі сигнали, як Ctrl+C (також відомий як SIGINT), використовуючи команду trap. Ctrl+C генерує сигнал SIGINT, коли користувач натискає його, щоб перервати запущений сценарій або програму. Використовуючи команду trap, ви можете вказати дії, які мають бути виконані при отриманні певного сигналу. Ось як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки:

    #!/bin/bash
    прибирати() {
    echo Сценарій перервано. Виконання очищення…
    # Додайте тут свої дії з очищення
    вихід 1
    }
    # Налаштувати перехоплення для виклику функції очищення, коли отримано Ctrl+C (SIGINT).
    очищення пастки SIGINT
    # Решта вашого сценарію
    луна Бігає…
    спати 10
    echo Готово.

    Обробка сигналів важлива для того, щоб зробити сценарії надійними та забезпечити ефективну обробку несподіваних переривань. Ви можете налаштувати функцію очищення відповідно до ваших конкретних потреб, як-от закриття файлів, зупинка процесів або запис інформації перед виходом зі сценарію.

    Пояснення:

    1. #!/bin/bash: цей рядок shebang визначає інтерпретатор, який буде використовуватися для виконання сценарію.
    2. cleanup() { … }: це визначає функцію під назвою cleanup. У цю функцію можна включити будь-які дії, які потрібно виконати, коли сценарій переривається, наприклад закриття файлів, звільнення ресурсів або виконання інших завдань очищення.
    3. trap cleanup SIGINT: Команда trap використовується для налаштування обробника сигналів. У цьому випадку це вказує, що коли отримано сигнал SIGINT (Ctrl+C), слід виконати функцію очищення.
    4. echo Виконується…, sleep 10, echo Finished.: Це лише приклади команд для імітації виконання сценарію.

    446

    19) Створіть сценарій, який перевіряє та видаляє повторювані рядки в текстовому файлі.

    Ось наш сценарій Linux, у якому ми будемо видаляти повторювані рядки з текстового файлу.

    #!/bin/bash
    input_file=input.txt
    вихідний_файл=вихідний.txt
    сортувати $input_file | uniq> $output_file
    echo Повторювані рядки успішно видалено.

    Пояснення:

    1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
    2. Змінна input_file встановлюється на ім’я вхідного файлу, що містить повторювані рядки (змініть це на фактичне ім’я вхідного файлу).
    3. Змінна output_file встановлюється на назву вихідного файлу, з якого буде видалено дублікати (змініть це на бажане ім’я вихідного файлу).
    4. Сценарій використовує команду sort для сортування рядків у вхідному файлі. Сортування рядків гарантує, що повторювані рядки групуються разом.
    5. Потім відсортовані рядки передаються через команду uniq, яка видаляє послідовні повторювані рядки. Вихідні дані цього процесу перенаправляються у вихідний файл.
    6. Після видалення дублікатів сценарій друкує повідомлення про успіх.
    видалення повторюваних рядків

    видалення повторюваних рядків

    Тут ми використовуємо ` кішка `, щоб відобразити текст у текстовому файлі.

    20) Напишіть сценарій, який генерує безпечний випадковий пароль.

    Ось наш скрипт для створення безпечного випадкового пароля.

    #!/bin/bash
    # Функція генерації випадкового пароля
    generate_password() {
    tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
    }
    # Виклик функції та збереження згенерованого пароля
    пароль=$(згенерувати_пароль)
    echo Згенерований пароль: $password

    Примітка: користувач може відповідно змінити довжину пароля, замінивши число `12`.

    Пояснення:

    1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
    2. Функція generate_password призначена для створення випадкового пароля. Ось як це працює:
      • tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
      • fold -w 12 розбиває відфільтровані випадкові дані на рядки по 12 символів у кожному.
      • head -n 1 вибирає перший рядок, фактично надаючи нам випадкову послідовність символів довжиною 12.
    3. Змінній password присвоюється результат виклику функції generate_password.
    4. Нарешті, згенерований пароль відображається за допомогою луни.

    448

    21) Напишіть сценарій оболонки, який обчислює загальний розмір усіх файлів у каталозі.

    Ось сценарій оболонки для обчислення загального розміру всіх файлів у каталозі.

    #!/bin/bash
    каталог=/шлях/до/вашого/каталогу
    total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
    echo Загальний розмір файлів у $directory: $total_size

    Пояснення:

    1. Сценарій починається з #!/bin/bash shebang, що вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
    2. Змінна каталогу встановлюється на шлях до каталогу, для якого потрібно обчислити загальний розмір файлу. Замініть /path/to/your/directory справжнім шляхом.
    3. Команда du використовується для оцінки використання файлового простору. Використовуються такі варіанти:
      • -c: створити загальну суму.
      • -s: відображати лише загальний розмір зазначеного каталогу.
      • -h: друкувати розміри в зручному для читання форматі (наприклад, КБ, МБ, ГБ).
    4. Вихід du передається до grep total, щоб відфільтрувати рядок, який містить загальний розмір.
    5. awk ‘{print $1}’ використовується для виділення першого поля (загального розміру) з рядка.
    6. Розрахований загальний розмір зберігається в змінній total_size.
    7. Нарешті, сценарій відображає загальний розмір за допомогою echo.
    Загальний розмір файлів

    Загальний розмір файлів

    Тут ми використали ` pwd `, щоб побачити поточний шлях до каталогу.

    22) Поясніть різницю між операторами if і elif у сценаріях оболонки.

    Особливість `if`Staiftement Заява `elif`
    призначення Поясніть різницю між операторами if і elif у сценаріях оболонки. Надає альтернативні умови для перевірки, коли початкова умова if є хибною.
    використання Використовується для початкового стану. Використовується після початкової умови if для перевірки додаткових умов.
    кількість блоків Може мати лише один блок if. Може мати декілька блоків elif, але лише один блок else (необов’язково).
    виконання Виконує блок коду, пов’язаний із оператором if, якщо умова виконується. Якщо умова false, блок else (якщо присутній) виконується (необов’язково). Перевіряє кожну умову elif по порядку. Якщо одна з умов elif виконується, виконується відповідний блок коду, і сценарій завершує роботу з усього умовного блоку. Якщо жодна з умов elif не виконується, виконується блок else (якщо він присутній).
    Вкладені структури Може бути вкладено в інші блоки if, elif або else. Не можна вкладати в інший блок elif, але можна використовувати всередині блоку if або else.

    Розберемося в цьому на прикладі.

    #!/bin/bash
    число=5
    if [$number -gt 10]; потім
    echo $number більше 10
    інше
    echo $number не більше 10
    бути
    луна ——–
    if [$number -gt 10]; потім
    echo $number більше 10
    elif [$number -eq 10]; потім
    echo $number дорівнює 10
    інше
    echo $number менше 10
    бути

    Пояснення:

    У цьому прикладі перший блок if перевіряє, чи число більше 10. Якщо ні, він друкує повідомлення про те, що число не більше 10. Другий блок із операторами elif перевіряє кілька умов послідовно, доки одна з них не стане істинною. У цьому випадку, оскільки значення числа дорівнює 5, результатом буде:

    if_elif різниця

    if_elif різниця

    23) Як ви використовуєте цикл while для багаторазового виконання команд?

    Цикл while використовується в сценаріях оболонки для багаторазового виконання набору команд, доки виконується певна умова. Цикл продовжує виконувати команди, поки умова не стане помилковою.

    Ось основний синтаксис циклу while:

    while [умова]; робити
    # Команди для виконання
    зроблено

    Пояснення:

    1. Цикл `while` починається з ключового слова `while`, після якого йде умова, укладена в квадратні дужки `[ ]`.
    2. Тіло циклу, яке містить команди для виконання, укладено в ключові слова `do` і `done`.
    3. Цикл спочатку перевіряє умову. Якщо умова виконується, виконуються команди в тілі циклу. Після виконання тіла циклу умова перевіряється знову, і процес повторюється, доки умова не стане помилковою.

    приклад: Якщо ми хочемо надрукувати числа від 1 до 5

    #!/bin/bash
    лічильник=1
    while [$counter -le 5]; робити
    echo Номер: $лічильник
    лічильник=$((лічильник + 1))
    зроблено

    Пояснення:

    • Змінна лічильника має значення 1.
    • Цикл while перевіряє, чи значення лічильника менше або дорівнює 5. Поки ця умова виконується, цикл продовжує виконуватися.
    • Усередині циклу поточне значення лічильника друкується за допомогою echo.
    • Лічильник збільшується на 1 за допомогою виразу $((лічильник + 1)).
    цикл while

    цикл while

    24) Створіть сценарій оболонки, який знаходить і перераховує всі порожні файли в каталозі.

    Сценарій оболонки, який можна використовувати для пошуку та списку всіх порожніх файлів у каталозі за допомогою команд `find` і `stat`:

    #!/bin/bash
    каталог=$1″
    if [ -z $каталог ]; потім
    echo Використання: $0
    вихід 1
    бути

    якщо [! -d $каталог]; потім
    echo Помилка: «$directory» не є дійсним каталогом.
    вихід 1
    бути
    echo Порожні файли в $directory:
    find $directory -type f -empty

    Пояснення:

    1. ` #!/bin/bash `: Це називається shebang, і воно повідомляє операційній системі використовувати оболонку Bash для інтерпретації та виконання сценарію.
    2. ` каталог=$1″ `: цей рядок призначає перший аргумент командного рядка (позначений $1) змінній ` каталог `.
    3. ` if [ -z $каталог ]; потім `: цей рядок починає оператор if, який перевіряє, чи ` каталог ` змінна порожня (-z перевіряє порожній рядок).
    4. ` echo Використання: $0 `: якщо каталог порожній, цей рядок друкує повідомлення про використання, де ` $0 ` представляє назву сценарію.
    5. ` вихід 1 `: цей рядок завершує роботу сценарію з кодом виходу ` 1 `, що вказує на помилку.
    6. ` бути `: цей рядок позначає кінець ` якщо ` заява.
    7. ` якщо [! -d $каталог]; потім `: запускається інший оператор if, щоб перевірити, чи існує наданий каталог (` ` тести для каталогу).
    8. ` echo Помилка: «$directory» не є дійсним каталогом. `: якщо наданий каталог не існує, цей рядок друкує повідомлення про помилку.
    9. ` вихід 1 `: вихід зі сценарію з кодом виходу ` 1 `.
    10. ` бути `: позначає кінець другого ` якщо` заява.
    11. ` echo Порожні файли в $directory: `: якщо наразі все вірно, цей рядок друкує повідомлення про те, що сценарій перерахує порожні файли у вказаному каталозі.
    12. ` find $directory -type f -empty `: у цьому рядку використовується ` знайти ` команда пошуку порожніх файлів (` - порожній `) типу звичайних файлів (` - тип f `) у вказаному каталозі. Потім він перераховує ці порожні файли.
    Пошук порожніх файлів

    Пошук порожніх файлів

    Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях поточного каталогу home/jayeshkumar/

    25) Яка мета команди read у сценаріях оболонки?

    Команда read у сценаріях оболонки дозволяє сценарію запитувати у вас інформацію. Це як коли комп’ютер задає вам запитання й чекає на відповідь. Це корисно для сценаріїв, які вимагають, щоб ви щось ввели, або коли сценарію потрібно працювати з інформацією з файлів. Команда read допомагає сценарію зупинятися й чекати, що ви введете, а потім він може використовувати цю інформацію для виконання інших завдань у сценарії.

    Синтаксис команди read:

    read variable_name>

    приклад : якщо ми хочемо взяти ім’я як вхідні дані від користувача, щоб надрукувати його.

    #!/bin/bash
    echo Будь ласка, введіть своє ім'я:
    прочитати назву
    echo Привіт, $name!

    453

    прочитати ім

    Таким чином, команда read використовується для захоплення введених користувачем даних або даних із файлів у сценаріях оболонки, що робить сценарії більш інтерактивними та універсальними.

    26) Напишіть сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

    Ось сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

    #!/bin/bash
    каталог=$1″
    if [ -z $каталог ]; потім
    echo Використання: $0
    вихід 1
    бути

    якщо [! -d $каталог]; потім

    echo Помилка: «$directory» не є дійсним каталогом.
    вихід 1
    бути

    cd $каталог || вихід 1

    для файлу в *; робити
    if [ -f $file ]; потім
    newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
    [ $file != $newname ] && mv $file $newname
    бути
    зроблено

    Пояснення:

    1. #!/bin/bash : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. каталог=$1″ : цей рядок призначає перший аргумент командного рядка каталогу змінних.
    3. if [ -z $каталог ]; потім : цей рядок перевіряє, чи порожня змінна каталогу (під час виконання сценарію не надається аргумент).
    4. echo Використання: $0 : якщо каталог порожній, цей рядок друкує повідомлення про використання з назвою сценарію ($0).
    5. вихід 1 : цей рядок завершує роботу сценарію з кодом виходу 1, що вказує на помилку.
    6. f i: Це означає кінець першого оператора if.
    7. якщо [! -d $каталог]; потім : цей рядок перевіряє, чи не існує вказаного каталогу (-d перевіряє наявність каталогу).
    8. echo Помилка: «$directory» не є дійсним каталогом. : якщо вказаний каталог не існує, цей рядок друкує повідомлення про помилку.
    9. вихід 1 : вихід зі сценарію з кодом виходу 1.
    10. бути : Позначає кінець другого оператора if.
    11. cd $каталог || вихід 1 : змінює поточний робочий каталог на вказаний каталог. Якщо змінити каталог не вдалося (наприклад, каталог не існує), сценарій завершує роботу з кодом помилки.
    12. для файлу в *; зробити: я для файлу в *; зробити: ініціює цикл, який перебирає всі елементи в поточному каталозі (* відповідає всім назвам файлів).
    13. if [ -f $file ]; потім : перевіряє, чи поточний елемент ітерації циклу є звичайним файлом (-f перевіряє звичайний файл).
    14. newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : перетворює поточне ім’я файлу ($file) на нижній регістр за допомогою команди tr і зберігає результат у змінній newname.
    15. [ $file != $newname ] && mv $file $newname : Порівнює оригінальну назву файлу з новою назвою файлу, написаною в нижньому регістрі. Якщо вони різні, він перейменовує файл за допомогою команди mv.
    16. бути : Позначає кінець внутрішнього оператора if.
    17. зроблено : Позначає кінець циклу.

    454

    Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях до поточного каталогу home/jayeshkumar/test

    27) Як можна використовувати арифметичні операції в сценарії оболонки?

    Арифметичні операції можна виконувати в сценарії оболонки за допомогою різних вбудованих методів. Оболонка надає механізми для простих арифметичних обчислень за допомогою арифметичного розширення, наприклад:

    1. Арифметичне розширення ($((…)))
    2. Використання команди expr
    3. Використання команди let

    Ось наш сценарій Shell, що пояснює всі три методи арифметичних операцій.

    #!/bin/bash
    num1=10
    num2=5

    #Арифметичне розширення ($((…)))

    результат=$((num1 + num2))
    echo Сума: $результат

    #Використання команди expr

    сума=$(вираз $num1 + $num2)
    echo Сума: $сума

    #Використання команди let

    нехай сума = num1 + num2
    echo Сума: $сума

    Пояснення:

    1. `#!/bin/bash` : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. `num1=10` і ` num2=5` : ці рядки присвоюють значення 10 і 5 змінним ` num1 ` і ` num2 ` відповідно.
    3. `#Арифметичне розширення ($((…)))` : це коментар, що вказує на початок розділу, який демонструє арифметичне розширення.
    4. `результат=$((num1 + num2))` : цей рядок використовує арифметичне розширення для обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` результат ` змінна.
    5. `echo Sum: $result` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` результат ` змінна.
    6. `#Використання команди expr` : це коментар, що вказує на початок розділу, який демонструє використання ` вираз ` команда арифметичних операцій.
    7. `sum=$(expr $num1 + $num2)` : цей рядок використовує ` вираз ` команда обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` сума ` змінна. Зауважте, що ` вираз Команда ` вимагає пробілів навколо операторів.
    8. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
    9. `#Використання команди let` : це коментар, що вказує на початок розділу, який демонструє використання ` дозволяти ` команда арифметичних операцій.
    10. `нехай сума = num1 + num2″` : цей рядок використовує ` дозволяти ` команда обчислення суми ` num1 ` і ` num2 ` і призначає результат ` сума ` змінна. ` дозволяти Команда ` не вимагає пробілів навколо операторів.
    11. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
    арифметика

    арифметика

    28) Створіть сценарій, який перевіряє, чи доступний хост мережі.

    Ось простий сценарій оболонки, який використовує команду ping, щоб перевірити, чи доступний хост мережі:

    #!/bin/bash
    хост=$1″
    якщо [ -z $хост]; потім
    echo Використання: $0
    вихід 1
    бути
    ping -c 4 $хост

    якщо [ $? -екв 0]; потім
    echo $host доступний.
    інше
    echo $host недоступний.
    бути

    Пояснення:

    1. Він приймає ім’я хоста або IP-адресу як аргумент і перевіряє, чи надано аргумент.
    2. Якщо аргумент не вказано, відображається повідомлення про використання та завершується робота.
    3. Він використовує команду ping з опцією -c 4 для надсилання чотирьох ехо-запитів ICMP на вказаний хост.
    4. Після виконання команди ping перевіряється статус виходу ($?). Якщо статус виходу дорівнює 0, це означає, що хост доступний і сценарій друкує повідомлення про успіх. В іншому випадку він друкує повідомлення про помилку.

    456

    Примітка : нам потрібно надати ім’я хоста як аргумент під час виконання сценарію. Тут ми використали google.com

    29) Напишіть сценарій оболонки, щоб знайти найбільший елемент у масиві:

    Ось сценарій оболонки для пошуку найбільшого елемента в масиві.

    #!/bin/bash
    # Оголошення масиву
    масив=(3 56 24 89 67)

    # Ініціалізація змінної для збереження максимального значення, починаючи з першого елемента

    макс=${масив[0]}

    # Ітерація по масиву

    для числа в ${array[@]}; робити

    # Порівняти кожен елемент із поточним максимумом

    if ((num> max)); потім
    max=$num
    бути
    зроблено

    # Вивести максимальне значення

    echo Максимальний елемент у масиві: $max

    Пояснення:

    1. ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
    2. ` масив=(3 56 24 89 67) `: масив оголошується та ініціалізується значеннями.
    3. ` макс=${масив[0]} `: `max` ініціалізується першим елементом масиву.
    4. ` для числа в ${array[@]}; робити `: цикл `for` використовується для перебору елементів масиву.
    5. ` if ((num> max)); потім `: Оператор `if` перевіряє, чи поточний елемент `num` більший за поточний максимальний `max`.
    6. ` max=$num`: Якщо`num ` більше ніж `max`, `max` оновлюється значенням num.
    7. ` зроблено `: цикл `for` закрито.
    8. ` echo Максимальний елемент у масиві: $max `: нарешті сценарій друкує максимальне значення, знайдене в масиві.
    461

    найбільше число

    30) Напишіть скрипт для обчислення суми елементів у масиві.

    #!/bin/bash

    # Оголошення масиву

    масив=(1 65 22 19 94)

    # Ініціалізація змінної для збереження суми

    сума=0

    # Перебираємо масив і додаємо кожен елемент до суми

    для числа в ${array[@]}; робити
    am=$((am + am))
    зроблено

    # Вивести суму

    echo Сума елементів у масиві: $sum

    Пояснення:

    ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.

    ` масив=(1 65 22 19 94) `: масив оголошується та ініціалізується значеннями.

    ` сума=0 `:` сума ` ініціалізується нулем, щоб зберегти суму елементів.

    ` для числа в ${array[@]}; робити `: A ` для Цикл ` використовується для перебору елементів масиву.

    ` am=$((am + am)) `: усередині циклу кожен елемент ` на одному ` додається до ` сума ` змінна.

    ` зроблено `: ` для ` цикл закрито.

    `echo Сума елементів у масиві: $sum`: Нарешті, скрипт друкує суму всіх елементів у масиві.

    462

    Сума елементів

    Дізнайтеся більше про сценарії оболонки

    Висновок

    Ми всі фанати знаємо, що сценарій оболонки дуже корисний для підвищення продуктивності роботи, а також економії часу. Отже, у цій статті ми розглянули 30 дуже корисних і найбільш шахрайських прикладів сценаріїв оболонки . Ми сподіваємося, що цей повний посібник із прикладів сценаріїв оболонки допоможе вам зрозуміти все про сценарії оболонки.



    ).
  5. вихід 1 : цей рядок завершує роботу сценарію з кодом виходу 1, що вказує на помилку.
  6. f i: Це означає кінець першого оператора if.
  7. якщо [! -d $каталог]; потім : цей рядок перевіряє, чи не існує вказаного каталогу (-d перевіряє наявність каталогу).
  8. echo Помилка: «$directory» не є дійсним каталогом. : якщо вказаний каталог не існує, цей рядок друкує повідомлення про помилку.
  9. вихід 1 : вихід зі сценарію з кодом виходу 1.
  10. бути : Позначає кінець другого оператора if.
  11. cd $каталог || вихід 1 : змінює поточний робочий каталог на вказаний каталог. Якщо змінити каталог не вдалося (наприклад, каталог не існує), сценарій завершує роботу з кодом помилки.
  12. для файлу в *; зробити: я для файлу в *; зробити: ініціює цикл, який перебирає всі елементи в поточному каталозі (* відповідає всім назвам файлів).
  13. if [ -f $file ]; потім : перевіряє, чи поточний елемент ітерації циклу є звичайним файлом (-f перевіряє звичайний файл).
  14. newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : перетворює поточне ім’я файлу ($file) на нижній регістр за допомогою команди tr і зберігає результат у змінній newname.
  15. [ $file != $newname ] && mv $file $newname : Порівнює оригінальну назву файлу з новою назвою файлу, написаною в нижньому регістрі. Якщо вони різні, він перейменовує файл за допомогою команди mv.
  16. бути : Позначає кінець внутрішнього оператора if.
  17. зроблено : Позначає кінець циклу.

454

Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях до поточного каталогу home/jayeshkumar/test

27) Як можна використовувати арифметичні операції в сценарії оболонки?

Арифметичні операції можна виконувати в сценарії оболонки за допомогою різних вбудованих методів. Оболонка надає механізми для простих арифметичних обчислень за допомогою арифметичного розширення, наприклад:

  1. Арифметичне розширення ($((…)))
  2. Використання команди expr
  3. Використання команди let

Ось наш сценарій Shell, що пояснює всі три методи арифметичних операцій.

#!/bin/bash
num1=10
num2=5

#Арифметичне розширення ($((…)))

результат=$((num1 + num2))
echo Сума: $результат

#Використання команди expr

сума=$(вираз $num1 + $num2)
echo Сума: $сума

#Використання команди let

нехай сума = num1 + num2
echo Сума: $сума

Пояснення:

  1. `#!/bin/bash` : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. `num1=10` і ` num2=5` : ці рядки присвоюють значення 10 і 5 змінним ` num1 ` і ` num2 ` відповідно.
  3. `#Арифметичне розширення ($((…)))` : це коментар, що вказує на початок розділу, який демонструє арифметичне розширення.
  4. `результат=$((num1 + num2))` : цей рядок використовує арифметичне розширення для обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` результат ` змінна.
  5. `echo Sum: $result` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` результат ` змінна.
  6. `#Використання команди expr` : це коментар, що вказує на початок розділу, який демонструє використання ` вираз ` команда арифметичних операцій.
  7. `sum=$(expr $num1 + $num2)` : цей рядок використовує ` вираз ` команда обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` сума ` змінна. Зауважте, що ` вираз Команда ` вимагає пробілів навколо операторів.
  8. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
  9. `#Використання команди let` : це коментар, що вказує на початок розділу, який демонструє використання ` дозволяти ` команда арифметичних операцій.
  10. `нехай сума = num1 + num2″` : цей рядок використовує ` дозволяти ` команда обчислення суми ` num1 ` і ` num2 ` і призначає результат ` сума ` змінна. ` дозволяти Команда ` не вимагає пробілів навколо операторів.
  11. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
арифметика

арифметика

28) Створіть сценарій, який перевіряє, чи доступний хост мережі.

Ось простий сценарій оболонки, який використовує команду ping, щоб перевірити, чи доступний хост мережі:

#!/bin/bash
хост=″
якщо [ -z $хост]; потім
echo Використання:

Для всіх дистрибутивів Linux сценарій оболонки — це як чарівна паличка, яка автоматизує процес, економить час користувачів і підвищує продуктивність. У цьому навчальному посібнику зі створення сценаріїв ви познайомитеся з 25 плюс прикладами сценаріїв.

Але перш ніж ми перейдемо до теми сценарій оболонки приклади, давайте розберемося зі сценарієм оболонки та реальними випадками використання сценаріїв оболонки.

Що таке Shell Script?

Ну, оболонка - це a CLI ( інтерпретатор командного рядка ), який запускається в текстовому вікні, де користувачі можуть керувати та виконувати команди оболонки. З іншого боку, процес написання набору команд для виконання в системі Linux. Файл, який містить такі інструкції, називається сценарієм bash.

Використання сценаріїв оболонки

Нижче наведено деякі поширені способи використання сценарію оболонки:

  • Автоматизація завдань – Його можна використовувати для автоматизації повторюваних завдань, таких як звичайне резервне копіювання та завдання встановлення програмного забезпечення.
  • Налаштування – Можна використовувати сценарії оболонки, щоб створити середовище командного рядка та легко виконувати завдання відповідно до потреб.
  • Керування файлами – Сценарії оболонки також можна використовувати для керування та маніпулювання файлами та каталогами, наприклад для переміщення, копіювання, перейменування або видалення файлів.

Приклади сценаріїв оболонки в Linux

1) Що означає символ (#!) на початку сценарію оболонки?

The шибання (#!) на початку сценарію вказує інтерпретатор, який слід використовувати для виконання сценарію. Він повідомляє системі, яка оболонка чи інтерпретатор має інтерпретувати команди сценарію.

Наприклад: Припустимо, у нас є сценарій з назвою myscript.sh написаний в оболонці Bash:

shebang

shebang

У цьому прикладі:

  • #!/bin/bash на початку сценарію вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
  • Команди echo використовуються для друку повідомлень на термінал.

2) Як запустити сценарій оболонки з командного рядка?

Щоб запустити сценарій оболонки з командного рядка, нам потрібно виконати такі дії:

  • Переконайтеся, що файл сценарію має дозволи на виконання за допомогою команда chmod :
chmod +x myscript.sh>
  • Виконайте сценарій, використовуючи його назву файлу:
./myscript.sh>

Тут треба замінити myscrtipt.sh з назвою вашого сценарію.

3) Напишіть сценарій оболонки, який друкує techcodeview.com на терміналі.

Створіть назву сценарію `myscript.sh` (ми використовуємо ` оскільки ` редактор, ви можете вибрати будь-який редактор)

vim myscript.sh>

#!/bin/bash
# Цей сценарій друкує techcodeview.com на терміналі
луна techcodeview.com

надруковане ім'я

надруковане ім'я

Ми робимо наш сценарій виконуваним за допомогою `chmod +x`, потім виконуємо за допомогою `./myscipt.sh` і отримуємо бажаний результат techcodeview.com.

4) Поясніть призначення команди echo в сценаріях оболонки.

The команда echo використовується для відображення тексту або змінних на терміналі. Він зазвичай використовується для друку повідомлень, значень змінних і генерування вихідних даних програми.

434

команда echo

У цьому прикладі ми виконали `echo` на терміналі безпосередньо, оскільки він працює так само в сценарії оболонки.

5) Як ви можете призначити значення змінній у сценарії оболонки?

Змінним присвоюються значення за допомогою оператора присвоювання =.

Наприклад:

#!/bin/bash
# Присвоєння значення змінній
ім'я=Джаєш
вік=21
echo $name $age

Пояснення:

  • Змінній name присвоєно значення Jayesh.
  • Змінній віку присвоєно значення 21.
  • echo використовується для друку, а `$name` `$age` використовується для виклику значення, що зберігається в змінних.

435

6) Напишіть сценарій оболонки, який приймає ім’я користувача як вхідні дані та вітає його.

Створіть назву сценарію `example.sh`.

#!/bin/bash
# Запитайте в користувача ім'я
echo Як тебе звуть?
прочитати назву
# Привітайте користувача
echo Привіт, $name! Приємно познайомитись.

Пояснення:

  • #!/bin/bash: це рядок shebang. Він повідомляє системі використовувати інтерпретатор Bash для виконання сценарію.
  • # Запитайте в користувача ім'я: це коментар. Він надає контекст про майбутній код. Коментарі ігноруються перекладачем.
  • echo Як вас звати?: Команда echo використовується для відображення тексту в подвійних лапках на терміналі.
  • read name: команда read очікує, поки користувач введе текст, і зберігає його в імені змінної.
  • echo Привіт, $name! Приємно познайомитися.: цей рядок використовує команду echo для друку вітального повідомлення, яке містить значення змінної name, яке було зібрано з введених користувачем даних.

436

7) Як додати коментарі до сценарію оболонки?

Коментарі в сценаріях оболонки використовуються для надання пояснень або контексту до коду. Вони ігноруються перекладачем і призначені лише для людей, які читають сценарій. Ви можете додавати коментарі за допомогою символу #.

#!/bin/bash
# Це коментар, що пояснює мету сценарію
відлуння gfg

8) Створіть сценарій оболонки, який перевіряє, чи існує файл у поточному каталозі.

Ось сценарій, який перевіряє, чи існує файл під назвою example.txt у поточному каталозі:

#!/bin/bash
file=example.txt
# Перевірте, чи файл існує
if [ -e $file ]; потім
echo Файл існує: $file
інше
echo Файл не знайдено: $file
бути

Пояснення:

  1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
  2. file=example.txt: цей рядок визначає файл змінної та присвоює йому значення example.txt. Ви можете замінити це назвою файлу, який потрібно перевірити.
  3. if [ -e $file ]; then: Цей рядок починає оператор if. Умова [ -e $file ] перевіряє, чи існує файл, визначений значенням змінної file. Прапор -e використовується для перевірки існування файлу.
  4. echo Файл існує: $file: якщо умова вірна (тобто файл існує), цей рядок друкує повідомлення про те, що файл існує, разом із назвою файлу.
  5. else: якщо умова хибна (тобто файл не існує), сценарій виконує код у гілці else.
  6. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено, разом із назвою файлу.
  7. fi: цей рядок позначає кінець оператора if.
Пошук файлу

Пошук файлу

9) Яка різниця між одинарними лапками (‘) і подвійними лапками () у сценаріях оболонки?

Одинарні лапки (‘) і подвійні лапки () використовуються для включення рядків у сценарії оболонки, але вони мають різну поведінку:

  • Одинарні лапки: усе, що знаходиться в одинарних лапках, розглядається як літеральний рядок. Імена змінних і більшість спеціальних символів не розгортаються.
  • Подвійні лапки: змінні та певні спеціальні символи в подвійних лапках розгортаються. Вміст підлягає підстановці змінних і підстановці команд.

#!/bin/bash

abcd=Привіт
echo ‘$abcd’ # Вихід: $abcd
echo $abcd # Вихід: Привіт

10) Як ви можете використовувати аргументи командного рядка в сценарії оболонки?

Аргументи командного рядка це значення, які надаються сценарію під час його виконання. До них можна отримати доступ у сценарії за допомогою спеціальних змінних, таких як $1, $2 тощо, де $1 представляє перший аргумент, $2 представляє другий аргумент і так далі.

Наприклад: Якщо ім'я нашого сценарію в `example.sh`

#!/bin/bash

echo Назва сценарію: $0
echo Перший аргумент: $1
echo Другий аргумент: $2

Якщо ми запустимо сценарій із `.example.sh hello_1 hello_2`, він виведе:

аргументи cli

аргументи cli

11) Як ви використовуєте цикл for для перебору списку значень?

Створіть назву сценарію `example.sh`.

#!/bin/bash

фрукти=(яблуко банан вишня фінік)
для фруктів у ${fruits[@]}; робити
echo Поточний фрукт: $fruit
зроблено

Пояснення:

Рядок `fruits=` створює масив під назвою fruits із чотирьох елементів: яблуко, банан, вишня та фінік.

  • для фруктів у ${fruits[@]}; do: Цей рядок починає цикл for. Ось що означає кожна частина:
  • for fruit: Це оголошує змінну циклу під назвою fruit. У кожній ітерації циклу fruit буде зберігати значення поточного елемента з масиву fruits.
  • ${fruits[@]}: це розширення масиву, яке бере всі елементи з масиву fruits. Синтаксис ${…} гарантує, що кожен елемент розглядається як окремий елемент.
  • do: це ключове слово позначає початок тіла циклу.
  • echo Поточний плод: $fruit: усередині циклу цей рядок використовує команду echo для відображення поточного значення змінної циклу fruit. Він друкує повідомлення на кшталт Current fruit: apple для кожного фрукта в масиві.
  • done: це ключове слово позначає кінець тіла циклу. Він повідомляє сценарію, що цикл завершено.
для циклу

для циклу

12) Напишіть сценарій оболонки, який обчислює суму цілих чисел від 1 до N за допомогою циклу.

Створіть назву сценарію `example.sh`.

#!/bin/bash

echo Введіть число (N):
читати Н
сума=0
for (( i=1; i<=$N; i++ )); робити
сума=$((сума + i))
зроблено
echo Сума цілих чисел від 1 до $N: $sum

Пояснення:
Сценарій починається з запиту на введення числа (N) за допомогою read. Це число визначить, скільки разів виконується цикл.

  1. Змінна sum ініціалізується рівним 0. Ця змінна відстежуватиме суму цілих чисел.
  2. Цикл for починається з for (( i=1; i<=$N; i++ )). Ця структура циклу використовується для повторення набору дій певну кількість разів, у цьому випадку від 1 до значення N.
  3. Усередині циклу відбуваються такі речі:
    • i=1 встановлює для змінної циклу i значення 1 на початку кожної ітерації.
    • Умова циклу i<=$N перевіряє, чи i все ще менше або дорівнює заданому числу N.
    • Якщо умова виконується, виконується тіло циклу.
    • sum=$((sum + i)) обчислює нове значення sum, додаючи до нього поточне значення i. Це додає цілі числа від 1 до поточного значення i.
  4. Після кожної ітерації i++ збільшує значення i на 1.
  5. Цикл продовжує працювати, доки умова i<=$N не стане помилковою (коли i стане більшим за N).
  6. Після завершення циклу сценарій відображає суму цілих чисел від 1 до введеного числа N.

439

13) Створіть сценарій, який шукатиме певне слово у файлі та підраховуватиме його випадки.

Створіть назву сценарію `word_count.sh`

#!/bin/bash

echo Введіть слово для пошуку:
читати target_word
echo Введіть назву файлу:
прочитати назву файлу
count=$(grep -o -w $target_word $filename | wc -l)
echo Слово «$target_word» з’являється $count разів у «$filename».

Пояснення:

  • echo Введіть слово для пошуку:: Цей рядок відображає повідомлення з проханням до користувача ввести слово, яке він хоче знайти у файлі.
  • read target_word: цей рядок читає введені користувачем дані та зберігає їх у змінній під назвою target_word.
  • echo Введіть ім'я файлу:: Цей рядок відображає повідомлення з проханням до користувача ввести назву файлу, у якому він бажає виконати пошук.
  • read filename: Цей рядок читає введені користувачем дані та зберігає їх у змінній з назвою filename.
  • count=$(grep -o -w $target_word $filename | wc -l): цей рядок виконує основну роботу сценарію. Давайте розберемо це далі:
    • grep -o -w $target_word $filename: Ця частина команди шукає входження target_word у вказаному імені файлу. Параметри -o і -w гарантують, що враховуються лише цілі збіги слів.
    • |: Це канал, який приймає вихідні дані попередньої команди та надсилає їх як вхідні дані для наступної команди.
    • wc -l: ця частина команди використовує команду wc для підрахунку кількості рядків у вхідних даних. Параметр -l спеціально підраховує рядки.
    • Уся команда обчислює кількість входжень target_word у файлі та призначає цю кількість змінній coun

441

14) Поясніть різницю між стандартним виведенням (stdout) і стандартною помилкою (stderr).

Основна відмінність між стандартним виведенням (stdout) і стандартною помилкою (stderr) полягає в наступному:

  • Стандартний вихід (stdout): Це стандартний вихідний потік, куди надходить звичайний вихід команди. Він відображається на терміналі за замовчуванням. Ви можете перенаправити його до файлу за допомогою>.
  • Стандартна помилка (stderr): Це вихідний потік для повідомлень про помилки та попереджень. Він також відображається на терміналі за замовчуванням. Ви можете перенаправити його у файл за допомогою 2>.

15) Поясніть концепцію умовних операторів у сценаріях оболонки.

Умовні оператори в сценаріях оболонки дозволяють нам приймати рішення та контролювати потік нашого сценарію на основі певних умов. Вони дозволяють нашому сценарію виконувати різні набори команд залежно від того, чи є конкретна умова істинною чи хибною. Основними умовними операторами в сценаріях оболонки є оператор if, оператор elif (необов’язковий) і оператор else (необов’язковий).

Ось базова структура умовного оператора в сценаріях оболонки:

якщо [умова]; потім
# Команди для виконання, якщо умова виконується
elif [інша_умова]; потім
# Команди для виконання, якщо another_condition є істинним (необов’язково)
інше
# Команди для виконання, якщо жодна з умов не виконується (необов’язково)
бути

Пояснення:

  • [умова] = Команда, яка оцінює умову та повертає істинний (0) або хибний (ненульовий) статус виходу.
  • then = Це ключове слово, яке вказує, що наступні за ним команди будуть виконані, якщо умова оцінюється як істина.
  • elif = (скорочення від else if) Це розділ, який дозволяє нам вказати додаткові умови для перевірки.
  • else = це розділ, який містить команди, які будуть виконані, якщо жодна з умов не виконується.
  • fi = Це ключове слово, яке позначає кінець умовного блоку.

16) Як ви читаєте рядки з файлу в сценарії оболонки?

до читати рядки з файлу в сценарії оболонки, ми можемо використовувати різні методи, але один з поширених підходів полягає у використанні циклу while у поєднанні з командою read. Ось як ми можемо це зробити:

#!/bin/bash
file=/home/jayeshkumar/jayesh.txt
# Перевірте, чи файл існує
if [ -e $file ]; потім
while IFS= читання рядка -r; робити
echo Читання рядка: $line
# Додайте тут свою логіку обробки
виконано <$файл
інше
echo Файл не знайдено: $file
бути

Пояснення:

  1. #!/bin/bash: це рядок shebang, який визначає інтерпретатор (/bin/bash), який буде використовуватися для виконання сценарію.
  2. file=/home/jayeshkumar/jayesh.txt: цей рядок визначає файл змінної та призначає повний шлях до файлу jayesh.txt у каталозі /home/jayeshkumar. Змініть цей шлях, щоб відповідати фактичному шляху до файлу, який ви хочете прочитати.
  3. if [ -e $file ]; then: Цей рядок починає оператор if. Він перевіряє, чи існує файл, визначений змінною $file. Прапор -e перевіряє наявність файлу.
  4. while IFS= читання рядка -r; do: цей рядок ініціює цикл while, який читає рядки з файлу.
    • IFS=: IFS (внутрішній роздільник полів) має порожнє значення, щоб зберегти пробіли на початку та в кінці.
    • read -r рядок: це зчитує поточний рядок із файлу та зберігає його у рядку змінної.
  5. echo Прочитаний рядок: $line: цей рядок друкує вміст рядка, який було прочитано з файлу. Змінна $line містить вміст поточного рядка.
  6. # Додайте свою логіку обробки тут: це коментар-заповнювач, де ви можете додати свою власну логіку для обробки кожного рядка. Наприклад, ви можете проаналізувати рядок, отримати інформацію або виконати певні дії на основі вмісту.
  7. done <$file: це позначає кінець циклу while. <$file перенаправляє вміст файлу, який буде прочитано циклом.
  8. else: якщо файл не існує (умова оператора if невірна), сценарій виконує код у гілці else.
  9. echo Файл не знайдено: $file: цей рядок друкує повідомлення про помилку, яке вказує на те, що вказаний файл не знайдено.
  10. fi: цей рядок позначає кінець оператора if.
читання файлу

читання файлу

Тут ми використали ` pwd `, щоб отримати шлях до поточного каталогу.

17) Напишіть функцію в сценарії оболонки, яка обчислює факториал заданого числа.

Ось такий сценарійобчислити факторіалзаданого числа.

#!/bin/bash
# Визначте функцію для обчислення факторіалу
calculate_factory() {
num=$1
факт=1
for ((i=1; i<=num; i++)); робити
факт=$((факт * i))
зроблено
луна $факт
}
# Запропонувати користувачеві ввести число
echo Введіть число:
читати input_num
# Викличте функцію calculate_factorial із введеним числом
factorial_result=$(calculate_factorial $input_num)
# Відобразити факторний результат
echo Факторіал $input_num: $factorial_result

Пояснення:

  1. Сценарій починається з рядка shebang #!/bin/bash для визначення інтерпретатора.
  2. Calculate_factorial() визначається як функція. Він приймає один аргумент, num, який є числом, факторіал якого потрібно обчислити.
  3. Усередині функції факт ініціалізується рівним 1. Ця змінна зберігатиме факторний результат.
  4. Цикл for повторює від 1 до заданого числа (num). У кожній ітерації він множить поточне значення факту на індекс циклу i.
  5. Після завершення циклу змінна fact містить обчислений факториал.
  6. Сценарій пропонує користувачеві ввести число за допомогою read.
  7. Функція calculate_factorial викликається з числом, наданим користувачем, і результат зберігається в змінній factorial_result.
  8. Нарешті сценарій відображає обчислений факторний результат.
Факторіал

Факторіал

18) Як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки?

У сценарії оболонки ви можете обробляти такі сигнали, як Ctrl+C (також відомий як SIGINT), використовуючи команду trap. Ctrl+C генерує сигнал SIGINT, коли користувач натискає його, щоб перервати запущений сценарій або програму. Використовуючи команду trap, ви можете вказати дії, які мають бути виконані при отриманні певного сигналу. Ось як ви обробляєте такі сигнали, як Ctrl+C у сценарії оболонки:

#!/bin/bash
прибирати() {
echo Сценарій перервано. Виконання очищення…
# Додайте тут свої дії з очищення
вихід 1
}
# Налаштувати перехоплення для виклику функції очищення, коли отримано Ctrl+C (SIGINT).
очищення пастки SIGINT
# Решта вашого сценарію
луна Бігає…
спати 10
echo Готово.

Обробка сигналів важлива для того, щоб зробити сценарії надійними та забезпечити ефективну обробку несподіваних переривань. Ви можете налаштувати функцію очищення відповідно до ваших конкретних потреб, як-от закриття файлів, зупинка процесів або запис інформації перед виходом зі сценарію.

Пояснення:

  1. #!/bin/bash: цей рядок shebang визначає інтерпретатор, який буде використовуватися для виконання сценарію.
  2. cleanup() { … }: це визначає функцію під назвою cleanup. У цю функцію можна включити будь-які дії, які потрібно виконати, коли сценарій переривається, наприклад закриття файлів, звільнення ресурсів або виконання інших завдань очищення.
  3. trap cleanup SIGINT: Команда trap використовується для налаштування обробника сигналів. У цьому випадку це вказує, що коли отримано сигнал SIGINT (Ctrl+C), слід виконати функцію очищення.
  4. echo Виконується…, sleep 10, echo Finished.: Це лише приклади команд для імітації виконання сценарію.

446

19) Створіть сценарій, який перевіряє та видаляє повторювані рядки в текстовому файлі.

Ось наш сценарій Linux, у якому ми будемо видаляти повторювані рядки з текстового файлу.

#!/bin/bash
input_file=input.txt
вихідний_файл=вихідний.txt
сортувати $input_file | uniq> $output_file
echo Повторювані рядки успішно видалено.

Пояснення:

  1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що сценарій слід інтерпретувати за допомогою оболонки Bash.
  2. Змінна input_file встановлюється на ім’я вхідного файлу, що містить повторювані рядки (змініть це на фактичне ім’я вхідного файлу).
  3. Змінна output_file встановлюється на назву вихідного файлу, з якого буде видалено дублікати (змініть це на бажане ім’я вихідного файлу).
  4. Сценарій використовує команду sort для сортування рядків у вхідному файлі. Сортування рядків гарантує, що повторювані рядки групуються разом.
  5. Потім відсортовані рядки передаються через команду uniq, яка видаляє послідовні повторювані рядки. Вихідні дані цього процесу перенаправляються у вихідний файл.
  6. Після видалення дублікатів сценарій друкує повідомлення про успіх.
видалення повторюваних рядків

видалення повторюваних рядків

Тут ми використовуємо ` кішка `, щоб відобразити текст у текстовому файлі.

20) Напишіть сценарій, який генерує безпечний випадковий пароль.

Ось наш скрипт для створення безпечного випадкового пароля.

#!/bin/bash
# Функція генерації випадкового пароля
generate_password() {
tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
}
# Виклик функції та збереження згенерованого пароля
пароль=$(згенерувати_пароль)
echo Згенерований пароль: $password

Примітка: користувач може відповідно змінити довжину пароля, замінивши число `12`.

Пояснення:

  1. Сценарій починається зі символу shebang (#!/bin/bash), який вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
  2. Функція generate_password призначена для створення випадкового пароля. Ось як це працює:
    • tr -dc 'A-Za-z0-9!@#$%^&*()_+{}[]'
    • fold -w 12 розбиває відфільтровані випадкові дані на рядки по 12 символів у кожному.
    • head -n 1 вибирає перший рядок, фактично надаючи нам випадкову послідовність символів довжиною 12.
  3. Змінній password присвоюється результат виклику функції generate_password.
  4. Нарешті, згенерований пароль відображається за допомогою луни.

448

21) Напишіть сценарій оболонки, який обчислює загальний розмір усіх файлів у каталозі.

Ось сценарій оболонки для обчислення загального розміру всіх файлів у каталозі.

#!/bin/bash
каталог=/шлях/до/вашого/каталогу
total_size=$(du -csh $directory | grep total | awk ‘{print $1}’)
echo Загальний розмір файлів у $directory: $total_size

Пояснення:

  1. Сценарій починається з #!/bin/bash shebang, що вказує на те, що його слід інтерпретувати за допомогою оболонки Bash.
  2. Змінна каталогу встановлюється на шлях до каталогу, для якого потрібно обчислити загальний розмір файлу. Замініть /path/to/your/directory справжнім шляхом.
  3. Команда du використовується для оцінки використання файлового простору. Використовуються такі варіанти:
    • -c: створити загальну суму.
    • -s: відображати лише загальний розмір зазначеного каталогу.
    • -h: друкувати розміри в зручному для читання форматі (наприклад, КБ, МБ, ГБ).
  4. Вихід du передається до grep total, щоб відфільтрувати рядок, який містить загальний розмір.
  5. awk ‘{print $1}’ використовується для виділення першого поля (загального розміру) з рядка.
  6. Розрахований загальний розмір зберігається в змінній total_size.
  7. Нарешті, сценарій відображає загальний розмір за допомогою echo.
Загальний розмір файлів

Загальний розмір файлів

Тут ми використали ` pwd `, щоб побачити поточний шлях до каталогу.

22) Поясніть різницю між операторами if і elif у сценаріях оболонки.

Особливість `if`Staiftement Заява `elif`
призначення Поясніть різницю між операторами if і elif у сценаріях оболонки. Надає альтернативні умови для перевірки, коли початкова умова if є хибною.
використання Використовується для початкового стану. Використовується після початкової умови if для перевірки додаткових умов.
кількість блоків Може мати лише один блок if. Може мати декілька блоків elif, але лише один блок else (необов’язково).
виконання Виконує блок коду, пов’язаний із оператором if, якщо умова виконується. Якщо умова false, блок else (якщо присутній) виконується (необов’язково). Перевіряє кожну умову elif по порядку. Якщо одна з умов elif виконується, виконується відповідний блок коду, і сценарій завершує роботу з усього умовного блоку. Якщо жодна з умов elif не виконується, виконується блок else (якщо він присутній).
Вкладені структури Може бути вкладено в інші блоки if, elif або else. Не можна вкладати в інший блок elif, але можна використовувати всередині блоку if або else.

Розберемося в цьому на прикладі.

#!/bin/bash
число=5
if [$number -gt 10]; потім
echo $number більше 10
інше
echo $number не більше 10
бути
луна ——–
if [$number -gt 10]; потім
echo $number більше 10
elif [$number -eq 10]; потім
echo $number дорівнює 10
інше
echo $number менше 10
бути

Пояснення:

У цьому прикладі перший блок if перевіряє, чи число більше 10. Якщо ні, він друкує повідомлення про те, що число не більше 10. Другий блок із операторами elif перевіряє кілька умов послідовно, доки одна з них не стане істинною. У цьому випадку, оскільки значення числа дорівнює 5, результатом буде:

if_elif різниця

if_elif різниця

23) Як ви використовуєте цикл while для багаторазового виконання команд?

Цикл while використовується в сценаріях оболонки для багаторазового виконання набору команд, доки виконується певна умова. Цикл продовжує виконувати команди, поки умова не стане помилковою.

Ось основний синтаксис циклу while:

while [умова]; робити
# Команди для виконання
зроблено

Пояснення:

  1. Цикл `while` починається з ключового слова `while`, після якого йде умова, укладена в квадратні дужки `[ ]`.
  2. Тіло циклу, яке містить команди для виконання, укладено в ключові слова `do` і `done`.
  3. Цикл спочатку перевіряє умову. Якщо умова виконується, виконуються команди в тілі циклу. Після виконання тіла циклу умова перевіряється знову, і процес повторюється, доки умова не стане помилковою.

приклад: Якщо ми хочемо надрукувати числа від 1 до 5

#!/bin/bash
лічильник=1
while [$counter -le 5]; робити
echo Номер: $лічильник
лічильник=$((лічильник + 1))
зроблено

Пояснення:

  • Змінна лічильника має значення 1.
  • Цикл while перевіряє, чи значення лічильника менше або дорівнює 5. Поки ця умова виконується, цикл продовжує виконуватися.
  • Усередині циклу поточне значення лічильника друкується за допомогою echo.
  • Лічильник збільшується на 1 за допомогою виразу $((лічильник + 1)).
цикл while

цикл while

24) Створіть сценарій оболонки, який знаходить і перераховує всі порожні файли в каталозі.

Сценарій оболонки, який можна використовувати для пошуку та списку всіх порожніх файлів у каталозі за допомогою команд `find` і `stat`:

#!/bin/bash
каталог=$1″
if [ -z $каталог ]; потім
echo Використання: $0
вихід 1
бути

якщо [! -d $каталог]; потім
echo Помилка: «$directory» не є дійсним каталогом.
вихід 1
бути
echo Порожні файли в $directory:
find $directory -type f -empty

Пояснення:

  1. ` #!/bin/bash `: Це називається shebang, і воно повідомляє операційній системі використовувати оболонку Bash для інтерпретації та виконання сценарію.
  2. ` каталог=$1″ `: цей рядок призначає перший аргумент командного рядка (позначений $1) змінній ` каталог `.
  3. ` if [ -z $каталог ]; потім `: цей рядок починає оператор if, який перевіряє, чи ` каталог ` змінна порожня (-z перевіряє порожній рядок).
  4. ` echo Використання: $0 `: якщо каталог порожній, цей рядок друкує повідомлення про використання, де ` $0 ` представляє назву сценарію.
  5. ` вихід 1 `: цей рядок завершує роботу сценарію з кодом виходу ` 1 `, що вказує на помилку.
  6. ` бути `: цей рядок позначає кінець ` якщо ` заява.
  7. ` якщо [! -d $каталог]; потім `: запускається інший оператор if, щоб перевірити, чи існує наданий каталог (` ` тести для каталогу).
  8. ` echo Помилка: «$directory» не є дійсним каталогом. `: якщо наданий каталог не існує, цей рядок друкує повідомлення про помилку.
  9. ` вихід 1 `: вихід зі сценарію з кодом виходу ` 1 `.
  10. ` бути `: позначає кінець другого ` якщо` заява.
  11. ` echo Порожні файли в $directory: `: якщо наразі все вірно, цей рядок друкує повідомлення про те, що сценарій перерахує порожні файли у вказаному каталозі.
  12. ` find $directory -type f -empty `: у цьому рядку використовується ` знайти ` команда пошуку порожніх файлів (` - порожній `) типу звичайних файлів (` - тип f `) у вказаному каталозі. Потім він перераховує ці порожні файли.
Пошук порожніх файлів

Пошук порожніх файлів

Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях поточного каталогу home/jayeshkumar/

25) Яка мета команди read у сценаріях оболонки?

Команда read у сценаріях оболонки дозволяє сценарію запитувати у вас інформацію. Це як коли комп’ютер задає вам запитання й чекає на відповідь. Це корисно для сценаріїв, які вимагають, щоб ви щось ввели, або коли сценарію потрібно працювати з інформацією з файлів. Команда read допомагає сценарію зупинятися й чекати, що ви введете, а потім він може використовувати цю інформацію для виконання інших завдань у сценарії.

Синтаксис команди read:

read variable_name>

приклад : якщо ми хочемо взяти ім’я як вхідні дані від користувача, щоб надрукувати його.

#!/bin/bash
echo Будь ласка, введіть своє ім'я:
прочитати назву
echo Привіт, $name!

453

прочитати ім

Таким чином, команда read використовується для захоплення введених користувачем даних або даних із файлів у сценаріях оболонки, що робить сценарії більш інтерактивними та універсальними.

26) Напишіть сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

Ось сценарій оболонки, який перетворює всі назви файлів у каталозі на малі літери.

#!/bin/bash
каталог=$1″
if [ -z $каталог ]; потім
echo Використання: $0
вихід 1
бути

якщо [! -d $каталог]; потім

echo Помилка: «$directory» не є дійсним каталогом.
вихід 1
бути

cd $каталог || вихід 1

для файлу в *; робити
if [ -f $file ]; потім
newname=$(echo $file | tr ‘A-Z’ ‘a-z’)
[ $file != $newname ] && mv $file $newname
бути
зроблено

Пояснення:

  1. #!/bin/bash : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. каталог=$1″ : цей рядок призначає перший аргумент командного рядка каталогу змінних.
  3. if [ -z $каталог ]; потім : цей рядок перевіряє, чи порожня змінна каталогу (під час виконання сценарію не надається аргумент).
  4. echo Використання: $0 : якщо каталог порожній, цей рядок друкує повідомлення про використання з назвою сценарію ($0).
  5. вихід 1 : цей рядок завершує роботу сценарію з кодом виходу 1, що вказує на помилку.
  6. f i: Це означає кінець першого оператора if.
  7. якщо [! -d $каталог]; потім : цей рядок перевіряє, чи не існує вказаного каталогу (-d перевіряє наявність каталогу).
  8. echo Помилка: «$directory» не є дійсним каталогом. : якщо вказаний каталог не існує, цей рядок друкує повідомлення про помилку.
  9. вихід 1 : вихід зі сценарію з кодом виходу 1.
  10. бути : Позначає кінець другого оператора if.
  11. cd $каталог || вихід 1 : змінює поточний робочий каталог на вказаний каталог. Якщо змінити каталог не вдалося (наприклад, каталог не існує), сценарій завершує роботу з кодом помилки.
  12. для файлу в *; зробити: я для файлу в *; зробити: ініціює цикл, який перебирає всі елементи в поточному каталозі (* відповідає всім назвам файлів).
  13. if [ -f $file ]; потім : перевіряє, чи поточний елемент ітерації циклу є звичайним файлом (-f перевіряє звичайний файл).
  14. newname=$(echo $file | tr ‘A-Z’ ‘a-z’) : перетворює поточне ім’я файлу ($file) на нижній регістр за допомогою команди tr і зберігає результат у змінній newname.
  15. [ $file != $newname ] && mv $file $newname : Порівнює оригінальну назву файлу з новою назвою файлу, написаною в нижньому регістрі. Якщо вони різні, він перейменовує файл за допомогою команди mv.
  16. бути : Позначає кінець внутрішнього оператора if.
  17. зроблено : Позначає кінець циклу.

454

Примітка : Нам потрібно надати каталог як аргумент під час виконання сценарію. Тут ми використали шлях до поточного каталогу home/jayeshkumar/test

27) Як можна використовувати арифметичні операції в сценарії оболонки?

Арифметичні операції можна виконувати в сценарії оболонки за допомогою різних вбудованих методів. Оболонка надає механізми для простих арифметичних обчислень за допомогою арифметичного розширення, наприклад:

  1. Арифметичне розширення ($((…)))
  2. Використання команди expr
  3. Використання команди let

Ось наш сценарій Shell, що пояснює всі три методи арифметичних операцій.

#!/bin/bash
num1=10
num2=5

#Арифметичне розширення ($((…)))

результат=$((num1 + num2))
echo Сума: $результат

#Використання команди expr

сума=$(вираз $num1 + $num2)
echo Сума: $сума

#Використання команди let

нехай сума = num1 + num2
echo Сума: $сума

Пояснення:

  1. `#!/bin/bash` : Це вказівка, яка вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. `num1=10` і ` num2=5` : ці рядки присвоюють значення 10 і 5 змінним ` num1 ` і ` num2 ` відповідно.
  3. `#Арифметичне розширення ($((…)))` : це коментар, що вказує на початок розділу, який демонструє арифметичне розширення.
  4. `результат=$((num1 + num2))` : цей рядок використовує арифметичне розширення для обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` результат ` змінна.
  5. `echo Sum: $result` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` результат ` змінна.
  6. `#Використання команди expr` : це коментар, що вказує на початок розділу, який демонструє використання ` вираз ` команда арифметичних операцій.
  7. `sum=$(expr $num1 + $num2)` : цей рядок використовує ` вираз ` команда обчислення суми ` num1 ` і ` num2 ` і зберігає результат у ` сума ` змінна. Зауважте, що ` вираз Команда ` вимагає пробілів навколо операторів.
  8. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
  9. `#Використання команди let` : це коментар, що вказує на початок розділу, який демонструє використання ` дозволяти ` команда арифметичних операцій.
  10. `нехай сума = num1 + num2″` : цей рядок використовує ` дозволяти ` команда обчислення суми ` num1 ` і ` num2 ` і призначає результат ` сума ` змінна. ` дозволяти Команда ` не вимагає пробілів навколо операторів.
  11. `echo Sum: $sum` : цей рядок друкує обчислену суму, використовуючи значення, збережене в ` сума ` змінна.
арифметика

арифметика

28) Створіть сценарій, який перевіряє, чи доступний хост мережі.

Ось простий сценарій оболонки, який використовує команду ping, щоб перевірити, чи доступний хост мережі:

#!/bin/bash
хост=$1″
якщо [ -z $хост]; потім
echo Використання: $0
вихід 1
бути
ping -c 4 $хост

якщо [ $? -екв 0]; потім
echo $host доступний.
інше
echo $host недоступний.
бути

Пояснення:

  1. Він приймає ім’я хоста або IP-адресу як аргумент і перевіряє, чи надано аргумент.
  2. Якщо аргумент не вказано, відображається повідомлення про використання та завершується робота.
  3. Він використовує команду ping з опцією -c 4 для надсилання чотирьох ехо-запитів ICMP на вказаний хост.
  4. Після виконання команди ping перевіряється статус виходу ($?). Якщо статус виходу дорівнює 0, це означає, що хост доступний і сценарій друкує повідомлення про успіх. В іншому випадку він друкує повідомлення про помилку.

456

Примітка : нам потрібно надати ім’я хоста як аргумент під час виконання сценарію. Тут ми використали google.com

29) Напишіть сценарій оболонки, щоб знайти найбільший елемент у масиві:

Ось сценарій оболонки для пошуку найбільшого елемента в масиві.

#!/bin/bash
# Оголошення масиву
масив=(3 56 24 89 67)

# Ініціалізація змінної для збереження максимального значення, починаючи з першого елемента

макс=${масив[0]}

# Ітерація по масиву

для числа в ${array[@]}; робити

# Порівняти кожен елемент із поточним максимумом

if ((num> max)); потім
max=$num
бути
зроблено

# Вивести максимальне значення

echo Максимальний елемент у масиві: $max

Пояснення:

  1. ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. ` масив=(3 56 24 89 67) `: масив оголошується та ініціалізується значеннями.
  3. ` макс=${масив[0]} `: `max` ініціалізується першим елементом масиву.
  4. ` для числа в ${array[@]}; робити `: цикл `for` використовується для перебору елементів масиву.
  5. ` if ((num> max)); потім `: Оператор `if` перевіряє, чи поточний елемент `num` більший за поточний максимальний `max`.
  6. ` max=$num`: Якщо`num ` більше ніж `max`, `max` оновлюється значенням num.
  7. ` зроблено `: цикл `for` закрито.
  8. ` echo Максимальний елемент у масиві: $max `: нарешті сценарій друкує максимальне значення, знайдене в масиві.
461

найбільше число

30) Напишіть скрипт для обчислення суми елементів у масиві.

#!/bin/bash

# Оголошення масиву

масив=(1 65 22 19 94)

# Ініціалізація змінної для збереження суми

сума=0

# Перебираємо масив і додаємо кожен елемент до суми

для числа в ${array[@]}; робити
am=$((am + am))
зроблено

# Вивести суму

echo Сума елементів у масиві: $sum

Пояснення:

` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.

` масив=(1 65 22 19 94) `: масив оголошується та ініціалізується значеннями.

` сума=0 `:` сума ` ініціалізується нулем, щоб зберегти суму елементів.

` для числа в ${array[@]}; робити `: A ` для Цикл ` використовується для перебору елементів масиву.

` am=$((am + am)) `: усередині циклу кожен елемент ` на одному ` додається до ` сума ` змінна.

` зроблено `: ` для ` цикл закрито.

`echo Сума елементів у масиві: $sum`: Нарешті, скрипт друкує суму всіх елементів у масиві.

462

Сума елементів

Дізнайтеся більше про сценарії оболонки

Висновок

Ми всі фанати знаємо, що сценарій оболонки дуже корисний для підвищення продуктивності роботи, а також економії часу. Отже, у цій статті ми розглянули 30 дуже корисних і найбільш шахрайських прикладів сценаріїв оболонки . Ми сподіваємося, що цей повний посібник із прикладів сценаріїв оболонки допоможе вам зрозуміти все про сценарії оболонки.




вихід 1
бути
ping -c 4 $хост

якщо [ $? -екв 0]; потім
echo $host доступний.
інше
echo $host недоступний.
бути

Пояснення:

  1. Він приймає ім’я хоста або IP-адресу як аргумент і перевіряє, чи надано аргумент.
  2. Якщо аргумент не вказано, відображається повідомлення про використання та завершується робота.
  3. Він використовує команду ping з опцією -c 4 для надсилання чотирьох ехо-запитів ICMP на вказаний хост.
  4. Після виконання команди ping перевіряється статус виходу ($?). Якщо статус виходу дорівнює 0, це означає, що хост доступний і сценарій друкує повідомлення про успіх. В іншому випадку він друкує повідомлення про помилку.

456

Примітка : нам потрібно надати ім’я хоста як аргумент під час виконання сценарію. Тут ми використали google.com

29) Напишіть сценарій оболонки, щоб знайти найбільший елемент у масиві:

Ось сценарій оболонки для пошуку найбільшого елемента в масиві.

#!/bin/bash
# Оголошення масиву
масив=(3 56 24 89 67)

# Ініціалізація змінної для збереження максимального значення, починаючи з першого елемента

макс=${масив[0]}

# Ітерація по масиву

для числа в ${array[@]}; робити

# Порівняти кожен елемент із поточним максимумом

if ((num> max)); потім
max=$num
бути
зроблено

# Вивести максимальне значення

примірник java

echo Максимальний елемент у масиві: $max

Пояснення:

  1. ` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.
  2. ` масив=(3 56 24 89 67) `: масив оголошується та ініціалізується значеннями.
  3. ` макс=${масив[0]} `: `max` ініціалізується першим елементом масиву.
  4. ` для числа в ${array[@]}; робити `: цикл `for` використовується для перебору елементів масиву.
  5. ` if ((num> max)); потім `: Оператор `if` перевіряє, чи поточний елемент `num` більший за поточний максимальний `max`.
  6. ` max=$num`: Якщо`num ` більше ніж `max`, `max` оновлюється значенням num.
  7. ` зроблено `: цикл `for` закрито.
  8. ` echo Максимальний елемент у масиві: $max `: нарешті сценарій друкує максимальне значення, знайдене в масиві.
461

найбільше число

30) Напишіть скрипт для обчислення суми елементів у масиві.

#!/bin/bash

# Оголошення масиву

масив=(1 65 22 19 94)

# Ініціалізація змінної для збереження суми

сума=0

# Перебираємо масив і додаємо кожен елемент до суми

для числа в ${array[@]}; робити
am=$((am + am))
зроблено

# Вивести суму

echo Сума елементів у масиві: $sum

Пояснення:

` #!/bin/bash `: рядок shebang вказує, що сценарій має інтерпретуватися за допомогою оболонки Bash.

` масив=(1 65 22 19 94) `: масив оголошується та ініціалізується значеннями.

` сума=0 `:` сума ` ініціалізується нулем, щоб зберегти суму елементів.

` для числа в ${array[@]}; робити `: A ` для Цикл ` використовується для перебору елементів масиву.

` am=$((am + am)) `: усередині циклу кожен елемент ` на одному ` додається до ` сума ` змінна.

` зроблено `: ` для ` цикл закрито.

`echo Сума елементів у масиві: $sum`: Нарешті, скрипт друкує суму всіх елементів у масиві.

462

Сума елементів

Дізнайтеся більше про сценарії оболонки

Висновок

Ми всі фанати знаємо, що сценарій оболонки дуже корисний для підвищення продуктивності роботи, а також економії часу. Отже, у цій статті ми розглянули 30 дуже корисних і найбільш шахрайських прикладів сценаріїв оболонки . Ми сподіваємося, що цей повний посібник із прикладів сценаріїв оболонки допоможе вам зрозуміти все про сценарії оболонки.