Bash脚本While循环语法错误排查求助
Bash脚本While循环语法错误排查求助
看起来你的脚本出现的语法错误大概率是换行符格式不兼容导致的,咱们一步步排查解决:
最可能的原因:Windows换行符干扰
如果你的脚本是在Windows系统下编辑的,默认会使用CRLF(\r\n)作为换行符,但Linux/Unix环境下的bash只识别LF(\n)换行符。这种情况下,脚本每行末尾会多一个隐藏的\r字符,导致bash解析done语句时出现异常,抛出你看到的语法错误。
解决方法:
- 用
dos2unix工具转换脚本格式:dos2unix copyAndCreate.sh - 如果没有
dos2unix,可以用sed命令手动去除换行符里的\r:sed -i 's/\r$//' copyAndCreate.sh - 后续编辑脚本时,记得在编辑器(比如VS Code、Notepad++)里将换行符设置为「LF」格式,避免再次出现这个问题。
额外的脚本优化建议(让代码更健壮)
虽然以下内容不是直接导致本次错误的原因,但能提升脚本的稳定性和效率:
- 引用文件名变量时加上双引号,避免后续文件名包含空格或特殊字符时出问题:
将done < $filename修改为:done < "$filename" find命令中的-name "*"可以省略,因为默认就是匹配所有文件;- 可以直接通过管道将
find的输出传给while循环,省去中间文件的生成,更高效:#!/bin/bash find FileFrom -type f | while read -r line; do echo "Name read from file - $line" done
备注:内容来源于stack exchange,提问作者Atul
相关产品推荐
相关产品推荐

