Bash Pagina 73: Diferență între versiuni
Sari la navigare
Sari la căutare
Admin (discuție | contribuții) |
Admin (discuție | contribuții) Fără descriere a modificării |
||
(Nu s-a afișat o versiune intermediară efectuată de același utilizator) | |||
Linia 1: | Linia 1: | ||
==Exercițiul 2== | ==Exercițiul 2== | ||
'''Scenariu''' | |||
#!/bin/bash | 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 | # Funcție pentru afișarea modului de utilizare | ||
usage() { | usage() { | ||
echo "Usage: $0 [-r] [-b n1] [-s n2] | echo "Usage: $0 [-r] [-b n1] [-s n2] n" | ||
echo " -r Afișează numerele în ordine inversă (descrescătoare)" | echo " -r Afișează numerele în ordine inversă (descrescătoare)" | ||
echo " -b n1 Setează valoarea de început n1" | echo " -b n1 Setează valoarea de început n1" | ||
Linia 15: | Linia 20: | ||
reverse=false | reverse=false | ||
start=0 | start=0 | ||
end="" | |||
# Parsarea opțiunilor | # Parsarea opțiunilor | ||
while getopts ":rb:s:h" opt; do | while getopts ":rb:s:h" opt; do | ||
Linia 26: | Linia 31: | ||
;; | ;; | ||
s) | s) | ||
end=$OPTARG | |||
;; | ;; | ||
h) | h) | ||
Linia 32: | Linia 37: | ||
;; | ;; | ||
\?) | \?) | ||
echo " | echo "Opțiune invalidă: -$OPTARG" >&2 | ||
usage | usage | ||
;; | ;; | ||
:) | :) | ||
echo " | echo "Opțiunea -$OPTARG necesită un argument." >&2 | ||
usage | usage | ||
;; | ;; | ||
Linia 42: | Linia 47: | ||
done | done | ||
shift $((OPTIND -1)) | shift $((OPTIND -1)) | ||
# Verificare argument " | # Verificare argument "n" | ||
if [ | if [ -z "$1" ]; then | ||
echo "Lipseste argumentul ' | echo "Lipseste argumentul 'n'" | ||
usage | usage | ||
fi | |||
n=$1 | |||
# Setează sfârșitul (n2) dacă nu a fost specificat | |||
if [ -z "$end" ]; then | |||
end=$n | |||
fi | fi | ||
# Afișare numere în funcție de ordine | # Afișare numere în funcție de ordine | ||
if $reverse; then | if $reverse; then | ||
for ((i = | for ((i = end; i >= start; i--)); do | ||
echo "$i" | echo "$i" | ||
done | done | ||
else | else | ||
for ((i = start; i <= | for ((i = start; i <= end; i++)); do | ||
echo "$i" | echo "$i" | ||
done | done | ||
fi | 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. | |||
[[Bash_Pagina_72|Pagina anterioară]] | [[Bash_Pagina_74|Următoarea pagină]] | [[Bash_Pagina_72|Pagina anterioară]] | [[Bash_Pagina_74|Următoarea pagină]] |
Versiunea curentă din 27 octombrie 2024 14:26
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.