将批处理文件转换为shell脚本文件
问题描述:
我有批处理文件,我不知道shell脚本。 有人可以帮助这里。 将批处理文件转换为shell脚本文件
@echo off
echo "Program Name :" %0
rem echo "Next param :" %1
echo "Next param :" "Username/Password"
echo "User Id :" %2
echo "User Name :" %3
echo "Request ID :" %4
echo "File Name :" %5
echo "Entity Name :" %6
echo "Email Address :" %7
echo "Extract ID :" %8
echo "path name :" %9
cd %9
echo "Process Output files"
IF NOT EXIST C:\OraOutput GOTO MAPERROR
IF EXIST o%8.out (COPY o%8.out %5.csv) ELSE echo "Output file does not exists"
IF EXIST %5.csv (MOVE %5.csv C:\OraOutput\%5.cvs) ELSE echo "Could not move file to Share Drive"
GOTO ENDPROCESS
:MAPERROR
echo "The Share Directory has not been mapped Contact your System Administrator"
EXIT -1
:ENDPROCESS
echo "Process finished goodbye"
谢谢。
答
我假设或多或少的Bourne兼容外壳,如bash
,因为这是最常见的。要开始,这里就是你需要为了改变你的批处理脚本的Bourne风格的shell脚本,了解一些不同之处:
- 第一个区别是,执行的命令,默认情况下不回应(尽管你可以改变这一点) 。
- 评论以散列字符
#
开头。 -
cd
和echo
和exit
也存在于Bourne兼容shell中。 - 要测试文件是否存在,可以使用
[ -e
文件名]
。 -
IF
声明变得if
条件; then
真正的语句; else
虚假陈述; fi
,你可以有多个命令/用分号来代替真正的语句和虚假陈述分开陈述。 -
IF EXIST o%8.out (COPY o%8.out %5.csv) ELSE echo "Output file does not exists"
布赫纳兼容的外壳看起来像# I am assuming %8 means parameter 8 for the script if [ -e o$8.out ]; then cp o$8.out $5.csv; else echo "Output file does not exist"; fi
或替代压痕(分号可以用新的生产线来代替):
if [ -e o$8.out ]; then cp "o$8.out" "$5.csv" else echo "Output file does not exist" fi
注意,我们也引用参数
cp
如此我们可以在参数中使用空格。 - 你可以通过少许重组摆脱
goto
。您可以参考这个堆栈溢出问题(假设bash
或其他的Bourne shell脚本风格方言):Is there a "goto" statement in bash?
阅读任何[壳教程](http://www.grymoire.com/Unix/Sh.html)试着写剧本,带着一个具体的问题来到这里。 – khachik 2013-02-26 07:44:57
当我看到这个问题时,在右边我看到很多类似的问题,你可以参考。 – FooF 2013-02-26 08:00:49