You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"

测试验证

  1. 准备输入文件assignment6file.txt,内容为:
123 apple 456 boy 789
  1. 执行脚本:./assignment6.sh < assignment6file.txt
  2. 预期输出:
2 WORDS, 3 NUMBERS
  1. 检查文件内容:
    • wordsfile.txt:
      apple boy 
      
    • numbersfile.txt:
      123 456 789 
      

额外说明

  • 使用read -r可以避免反斜杠被转义,提升读取安全性。
  • 开头清空目标文件是为了防止多次执行脚本时,内容重复累加。
  • echo -n用于不自动添加换行符,让同类型内容在一行显示,最后手动添加换行保证文件格式规范。

内容的提问来源于stack exchange,提问作者Joi McClain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:30:23