Argumenty, wartości zwracane i zasięg

Wprowadzenie do skryptów Bash

Alex Scriven

Data Scientist

Przekazywanie argumentów do funkcji Bash

Przekazywanie argumentów do funkcji jest podobne do przekazywania ich do skryptu – używamy notacji $1.

Dostępne są również omówione wcześniej właściwości ARGV:

  • Do każdego argumentu można odwołać się przez $1, $2 itd.
  • $@ i $* zwracają wszystkie argumenty z ARGV
  • $# zwraca liczbę argumentów
Wprowadzenie do skryptów Bash

Przykład przekazywania argumentów

Przekażemy nazwy plików jako argumenty do funkcji, która przejdzie przez nie w pętli i wyświetli ich nazwy.

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
Wprowadzenie do skryptów Bash

Zasięg w programowaniu

 

„Zasięg" w programowaniu określa dostępność zmiennej.

  • „Globalny" oznacza dostępność w całym programie – w pętlach FOR, instrukcjach IF, funkcjach itd.
  • „Lokalny" oznacza dostępność tylko w określonej części programu.

Dlaczego to ważne? Próba odwołania się do zmiennej o zasięgu lokalnym może spowodować błąd!

Wprowadzenie do skryptów Bash

Zasięg w funkcjach Bash

W odróżnieniu od większości języków programowania (np. Pythona i R), wszystkie zmienne w Bash są domyślnie globalne.

function print_filename {
    first_filename=$1
}

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

Globalny zasięg może być niebezpieczny – zwiększa ryzyko niezamierzonych efektów ubocznych.

Wprowadzenie do skryptów Bash

Ograniczanie zasięgu w funkcjach Bash

Słowo kluczowe local pozwala ograniczyć zasięg zmiennej.

function print_filename {
    local first_filename=$1
}

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


 

P: Dlaczego nie pojawił się błąd, tylko pusty wiersz?

Odpowiedź: first_filename zostało przypisane do globalnego pierwszego elementu ARGV ($1).

Skrypt uruchomiono bez argumentów (bash script.sh), więc zmienna domyślnie jest pusta. Należy zachować ostrożność!

Wprowadzenie do skryptów Bash

Wartości zwracane

Wiemy, jak przekazywać argumenty – jak je zwracać?

Opcja return w Bash służy wyłącznie do wskazania, czy funkcja zakończyła się sukcesem (0) czy niepowodzeniem (wartości 1–255). Wynik jest zapisywany w zmiennej globalnej $?

Możliwe rozwiązania:

  1. Przypisanie do zmiennej globalnej
  2. Użycie echo na wyniku (ostatnia linia funkcji) i przechwycenie przez powłokę zagnieżdżoną
Wprowadzenie do skryptów Bash

Błąd wartości zwracanej

Przykład błędu zwracanego:

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

Co się stało?

  1. Wywołanie funkcji spowodowało błąd
    • Skrypt próbował znaleźć program 'echlo', który nie istnieje
  2. Wartość zwrócona w $? wyniosła 127 (błąd)
Wprowadzenie do skryptów Bash

Poprawne zwracanie wartości

Aby poprawnie zwrócić wartość do dalszego użycia w skrypcie, używamy echo i powłoki zagnieżdżonej:

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
  • Nie tworzymy już zmiennej pośredniej.
Wprowadzenie do skryptów Bash

Czas na ćwiczenia!

Wprowadzenie do skryptów Bash

Preparing Video For Download...