Bash dodawanie argumentów

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Qloda
Piegowaty Guziec
Piegowaty Guziec
Posty: 1
Rejestracja: 16 lis 2017, 10:12
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Architektura: x86

Bash dodawanie argumentów

Post autor: Qloda » 16 lis 2017, 10:21

Witam
Mam następujący skrypt dodawania argumentów


Próbuje zmodyfikować go tak, aby wypisał mi wszystkie poprawne argumenty przed podaniem wyniku obliczeń. Oraz w przypadku wykrycia niewłaściwego argumentu podał w komunikacie o błędzie ten argument (numer i wartość) oraz, aby pominą go w obliczeniach.
Proszę o pomoc
Ostatnio zmieniony 17 lis 2017, 13:54 przez Qloda, łącznie zmieniany 1 raz.
krzynycz
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 22 mar 2010, 14:35
Płeć: Mężczyzna
Wersja Ubuntu: 17.10
Środowisko graficzne: GNOME
Architektura: x86_64

Re: Bash dodawanie argumentów

Post autor: krzynycz » 17 lis 2017, 09:24

Moja pierwsza propozycja:

Kod: Zaznacz cały

#!/bin/sh

if [ $# -eq 0 ]
then
  echo "Poprawne wywolanie: $0 arg1 arg2 ..."
  exit 1
fi

echo "Lista argumentów:"
suma=0
pozycja=0
while [ $1 ]
do
  pozycja=$((pozycja + 1))
  suma=$(($suma + $1))
  if [ $(($1+0)) -ne 0 ]
    then
      echo "arg$pozycja: $1"
    elif [ $1 = "0" ] 
    then
      echo "arg$pozycja: $1"
    else
      echo "arg$pozycja: $1 - nie jest liczbą"
  fi
  shift
done
echo "Suma argumentow wynosi: $suma"

krzynycz
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 22 mar 2010, 14:35
Płeć: Mężczyzna
Wersja Ubuntu: 17.10
Środowisko graficzne: GNOME
Architektura: x86_64

Re: Bash dodawanie argumentów

Post autor: krzynycz » 17 lis 2017, 10:02

Druga propozycja jest bardziej elegancka bo wstępnie kontroluje przed sumowaniem format liczby poleceniem grep:

Kod: Zaznacz cały

#!/bin/sh

if [ $# -eq 0 ]
then
  echo "Poprawne wywolanie: $0 arg1 arg2 ..."
  exit 1
fi

echo "List argumentow:"
suma=0
pozycja=0
while [ $1 ]
do
  pozycja=$((pozycja + 1))
  echo $1 | grep -E '^-?[0-9]{1,}$' > /dev/null
  if [ $? -eq 0 ]
  then
    echo "arg$pozycja: $1"
    suma=$(($suma + $1))
  else
    echo "arg$pozycja: $1 - nie jest liczbą"
  fi
  shift
done
echo "Suma argumentow wynosi: $suma"
ODPOWIEDZ

Wróć do „Programowanie”