UNIX下Shell脚本变量未找到等报错如何排查修复?
问题1:C Shell脚本运行时提示“var not found [No such file or directory]”
常见原因
- 变量引用时未加
$符号:C Shell中直接写变量名会被当作命令执行,而非引用变量值 - 变量未提前定义:使用变量前没有通过
set命令初始化 - 变量名拼写错误:引用的变量名和定义时不一致
解决方法
- 引用变量时必须加
$,比如要使用变量var,需写成$var - 确保变量在使用前已定义,例如:
set var="example value" echo $var - 仔细核对变量名拼写,避免大小写或字符错误
问题2:Bourne Shell脚本运行出现两个错误
错误原因分析
./myScript.sh[5]: AGE: not found:
Bourne Shell中变量赋值不能包含空格,AGE = 16里的空格会被解析为执行命令AGE,参数为=和16,系统找不到名为AGE的命令,因此报错。./myScript.sh[7]: 15: cannot open:- 脚本混用了C Shell的
if (...) then语法,Bourne Shell的if需要用[ ]或[[ ]]包裹条件 <在Shell中是重定向符号,"$AGE" < 15会被解析为将文件15的内容输入到$AGE对应的命令,而文件15不存在,导致报错;同时数字比较不能用<,需用-lt(小于)这类比较运算符
- 脚本混用了C Shell的
修正后的脚本
#!/bin/sh NAME="Joshua" CAR="Volvo" AGE=16 if [ "$AGE" -lt 15 ]; then echo "$NAME is not old enough to drive a $CAR" else echo "$NAME is old enough to drive a $CAR" fi
关键修正点
- 变量赋值去掉空格:
AGE=16 - 使用Bourne Shell标准
if语法,用[ ]包裹条件,数字比较用-lt - 为避免字符串拼接问题,建议将
echo的参数用双引号包裹
内容的提问来源于stack exchange,提问作者TheQuietlyDepressedCS_Student
相关产品推荐
相关产品推荐

