bash - 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
它只是输出总和,而不是如上所述。你能帮我如何打印如上所述的输出吗?
解决方案
您可以即时构建输出字符串,例如:
#!/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
:-)
更改允许的内容是更改正则表达式过滤器的(相对)简单的事情。
推荐阅读
- c# - API 混合了来自不同设备的数据
- angular - 如何在 Angular 6 中翻译动态属性“[attr]”?
- php - 在 PHP 中显示 SOAP API 结果
- mysql - MYSQL 查询上的 INDEX
- java - OpenAM OpenDJ dockerisation 问题:无法使用旧数据源重新部署
- sql - 使用oracle在一个表中根据最大值连接三个表
- css - CSS:在行固定位置设置3个项目列表
- angular - 将 FormControl 传递给子组件 - 未指定名称的表单控件没有值访问器
- html - .htaccess 中的 Access-Control-Allow-Origin 在子目录中不起作用
- docker - 为什么 docker 为所有容器提供不同范围的 IP 地址以及如何将其设为默认值?