У меня есть скрипт ниже,
#!/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'
Обратите внимание, что сначала он печатает, 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
Вывод
./test10.sh: line 18: syntax error near unexpected token `done'
./test10.sh: line 18: ` done'
Сценарий жалуется на синтаксическую ошибку на line:18
.Поскольку это язык сценариев, он должен выполняться построчно.В приведенном выше коде выполнение должно сначала перейти к start
, а затем продолжить построчное выполнение.Поэтому я ожидаю, что выходные сообщения должны быть напечатаны сначала [echo "in start 1" etc
], а затем синтаксическая ошибка.
Почему два вышеупомянутых сценария оболочки ведут себя по-разному?Сценарии оболочки анализируются на наличие ошибок перед началом выполнения?