我是shell脚本的新手,我的问题非常简单。 在下面的代码中":go_start" excutes直到":setpython" " setpython"执行直到代码末尾的调用函数。
if X == "somthing" goto setpython
:go_start
rem ------------------------------Debug--------------------------------------
IF "%debug%"=="1" (
ECHO SiL Debug on
SET DEBUG_SOFTCAR=1
) ELSE (
ECHO SiL Debug off
SET DEBUG_SOFTCAR=0
)
rem -----------------------------------------------------------------------------------
IF "%env%"=="S" (
IF "%plat%"=="abc" (
md dir
copy srt drt
copy art drt
copy srt drt
copy srt drt
)
IF "%plat%"=="efg" (
md dir
copy srt drt
copy art drt
copy srt drt
copy srt drt
)
)
rem -------------------------------SiL-----------------------------
IF NOT "%env%"=="S" goto setpython
set cwd=%cd%
set PAR_PATH=Path
cd %PAR_PATH%
set A2L_PATH=path2
for %%i in (*.par) do ccperl perl.pl -a2l=%A2L_PATH%\hn1.a2l -par=%%~ni.par -svl=%%~ni.svl
cd %cwd%
rem -----------------------------------------------------------------------------------
:setpython
SET SC_DRIVE_LETTER=%CD:~0,2%
SET PATH_SCR_SC=path3
SET PYTHONPATH=python_path
rem ------------------------------PYTHON PARSER----------------------------------------
IF "%env%"=="H" SET testenv=_H
IF "%env%"=="S" SET testenv=
IF %LOAD_XML_FILE%==1 (
DO something
)
IF %GenAuto%==1 (copy srt drt)
set pyt=python path
for /f %%i in ('call %pyt%') do set gen_output=%%i
SET SKRIPT_PATH=op path
echo Generated files are here: %SKRIPT_PATH%
IF %GenAuto%==1 (
Do something
)
rem -----------------------------------------------------------------------------------
CALL Final.bat

并且在代码中间"如果不是"%env%" ==" S" goto setpython",在执行setpython之后,是否会返回并执行其余的代码? 我有理解问题,直到执行一个函数(不确定在shell脚本中调用它是什么)。
答案 0 :(得分:1)
脚本中唯一的“call”语句是最后一个,用于临时传输到Final.bat
脚本。否则,脚本从上到下没有循环,没有转到后退等等。
当脚本执行时,它会传递go_start
标签,然后向下行到
IF NOT "%env%"=="S" goto setpython
它可能(取决于变量%env%
的值)进入下一行(如果它不是S
)或跳转到setpython
标签。如果它进入下一行,它将执行每一行直到setpython
。在任何一种情况下,一旦达到setpython
,它就会继续,执行每一行。
还有一些其他“if”陈述,例如,
IF %GenAuto%==1 (
Do something
)
行
Do something
可能(或可能不)执行,具体取决于测试的变量(%GenAuto%
)的值。
供参考: Using batch files