Bash Pagina 73

De la Wiki Linux Advanced
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.


Pagina anterioară | Următoarea pagină