如何用Bash脚本逐行计算文件每行奇数之和并排查代码错误
Bash脚本逐行统计奇数和的问题修正
你编写的脚本存在以下几处语法和逻辑错误:
- 变量赋值语法错误:Bash中变量赋值等号两侧不能有空格,
sum = 0需要改为sum=0 - 缺少行内字段遍历逻辑:读取到整行内容后,没有拆分遍历该行的每一个数字,直接使用
$_不符合预期,$_实际存储的是上一条命令的最后一个参数,不是当前行的数值元素 - 条件判断语法错误:Bash的
if判断没有($条件){代码块}的写法,算术比较建议用(( ))包裹,同时不存在-nq比较符,判断奇数应该用数值取模不等于0,比较符为-ne或者!= - 算术运算写法错误:Bash中算术运算需要用
$(( ))包裹,直接写sum = sum + $_无法完成数值累加,应该写为sum=$((sum + 当前数字)) - 缺少文件名边界处理:读取文件时
$filename没有加双引号,遇到带空格的文件名会报错
修正后的完整可运行代码如下:
#!/bin/bash read -p "Enter file name:" filename while read -r line do sum=0 # 遍历当前行的每一个数字 for num in $line do # 判断是否为奇数 if (( num % 2 != 0 )) then sum=$((sum + num)) fi done echo $sum done < "$filename"
输入示例中的input.txt测试,输出结果与预期完全一致。
内容的提问来源于stack exchange,提问作者Yassin Mrd
相关产品推荐
相关产品推荐

