Linux Shell脚本故障求助:文本单词数字分类统计异常
问题排查与修正方案
你的脚本存在不少语法和逻辑问题,我来逐个拆解并给出修复后的版本:
主要错误点梳理
- Shebang格式错误:脚本第一行的
#!bin/bash缺少开头斜杠,正确写法是#!/bin/bash,而且你把它和变量定义写在了同一行,直接导致语法解析失败。 - 循环语法混乱:
while read line; dp里的dp是笔误,应该是do;同时你的循环闭合逻辑完全错误,done的位置不对。 - 变量赋值语法错误:Shell中变量赋值不能有空格,且左侧变量名前不能加
$,比如$wordcount = $wordcount + 1是完全错误的,正确自增写法是((wordcount++))或者wordcount=$((wordcount+1))。 - 缺失类型判断逻辑:你没有区分单词和数字,直接把每行内容同时计入单词和数字统计,完全不符合需求。
- 文件路径错误:
/words/wordsfile.txt是绝对路径,除非你预先创建了/words和/numbers目录,否则必然报错;更合理的是使用当前目录下的文件,或者先创建对应目录。 - 变量名拼写错误:最后输出的
$numberscount应该是$numbercount,少了一个字母r。 - 变量引用错误:你写的
echo word >> ...是输出字符串word,而不是变量$word,正确写法是echo "$word"。
修正后的完整脚本
#!/bin/bash # 初始化统计变量 wordcount=0 numbercount=0 # 清空目标文件(避免多次执行时内容累加) > wordsfile.txt > numbersfile.txt # 读取输入直到EOF while read -r line; do # 遍历每行的每个元素 for item in $line; do # 判断当前元素是否为纯数字 if [[ $item =~ ^[0-9]+$ ]]; then # 数字处理:计数+写入文件 ((numbercount++)) echo -n "$item " >> numbersfile.txt else # 单词处理:计数+写入文件 ((wordcount++)) echo -n "$item " >> wordsfile.txt fi done done # 在文件末尾添加换行,保证格式整洁 echo >> wordsfile.txt echo >> numbersfile.txt # 输出最终统计结果 echo "$wordcount WORDS, $numbercount NUMBERS"
测试验证
- 准备输入文件
assignment6file.txt,内容为:
123 apple 456 boy 789
- 执行脚本:
./assignment6.sh < assignment6file.txt - 预期输出:
2 WORDS, 3 NUMBERS
- 检查文件内容:
wordsfile.txt:apple boynumbersfile.txt:123 456 789
额外说明
- 使用
read -r可以避免反斜杠被转义,提升读取安全性。 - 开头清空目标文件是为了防止多次执行脚本时,内容重复累加。
echo -n用于不自动添加换行符,让同类型内容在一行显示,最后手动添加换行保证文件格式规范。
内容的提问来源于stack exchange,提问作者Joi McClain
相关产品推荐
相关产品推荐

