Bash Pagina 73: Diferență între versiuni

De la Wiki Linux Advanced
Sari la navigare Sari la căutare
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] stop"
   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
  stop=10
  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)
       stop=$OPTARG
       end=$OPTARG
       ;;
       ;;
     h)
     h)
Linia 32: Linia 37:
       ;;
       ;;
     \?)
     \?)
       echo "Invalid option: -$OPTARG" >&2
       echo "Opțiune invalidă: -$OPTARG" >&2
       usage
       usage
       ;;
       ;;
     :)
     :)
       echo "Option -$OPTARG requires an argument." >&2
       echo "Opțiunea -$OPTARG necesită un argument." >&2
       usage
       usage
       ;;
       ;;
Linia 42: Linia 47:
  done
  done
  shift $((OPTIND -1))
  shift $((OPTIND -1))
  # Verificare argument "stop"
  # Verificare argument "n"
  if [[ $1 != "stop" ]]; then
  if [ -z "$1" ]; then
   echo "Lipseste argumentul 'stop'"
   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 = stop; i >= start; i--)); do
   for ((i = end; i >= start; i--)); do
     echo "$i"
     echo "$i"
   done
   done
  else
  else
   for ((i = start; i <= stop; i++)); do
   for ((i = start; i <= end; i++)); do
     echo "$i"
     echo "$i"
   done
   done
  fi
  fi


[[Bash_Pagina_72|Pagina anterioară]] | [[Bash_Pagina_74|Următoarea pagină]]
[[Bash_Pagina_72|Pagina anterioară]] | [[Bash_Pagina_74|Următoarea pagină]]

Versiunea de la data 27 octombrie 2024 14:25

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


Pagina anterioară | Următoarea pagină