Как перебрать серию чисел, переданных в качестве аргументов функции bash, а затем вернуть количество четных чисел? - PullRequest
0 голосов
/ 16 марта 2020
#this function checks if a number is even
#checks only 1 argument

function isiteven {
 if [[ $1%2 -eq 0 ]]
 then
  echo "1"
 else
  echo "0"
 fi 
}

Мне нужно использовать этот файл как источник для другого файла и создать функцию, которая возвращает количество четных чисел, переданных в функцию под названием 'nevens'.

Я попробовал этот код:

source program6.sh

function nevens {
for check in $@
 do
  if [[ -e isiteven$# ]]
  then
   let count=count+1
  fi
 done

echo $count
}

Я запутался, какой знак оболочки использовать для итерации для l oop и проверки оператора if.

1 Ответ

1 голос
/ 16 марта 2020

Поскольку вы выводите 0 или 1 из isiteven, вы можете просто безоговорочно добавить выходные данные функции:

#!/bin/bash

source program6.sh

function nevens {
  local count=0
  for check; do # implicit `for check in "$@"`
    (( count += $(isiteven $check) )) # add output of `isiteven $check`
  done
  echo $count
}

Это предполагает, что все ваши данные верны , так что если это не гарантировано, вам нужно будет добавить несколько проверок.

Обратите внимание, что в этом сценарии используются несколько нестандартных функций, которые не будут работать во всех оболочках:

  • source program6.sh вместо стандартного ключевого слова . program6.sh
  • function вместо просто nevens () {
  • local ключевого слова для объявления локальной переменной внутри функции
  • += вместо стандартных count=$(( count + $(isiteven $check) ))
...