bash сценарии, принимающие целые числа в качестве аргументов и добавляющие их - PullRequest
0 голосов
/ 05 мая 2020

, поэтому у меня здесь есть этот код:

    #!/bin/bash
sum=0
for i;
do 
   if [ "$i" -ge 0 ]
   then
       sum=$((sum + i))
   else
       sum=$((sum + (i * -1)))
   fi
done
echo $sum

, поэтому пользователь вводит blin. sh 1 3 2 5-5-8, и программа должна принимать все целые числа, и сделайте их положительными, если отрицательными, а затем повторите сумму. но мой код bash отображает только 0 по неизвестной науке причине.

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Вот пример вашего скрипта.

#!/bin/bash

sum=0
for i ; do
   if [ "$i" -ge 0 ]
   then
      sum=$((sum + i))
   else
      sum=$((sum + (i * -1)))
   fi
done
echo $sum

Имя скрипта foo.sh. Теперь выполните этот скрипт с аргументами.

./foo.sh  1 3 2 5 -5 -8

Out put

24

Использование sh

sh ./foo.sh  1 3 2 5 -5 -8

Выход

24

Использование dash

dash ./foo.sh  1 3 2 5 -5 -8

Выход

24

Использование zsh

zsh ./foo.sh  1 3 2 5 -5 -8

Вывод

24

Я не вижу здесь ошибок.

1 голос
/ 05 мая 2020

используйте $ * для всех аргументов (без точки с запятой;)

for i in $*

ваш код работает для меня.

#!/bin/bash
sum=0
for i in $*
do
        if [ "$i" -ge 0 ] 
        then
                sum=$((sum + i))
        else
                sum=$((sum + (i * -1)))
        fi
done
echo $sum

enter image description here

...