首页 > 解决方案 > unix 中的自定义脚本输出

问题描述

有一个问题是从脚本 CLI 添加参数,然后以以下格式显示:

10 + 20 + 30 = 60

如果输入是:

$ sum_for 10 20 30

我写的脚本是:

#!/bin/bash
sum=0
for i in $@;
  do 
    sum=$((sum+i)); 
  done


echo $sum
exit 0

它只是输出总和,而不是如上所述。你能帮我如何打印如上所述的输出吗?

标签: bashshellunix

解决方案


您可以即时构建输出字符串,例如:

#!/bin/bash

((sum = 0))                      # I like spacing expressions :-)
text=""                          # Initial text
prefix=""                        #   and term prefix.
for i in "$@" ; do               # Handle each term
    ((sum = sum + i))            #   by accumulating
    text="${text}${prefix}${i}"  #   and adding to expression.
    prefix=" + "                 # Adjust term prefix to suit.
  done

echo "${text} = ${sum}"          # Output expression and result.

因此,这可以在行动中看到:

pax> ./sum_for 5 6 72
5 + 6 + 72 = 83

而且,如果您想让它对错误的输入数据相对稳健,您可以尝试:

#!/bin/bash

((sum = 0))
text=""
prefix=""
for i in "$@" ; do
    if [[ $i =~ ^-?[0-9]+$ ]] ; then
        ((sum = sum + i))
        text="${text}${prefix}${i}"
        prefix=" + "
    else
        echo "WARNING, ignoring non-integer '${i}'."
    fi
done

echo "${text} = ${sum}"

显示带有各种无效数据项的示例运行:

pax> ./some_for 5 6 72 x 6x x6 -3 +4 --4 ++7 -+3 +-4 "" + - 4
WARNING, ignoring non-integer 'x'.
WARNING, ignoring non-integer '6x'.
WARNING, ignoring non-integer 'x6'.
WARNING, ignoring non-integer '+4'.
WARNING, ignoring non-integer '--4'.
WARNING, ignoring non-integer '++7'.
WARNING, ignoring non-integer '-+3'.
WARNING, ignoring non-integer '+-4'.
WARNING, ignoring non-integer ''.
WARNING, ignoring non-integer '+'.
WARNING, ignoring non-integer '-'.
5 + 6 + 72 + -3 + 4 = 84

这不允许您可能希望允许的某些值,但我只选择了最简单形式的数字,例如4代替+4,或--4,甚至++++----+--+4:-)

更改允许的内容是更改正则表达式过滤器的(相对)简单的事情。


推荐阅读