Bash Pagina 73
Sari la navigare
Sari la căutare
Exercițiul 2
Scenariu
Scrieți un script care afișează numerele de la n1 la n2 pana la n, daca e prezent -r face afișare inversă, dacă primește -h ca argument afișează modul de apelare. Programul numără de la 0 până la n, dacă n nu e prezent afișează modul de apelare definit în funcția usage. Daca -b este prezent numără de la n1 până la n, iar dacă n2 e prezent numără de la n1 la n2, daca n1 nu e prezent numără de la 0.
Scriptul
#!/bin/bash
# Funcție pentru afișarea modului de utilizare
usage() {
echo "Usage: $0 [-r] [-b n1] [-s n2] n"
echo " -r Afișează numerele în ordine inversă (descrescătoare)"
echo " -b n1 Setează valoarea de început n1"
echo " -s n2 Setează valoarea de sfârșit n2"
echo " -h Afișează acest mesaj de ajutor"
exit 1
}
# Valori implicite
reverse=false
start=0
end=""
# Parsarea opțiunilor
while getopts ":rb:s:h" opt; do
case ${opt} in
r)
reverse=true
;;
b)
start=$OPTARG
;;
s)
end=$OPTARG
;;
h)
usage
;;
\?)
echo "Opțiune invalidă: -$OPTARG" >&2
usage
;;
:)
echo "Opțiunea -$OPTARG necesită un argument." >&2
usage
;;
esac
done
shift $((OPTIND -1))
# Verificare argument "n"
if [ -z "$1" ]; then
echo "Lipseste argumentul 'n'"
usage
fi
n=$1
# Setează sfârșitul (n2) dacă nu a fost specificat
if [ -z "$end" ]; then
end=$n
fi
# Afișare numere în funcție de ordine
if $reverse; then
for ((i = end; i >= start; i--)); do
echo "$i"
done
else
for ((i = start; i <= end; i++)); do
echo "$i"
done
fi
Explicații
- Funcția usage: Afișează modul de utilizare a scriptului și se oprește execuția.
- Valorile implicite: reverse este setat la false, iar start este inițializat la 0. end este inițializat ca un string gol.
- Parsarea argumentelor: Folosește getopts pentru a procesa opțiunile -r, -b, -s, și -h.
- Verificarea argumentului n: Dacă n nu este furnizat, scriptul va afișa mesajul de utilizare.
- Ajustarea valorii de sfârșit: Dacă end nu este specificat, este setat la valoarea lui n.
- Afișarea numerelor: În funcție de opțiunea -r, scriptul va afișa numerele între n1 și n2 în ordine crescătoare sau descrescătoare.