运行ksh脚本时如何解决'if'不匹配错误?
问题解决:Shell脚本出现'if'不匹配及': not found'错误
问题原因
你的脚本存在两个核心问题:
- 缺少解释器声明(shebang行):Linux无法确定用哪种shell执行脚本,若默认用sh,它不支持
[[ ]]这种扩展语法,直接导致if语句报错。 - 换行符格式错误:脚本在Windows环境下编辑,使用了CRLF(
\r\n)换行,而Linux仅识别LF(\n)换行。每行末尾的\r会被bash当成命令的一部分,系统找不到带\r的命令,因此出现: not found错误,同时破坏if语句的语法结构,引发不匹配问题。
修复步骤
- 添加shebang行:在脚本最开头添加一行,指定用bash解释器执行:
#!/bin/bash echo "The number of arguments passed " echo $#; echo "The passed arguments are " echo $@ count="$#" echo "Count is " echo $count; if [[ $count -eq "2" ]]; then echo "Correct"; else echo "Incorrect"; fi
转换换行符为Linux格式:
- 若系统安装了
dos2unix工具,执行:dos2unix MyScript - 若无
dos2unix,用sed命令去除每行末尾的\r:sed -i 's/\r$//' MyScript
- 若系统安装了
确保脚本有执行权限:
chmod +x MyScript重新运行脚本:
./MyScript "ABC" "XYZ"
执行后会正常输出:
The number of arguments passed 2 The passed arguments are ABC XYZ Count is 2 Correct
内容的提问来源于stack exchange,提问作者Nichole
相关产品推荐
相关产品推荐

