Strona 1 z 1

Bash dodawanie argumentów

: 16 lis 2017, 10:21
autor: Qloda
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

Re: Bash dodawanie argumentów

: 17 lis 2017, 09:24
autor: krzynycz
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"


Re: Bash dodawanie argumentów

: 17 lis 2017, 10:02
autor: krzynycz
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"