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
原脚本的错误点及修复说明
变量赋值语法错误:
Shell变量赋值时等号两侧不能有空格,原脚本中count = 2、FILENAME = test需改为count=2、FILENAME=test。if条件判断错误:
if[-f $*Login*.csv]缺少必要空格,if与[、[与条件之间必须有空格;- 原判断逻辑错误,应针对当前循环的文件
$dir判断是否以login开头,改用$(basename "$dir") == login*.csv来精准匹配文件名前缀。
条件结构混乱:
原脚本错误地在else前添加了fi,破坏了if...then...else...fi的完整结构,需移除多余的fi并调整结构。变量引用与语法残缺:
split命令中使用了未定义的$login.csv,应替换为当前循环的文件路径"$dir";cp命令末尾的$FILENAME$是语法残缺,非login开头的文件直接保留原文件名复制到目标目录即可。
循环语法错误:
((n++))的位置错误,应放在内层for循环的done之前,否则会触发语法错误。缺失目录检查:
添加mkdir -p "$TARGET_DIR"确保目标目录存在,避免因目录不存在导致复制、写入操作失败。
内容的提问来源于stack exchange,提问作者Devi R
相关产品推荐
相关产品推荐

