batch转换shell询问

sh/bash/dash/ksh/zsh等Shell脚本
回复
test121
帖子: 1
注册时间: 2020-05-25 14:03

batch转换shell询问

#1

帖子 test121 » 2020-05-25 14:12

batch批次如下:
SET SYSDATE=%YEAR%%MONTH%%DAY%
SET DATETIMEF=%HOUR%%MIN%%SECS%
SET LOG_FILE=compare_1-1_%SYSDATE%_%DATETIMEF%.log

set i=-1
if %ComputerName%==AAA set Parameter_file=..\parameter\edw002m_parameterD.txt
if %ComputerName%==BBB set Parameter_file=..\parameter\edw002m_parameterU.txt
if %ComputerName%==CCC set Parameter_file=..\parameter\edw002m_parameterP.txt
if %ComputerName%==DDD set Parameter_file=..\parameter\edw002m_parameterP.txt

echo %Parameter_file%

echo %data% %time% > %LOG_FILE%
echo %ComputerName% >> %LOG_FILE%
echo %Parameter_file% >> %LOG_FILE%

for /f "delims=" %%a in ('more ^< %Parameter_file%') do (
set/a i+=1 & for /f %%z in ('echo/%%i%%') do (
if "%%z"=="0" set MSSQL_NAME=%%a
if "%%z"=="1" set MSSQL_USER=%%a
if "%%z"=="2" set MSSQL_PWD=%%a
if "%%z"=="3" set EVOICE_SERVER=%%a
)
)

if "%%z"=="0" set MSSQL_NAME=AAA
if "%%z"=="1" set MSSQL_NAME=BBB
if "%%z"=="2" set MSSQL_NAME=CCC
echo %MSSQL_NAME%
echo --------------- SP 0 execution begining %time% -------------- >> %LOG_FILE%
sqlcmd -S%MSSQL_NAME% -U%MSSQL_USER% -P%MSSQL_PWD% -icompare_exec0.sp>> %LOG_FILE%
echo --------------- SP 0 execution end %time% -------------- >> %LOG_FILE%

goto check
:end_check
goto COPY_EVOICE
:end_COPY_EVOICE
goto exit

:check
if exist D:\EDW\log\*.* goto end_check
echo %date% %time% file not exist >> %LOG_FILE%
goto exit

:COPY_EVOICE

:exit
move %LOG_FILE% ..\log\
exit

--------------------------------------------------------------
>>>>>>>>>>>>>>自己转换的shell<<<<<<<<<<<<<<<<
--------------------------------------------------------------
SYSDATE=$(date +"%Y-%m-%d")
DATETIMEF=$(date +"%H%M%S")
LOG_FILE=compare_1-1_$SYSDATE$DATETIMEF.log

i=-1
if [$ComputerName=="AAA"]; then
Parameter_file=../parameter/edw002m_parameterD.txt
elif [$ComputerName=="BBB"]; then
Parameter_file=../parameter/edw002m_parameterU.txt
elif [$ComputerName=="CCC"]; then
Parameter_file=../parameter/edw002m_parameterP.txt
else [$ComputerName=="DDD"]; then
Parameter_file=../parameter/edw002m_parameterP.txt
fi

Sysdate=$(date +"%Y-%m-%d%H%M%S")

echo $Parameter_file

echo $Sysdate > $LOG_FILE
echo $ComputerName >> $LOG_FILE
echo $Parameter_file >> $LOG_FILE

for \f "delims=" %%a in ('more ^< $Parameter_file'); do (
set\a i+=1 & for \f %%z in ('echo\%%i%%'); do (
if ["%%z"=="0"]; then
MSSQL_NAME=%%a
elif ["%%z"=="1"]; then
MSSQL_USER=%%a
elif ["%%z"=="2"]; then
MSSQL_PWD=%%a
else ["%%z"=="3"]; then
EVOICE_SERVER=%%a
fi
)
)


if ["%%z"=="0"]; then
MSSQL_NAME=DEVW16005
elif ["%%z"=="1"]; then
MSSQL_NAME=UATW16059
else ["%%z"=="2"]; then
MSSQL_NAME=HQ0W16133
fi

echo $MSSQL_NAME
echo "--------------- SP 0 execution begining $time --------------" >> $LOG_FILE
sqlcmd -S$MSSQL_NAME -U$MSSQL_USER -P$MSSQL_PWD -icompare_exec0.sp>> $LOG_FILE
echo "--------------- SP 0 execution end $time --------------" >> $LOG_FILE

goto check
:end_check
goto COPY_EVOICE
:end_COPY_EVOICE
goto exit

:check
if exist D:/EDW/log/*.* goto end_check
echo $Sysdate file not exist >> $LOG_FILE
goto exit

:COPY_EVOICE

:exit
move $LOG_FILE ../log/

exit

>>>>>>>>>>>>>>>>>>>>>>>>请大神帮忙改正!!!<<<<<<<<<<<<<<<<<<<<<<
:Cry :Sad :What
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: batch转换shell询问

#2

帖子 astolia » 2020-05-25 15:43

你想搞转换,至少要先清楚batch代码是在做什么事吧?一看你就是遇到for就懵了。
你如果不知道for语句的语法可以先学一下 https://www.cnblogs.com/adforce/p/3282591.html
for的那段看着复杂,实际上做的事情很简单:从配置文件里提取出前4行赋值给不同的变量。它写那么多是因为batch里面缺乏文本处理的工具,在linux下面就简单多了。直接用

代码: 全选

sed -n '1p' 文件名
就可以提取出第一行,以此类推。
至于后面的goto和标签,shell中没有这种东西,直接改成if else结构就行了
回复