新手常见的Shell脚本错误与解决方法
1. 脚本间变量传递问题
在编写Shell脚本时,有时会遇到需要在脚本间传递变量的情况。但要注意,导出的环境变量并非全局共享,它们是单向通信的。所有导出的环境变量会在Linux或Unix(子)进程调用时一起被传递(可查看fork(2)手册页),但没有机制将这些环境变量传回父进程。
解决办法是,要对脚本进行合理的结构设计,避免不必要的变量传递。可以明确地在第二个脚本中输出结果,让第一个脚本使用$( )操作符(老版本Shell用户可用`` )来调用第二个脚本。例如:
$ cat second.sh printf "%b" "in second\n" >&2 printf "initially VAL=%d\n" $VAL >&2 VAL=12 printf "changed so VAL=%d\n" $VAL >&2 echo $VAL $在第一个脚本里,./second.sh这一行要改成VAL=$(./second.sh),并且第二个脚本要将最终值(且只能是最终值)输出到标准输出(可将其他消息重定向到标准错误输出)。
2. 赋值时忘记加引号导致 “command not found” 错误
问题表现:脚本给变量赋值时,运行脚本,Shell会报告赋值部分的某个值 “comm