Linux shell脚本启动和停止函数中出现意外的代码执行顺序
我有下面的脚本Linux shell脚本启动和停止函数中出现意外的代码执行顺序,linux,bash,shell,Linux,Bash,Shell,我有下面的脚本 #!/bin/bash #test1.sh echo "test ... " for i in 1 2 3 4 5 do #echo "Welcome $i times" done exit 0 输出是 test ... ./test11.sh: line 7: syntax error near unexpected token `done' ./test11.sh: line 7: `done' ./test10.sh: line 18: syntax err
#!/bin/bash
#test1.sh
echo "test ... "
for i in 1 2 3 4 5
do
#echo "Welcome $i times"
done
exit 0
输出是
test ...
./test11.sh: line 7: syntax error near unexpected token `done'
./test11.sh: line 7: `done'
./test10.sh: line 18: syntax error near unexpected token `done'
./test10.sh: line 18: ` done'
请注意,它首先打印,test…
,然后抱怨语法错误
但是在下面的脚本中
#test2.sh
#!/bin/bash
case "$1" in
'start')
echo "in start 1"
echo "in start 2"
echo "in start 3"
echo "test ... "
for i in 1 2 3 4 5
do
#echo "Welcome $i times"
done
;;
'stop')
echo "in stop"
;;
'restart')
stop ; echo "Sleeping..."; sleep 1 ;
echo "in restart"
;;
'status')
echo "in status"
;;
*)
echo
echo "Usage: $0 { start | stop | restart | status }"
echo
exit 1
;;
esac
exit 0
输出是
test ...
./test11.sh: line 7: syntax error near unexpected token `done'
./test11.sh: line 7: `done'
./test10.sh: line 18: syntax error near unexpected token `done'
./test10.sh: line 18: ` done'
脚本在第18行抱怨语法错误。因为它是一种脚本语言,所以应该逐行执行。在上面的代码中,执行应该首先转到开始
,然后继续逐行执行。因此,我希望输出消息应该首先打印[echo“in start 1”etc
],然后是语法错误
为什么上面两个shell脚本的行为不同?是否在开始执行之前首先分析shell脚本的错误 第二个示例中的for
循环嵌入在case
语句中,而不是作为顶级语句。整个case
语句需要解析才能执行,这意味着解析start
子句中的for
循环,即使$1
(展开时)不会导致选择start
根据定义,语法错误是无法解析的结果,而不是无法计算的结果。第二个示例中的for
循环嵌入在case
语句中,而不是作为顶级语句。整个case
语句需要解析才能执行,这意味着解析start
子句中的for
循环,即使$1
(展开时)不会导致选择start
根据定义,语法错误是无法解析的结果,而不是无法计算的结果