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.