wtorek,
Bash: Przekazywanie zmiennych do skryptu
W powłoce bash skrypty mogą przyjmować zmienne zewnętrzne (argumenty) przekazywane do nich podczas uruchamiania. Te zmienne są dostępne w skrypcie jako $1
, $2
, $3
, itd., gdzie $1
reprezentuje pierwszy argument, $2
drugi, i tak dalej. Dodatkowo $0
zawsze zawiera nazwę samego skryptu. Skrypty bash mogą elastycznie obsługiwać różne rodzaje argumentów, zarówno opcje z przełącznikami (-a
, -b
), jak i zwykłe zmienne pozycyjne. Daje to dużą swobodę w projektowaniu skryptów do różnorodnych zadań.
Proste przykłady
Podstawowe przekazywanie argumentów
#!/bin/bash
# skrypt.sh
echo "Nazwa skryptu: $0"
echo "Pierwszy argument: $1"
echo "Drugi argument: $2"
Uruchomienie:
bash skrypt.sh Apple Orange
Wyjście:
Nazwa skryptu: skrypt.sh
Pierwszy argument: Apple
Drugi argument: Orange
Liczba przekazanych argumentów
#!/bin/bash
# skrypt.sh
echo "Liczba argumentów: $#"
Uruchomienie:
bash skrypt.sh Apple Orange Banana
Wyjście:
Liczba argumentów: 3
Iteracja po wszystkich argumentach
#!/bin/bash
# skrypt.sh
for arg in "$@"
do
echo "Argument: $arg"
done
Uruchomienie:
bash skrypt.sh Apple Orange Banana
Wyjście:
Argument: Apple
Argument: Orange
Argument: Banana
Przyjmowanie argumentów z opcjami
#!/bin/bash
# skrypt.sh
while getopts ":a:b:" opt; do
case $opt in
a) echo "Opcja -a z argumentem $OPTARG" ;;
b) echo "Opcja -b z argumentem $OPTARG" ;;
?) echo "Nieznana opcja -$OPTARG" ;;
esac
done
Uruchomienie:
bash skrypt.sh -a 123 -b 456
Wyjście:
Opcja -a z argumentem 123
Opcja -b z argumentem 456
Skrypt z opcjami i zmiennymi pozycyjnymi
#!/bin/bash
# skrypt.sh
while getopts ":a:b:" opt; do
case $opt in
a) avalue="$OPTARG" ;;
b) bvalue="$OPTARG" ;;
esac
done
shift $((OPTIND -1))
echo "Opcja -a: $avalue"
echo "Opcja -b: $bvalue"
echo "Pierwszy zwykły argument: $1"
Uruchomienie:
bash skrypt.sh -a 123 -b 456 Apple
Wyjście:
Opcja -a: 123
Opcja -b: 456
Pierwszy zwykły argument: Apple