Аргументи, значення, що повертаються, і область видимості

Вступ до Bash Scripting

Alex Scriven

Data Scientist

Передавання аргументів у функції Bash

Передавати аргументи у функції так само, як у скрипт: через позначення $1.

Також доступні спеціальні властивості ARGV, про які ми вже говорили:

  • Кожен аргумент доступний через позначення $1, $2.
  • $@ і $* повертають усі аргументи в ARGV
  • $# дає кількість аргументів
Вступ до Bash Scripting

Приклад передавання аргументів

Передаймо назви файлів як аргументи у функцію для прикладу. Пройдемося по них у циклі та виведемо.

function print_filename {
    echo "The first file was $1"

for file in $@ do echo "This file has name $file" done }
print_filename "LOTR.txt" "mod.txt" "A.py"

 

 

 

The first file was LOTR.txt
This file has name LOTR.txt
This file has name mod.txt
This file has name A.py
Вступ до Bash Scripting

Область видимості в програмуванні

 

«Область видимості» в програмуванні — це доступність змінної.

  • «Глобальна» — доступна будь-де у програмі, зокрема в циклах FOR, умовах IF, функціях тощо.
  • «Локальна» — доступна лише в певній частині програми.

Чому це важливо? Якщо звернутися до того, що має лише локальну область, програма може впасти з помилкою!

Вступ до Bash Scripting

Область видимості у функціях Bash

На відміну від більшості мов (напр., Python і R), у Bash усі змінні за замовчуванням глобальні.

function print_filename {
    first_filename=$1
}

print_filename "LOTR.txt" "model.txt" echo $first_filename
LOTR.txt

Остерігайтеся глобальної області: це ризик небажаної поведінки.

Вступ до Bash Scripting

Обмеження області у функціях Bash

Використайте ключове слово local, щоб обмежити область змінної.

function print_filename {
    local first_filename=$1
}

print_filename "LOTR.txt" "model.txt" echo $first_filename


 

Питання: чому не було помилки, а лише порожній рядок?

Відповідь: first_filename було присвоєно глобальний перший елемент ARGV ($1).

Скрипт запущено без аргументів (bash script.sh), тож це за замовчуванням порожній елемент. Будьте уважні!

Вступ до Bash Scripting

Значення, що повертаються

Ми вміємо приймати аргументи — як їх повернути?

Опція return у Bash призначена лише для індикації успіху (0) або помилки (інші значення 1–255). Її збережено в глобальній змінній $?

Наші варіанти:

  1. Присвоїти глобальній змінній
  2. Вивести через echo (останній рядок функції) і зчитати через вкладену оболонку
Вступ до Bash Scripting

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

Подивімося на помилку повернення:

function function_2 {
    echlo # An error of 'echo'
}

function_2 # Call the function echo $? # Print the return value
script.sh: line 2: echlo: command not found
127

Що сталося?

  1. Під час виклику функції сталася помилка
    • Скрипт спробував знайти 'echlo' як програму, але такої немає
  2. Значення повернення в $? — 127 (помилка)
Вступ до Bash Scripting

Коректне повернення

Коректно повернімо значення для подальшого використання в скрипті, застосувавши echo і зчитування через вкладену оболонку:

function convert_temp {
    echo $(echo "scale=2; ($1 - 32) * 5 / 9" | bc)
}

converted=$(convert_temp 30) echo "30F in Celsius is $converted C"
30F in Celsius is -1.11 C
  • Бачите, ми більше не створюємо проміжну змінну?
Вступ до Bash Scripting

Давайте потренуємось!

Вступ до Bash Scripting

Preparing Video For Download...