编写的60秒错误检测Shell脚本报unexpected token fi错误求助
Shell脚本"unexpected token fi"错误修复
核心问题排查
你的脚本语法本身无明显错误,但以下两个常见问题会触发该报错:
- 变量
c未初始化:未定义的变量可能干扰bash语法解析逻辑,引发异常。 - Windows风格换行符(CRLF):若脚本在Windows环境编辑后上传到Linux/Unix系统,CRLF换行符会被bash误解析为非法语法字符,导致"unexpected token fi"错误。
修复步骤
1. 初始化变量c
在脚本开头添加c=0,确保变量使用前已定义。
2. 转换换行符为Unix风格(LF)
如果是换行符问题,用以下方式修复:
- 使用
dos2unix工具转换:dos2unix your_script.sh - 若无
dos2unix,用sed命令替换:sed -i 's/\r$//' your_script.sh
修复后的完整脚本
#!/bin/bash a=10 b=5 p=60 c=0 while [[ $p -ne 0 ]]; do t=$(date) if [[ $a -ne $b ]] then c=$((c+1)) fi p=$((p-1)) sleep 1 done if [[ $c -ne 0 ]]; then echo "running in $t" c=0 fi
内容的提问来源于stack exchange,提问作者Just
相关产品推荐
相关产品推荐

