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

Shell脚本语法错误修复:按前缀区分CSV执行拆分/复制操作

Shell脚本语法错误修复及优化

修复后的完整脚本

#!/bin/bash

count=2
FILENAME=test
TARGET_DIR="/usr/myprofiles/test"

# 确保目标目录存在,不存在则创建
mkdir -p "$TARGET_DIR"

for dir in /usr/myprofiles/*.csv
do
  # 判断当前CSV文件是否以login开头
  if [[ $(basename "$dir") == login*.csv ]]
  then
        # 按指定行数拆分当前文件,临时文件前缀为xyz
        split -l "$count" "$dir" xyz
        n=1
        for f in xyz*          
        do    
            # 将拆分后的内容追加到目标文件(命名为test1、test2...)
            cat "$f" >> "$TARGET_DIR/${FILENAME}${n}"
            rm "$f"
            ((n++))                
        done
  else
    # 非login开头的CSV文件直接复制到目标目录
    cp "$dir" "$TARGET_DIR/"
  fi
done

原脚本的错误点及修复说明

  1. 变量赋值语法错误:
    Shell变量赋值时等号两侧不能有空格,原脚本中count = 2、FILENAME = test需改为count=2、FILENAME=test。

  2. if条件判断错误:

    • if[-f $*Login*.csv]缺少必要空格,if与[、[与条件之间必须有空格;
    • 原判断逻辑错误,应针对当前循环的文件$dir判断是否以login开头,改用$(basename "$dir") == login*.csv来精准匹配文件名前缀。
  3. 条件结构混乱:
    原脚本错误地在else前添加了fi,破坏了if...then...else...fi的完整结构,需移除多余的fi并调整结构。

  4. 变量引用与语法残缺:

    • split命令中使用了未定义的$login.csv,应替换为当前循环的文件路径"$dir";
    • cp命令末尾的$FILENAME$是语法残缺,非login开头的文件直接保留原文件名复制到目标目录即可。
  5. 循环语法错误:
    ((n++))的位置错误,应放在内层for循环的done之前,否则会触发语法错误。

  6. 缺失目录检查:
    添加mkdir -p "$TARGET_DIR"确保目标目录存在,避免因目录不存在导致复制、写入操作失败。

内容的提问来源于stack exchange,提问作者Devi R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:01:21