Bash unix中的自定义脚本输出

Bash unix中的自定义脚本输出,bash,shell,unix,Bash,Shell,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))#我喜欢空格表达式

在脚本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))#我喜欢空格表达式:-)
text=”“#初始文本
前缀=”“#和术语前缀。
对于“$@”中的i;处理好每个学期吗
(sum=sum+i))#通过累加
text=“${text}${prefix}${i}”并添加到表达式中。
prefix=“+”#调整术语前缀以适应。
完成
echo“${text}=${sum}”#输出表达式和结果。
这可以从行动中看出:

pax>/sum\u 5 6 72
5 + 6 + 72 = 83

而且,如果您想使其对不良输入数据具有相对鲁棒性,您可以尝试:

#/bin/bash
((总和=0))
text=“”
prefix=“”
对于“$@”中的i;做
如果[[$i=~^-?[0-9]+$];然后
((总和=总和+i))
text=“${text}${prefix}${i}”
前缀=“+”
其他的
echo“警告,忽略非整数'${i}'
fi
完成
回显“${text}=${sum}”
显示包含各种无效数据项的示例运行:

pax>/some_为5 6 72 x 6 x x6-3+4--4++7-+3+-4”“++-4
警告,忽略非整数“x”。
警告,忽略非整数“6x”。
警告,忽略非整数“x6”。
警告,忽略非整数“+4”。
警告,忽略非整数'--4'。
警告,忽略非整数“++7”。
警告,忽略非整数'-+3'。
警告,忽略非整数'+-4'。
警告,正在忽略非整数“”。
警告,忽略非整数“+”。
警告,忽略非整数“-”。
5 + 6 + 72 + -3 + 4 = 84
这不允许您可能希望允许的某些值,但我只选择了最简单形式的数字,如
4
而不是
+4
,或
--4
,甚至
+++++--+4
:-)


更改允许的内容(相对而言)很简单,只需更改正则表达式筛选器。

使用
printf
可以执行以下操作

#!/bin/bash

sum=0
for ((i=1; i <= $#; i++))
do
    ((sum += ${!i}))                                  # sum with indirection
    printf '%*.*s%d' 0 $(( i==1 ? 0 : 3)) ' + ' ${!i} # use variable width
done

printf ' = %d\n' $sum
#/bin/bash
总和=0

对于((i=1;i),您可以将所有shell参数作为awk中的变量传递,并在其BEGIN部分中获取所有shell参数的总和

cat code.sh
var="$@"
awk -v value="$var" 'BEGIN{z=split(value,a," ");for(i=1;i<=z;i++){s+=a[i]};print s}'
cat code.sh
var=“$@”
awk-v value=“$var””开始{z=split(值,a,”);用于(i=1;i