Я рекомендую вам программное обеспечение Dia, которое вы можете легко получить из программного центра Ubuntu. Это простое приложение для перетаскивания для ER или любой другой UML или блок-схемы и содержит количество других фигур. Для получения дополнительной информации посетите эту ссылку.
Посмотрите на оператор shift. Он сдвигает аргументы 2 и далее в позиции 1 и далее, отбрасывая аргумент 1.
sum () {
local total=0;
while [ $# -gt 0 ]; do
total=$(($total + $1))
shift
done
echo $total
}
Вы можете использовать рекурсивное определение, которое завершается, когда sum вызывается без аргументов. Мы используем тот факт, что test без аргументов имеет значение false.
sum () {
test $1 && echo $(( $1 + $(shift; sum $@) )) || echo 0
}
Попробуйте это:
SUM () {
[ $# -lt "2" ] && return 1
for par in $@; do
local sum=`expr $sum + $par`
done
echo $sum
return 0
}
SUM 3 4 5
SUM 3 4 5 1 1 1 1 2 3 4 5
Это выведет 12 и 30.
$@ относится к параметру, $# возвращает количество параметров, в этом случае 3 или 11.
Протестировано на linux redhat 4
Вы могли бы просто использовать небольшой цикл:
sum(){
t=0;
for i in "$@"; do t=$((t + i )); done
echo $t;
}
Лично, однако, я просто использовал бы perl или awk:
sum(){
echo "$@" | perl -lane '$s+=$_ for @F; print $s'
}
или [ ! d2]
sum(){
echo "$@" | awk '{for(i=1; i<=NF; i++){k+=$i} print k}'
}
Использовать 0 в качестве значений по умолчанию от $ 1 до $ 9:
SUM() {
echo "The sum is $((${1:-0}+${2:-0}+${3:-0}+${4:-0}+${5:-0}+${6:-0}+${7:-0}+${8:-0}+${9:-0}))"
}
From man bash:
${parameter:-word}
Use Default Values. If parameter is unset or null, the expansion
of word is substituted. Otherwise, the value of parameter is
substituted.
Примеры:
$ SUM
Сумма равна 0
$ SUM 1 2
Сумма равна 3
$ SUM 1 1 1 1 1 1 1 1 1
Сумма равна 9
Тот же вывод с awk:
SUM() {
echo -e ${@/%/\\n} | awk '{s+=$1} END {print "The sum is " s}'
}
Это также мое собственное решение, которое я попробовал и нашел:
SUM() {
echo "The sum is $(($1+$2+$[$3]+$[$4]+$[$5]+$[$6]+$[$7]+$[$8]+$[$9]))"
}
$ SUM 4 6 5
The sum is 15
Но ответ @ muru хороший.