BASH – Pętla select
: Kompleksowy przewodnik
BASH (Bourne Again Shell) to jeden z najpopularniejszych interpreterów poleceń w systemach Linux i Unix. Dzięki swoim wszechstronnym funkcjom pozwala tworzyć skrypty automatyzujące różne zadania. Jedną z mniej znanych, ale bardzo użytecznych konstrukcji w BASH jest pętla select
, która jest szczególnie przydatna przy tworzeniu interaktywnych menu.
W tym artykule wyjaśnimy, czym jest pętla select
, jak działa, i jakie ma zastosowania. Pokażemy również praktyczne przykłady jej użycia.
Co to jest pętla select
?
Pętla select
to specjalna konstrukcja w BASH, która pozwala w prosty sposób tworzyć menu wyboru w interfejsie tekstowym. Użytkownik może wybrać jedną z opcji, a wybrana wartość zostaje przypisana do zmiennej. Pętla ta jest szczególnie przydatna w przypadku interaktywnych skryptów, w których użytkownik musi podjąć decyzję, np. wybrać opcję z listy.

Składnia pętli select
Podstawowa składnia pętli select
wygląda następująco:
select zmienna in lista
do
# Komendy do wykonania po wyborze
done
Kluczowe elementy:
select zmienna
– deklaruje zmienną, która przechowuje wartość wybraną przez użytkownika.in lista
– lista wartości, które będą wyświetlone jako opcje menu.do
idone
– określają blok kodu wykonywany po dokonaniu wyboru.
Jak działa pętla select
?
- Skrypt wyświetla listę opcji na ekranie, numerując je automatycznie.
- Użytkownik wprowadza numer odpowiadający wybranej opcji.
- Wybrana opcja zostaje przypisana do zmiennej, a przypisany numer jest dostępny w zmiennej specjalnej
REPLY
. - Blok kodu w pętli
do
zostaje wykonany.
Prosty przykład użycia pętli select
Poniżej przedstawiamy prosty skrypt, który demonstruje działanie pętli select
:
#!/bin/bash
echo "Wybierz swój ulubiony język programowania:"
select jezyk in Python JavaScript Bash C++ Wyjście
do
case $jezyk in
"Python")
echo "Wybrałeś Python."
;;
"JavaScript")
echo "Wybrałeś JavaScript."
;;
"Bash")
echo "Wybrałeś Bash."
;;
"C++")
echo "Wybrałeś C++."
;;
"Wyjście")
echo "Kończę program."
break
;;
*)
echo "Nieprawidłowy wybór, spróbuj ponownie."
;;
esac
done
Wyjaśnienie:
- Skrypt wyświetla menu z pięcioma opcjami.
- Użytkownik wybiera numer opcji.
- Na podstawie wyboru wykonuje się odpowiedni blok kodu w instrukcji
case
.
Praktyczne zastosowania pętli select
1. Tworzenie interaktywnych menu w skryptach
Pętla select
jest idealna do budowania menu, które pozwalają użytkownikom wybrać określone opcje w prosty i intuicyjny sposób.
Przykład:
#!/bin/bash
echo "Wybierz akcję do wykonania:"
select akcja in "Utwórz plik" "Usuń plik" "Wyświetl zawartość katalogu" "Wyjdź"
do
case $akcja in
"Utwórz plik")
echo "Podaj nazwę pliku:"
read nazwa
touch $nazwa
echo "Plik $nazwa został utworzony."
;;
"Usuń plik")
echo "Podaj nazwę pliku do usunięcia:"
read nazwa
rm -i $nazwa
;;
"Wyświetl zawartość katalogu")
echo "Zawartość katalogu $(pwd):"
ls -l
;;
"Wyjdź")
echo "Koniec programu."
break
;;
*)
echo "Nieprawidłowy wybór."
;;
esac
done
2. Wybór z listy plików w katalogu
Pętla select
może być użyta do operacji na plikach w katalogu.
Przykład:
#!/bin/bash
echo "Wybierz plik do wyświetlenia:"
select plik in $(ls)
do
if [[ -f $plik ]]; then
echo "Zawartość pliku $plik:"
cat $plik
break
else
echo "Nieprawidłowy wybór. Spróbuj ponownie."
fi
done
Zalety i wady pętli select
Zalety:
- Automatyczna numeracja opcji – BASH sam przypisuje numery do opcji menu.
- Prosta implementacja – pętla
select
jest łatwa do zrozumienia i implementacji. - Czytelność kodu – menu stworzone za pomocą
select
są przejrzyste i intuicyjne.
Wady:
- Brak wbudowanego walidowania danych wejściowych – trzeba samodzielnie obsłużyć nieprawidłowe wybory.
- Interaktywność – pętla
select
jest używana głównie w skryptach interaktywnych, co ogranicza jej zastosowanie w zadaniach automatycznych.
Pętla select
z obsługą błędnych wyborów
Aby zwiększyć użyteczność pętli select
, należy zaimplementować mechanizm obsługi błędnych wyborów.
Przykład:
#!/bin/bash
opcje=("Opcja 1" "Opcja 2" "Opcja 3" "Wyjście")
select opcja in "${opcje[@]}"
do
if [[ -z $opcja ]]; then
echo "Nieprawidłowy wybór. Wybierz ponownie."
else
echo "Wybrano: $opcja"
[[ $opcja == "Wyjście" ]] && break
fi
done
Pętla select
a zmienna REPLY
Pętla select
przypisuje numer wybranej opcji do zmiennej specjalnej REPLY
, co pozwala na dodatkowe operacje.
Przykład:
#!/bin/bash
echo "Wybierz opcję:"
select opcja in "Dodaj" "Usuń" "Wyjdź"
do
echo "Wybrałeś opcję numer $REPLY: $opcja"
[[ $opcja == "Wyjdź" ]] && break
done
Podsumowanie
Pętla select
w BASH jest potężnym narzędziem do tworzenia interaktywnych menu w skryptach powłoki. Jej prostota i czytelność sprawiają, że jest idealnym wyborem do zarządzania decyzjami użytkownika w interfejsie tekstowym. Dzięki automatycznej numeracji opcji i możliwości łatwego ich obsługiwania, pętla select
znacząco ułatwia pracę programisty.
Jeśli chcesz usprawnić swoje skrypty BASH i uczynić je bardziej przyjaznymi dla użytkownika, pętla select
jest funkcją, którą warto poznać i stosować!