将批处理文件转换为shell脚本文件

将批处理文件转换为shell脚本文件,shell,Shell,我有批处理文件,但我不知道shell脚本。 有人能帮忙吗。 @echo off echo "Program Name :" %0 rem echo "Next param :" %1 echo "Next param :" "Username/Password" echo "User Id :" %2 echo "U

我有批处理文件,但我不知道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
    条件
    ;然后
    true语句
    ;否则
    虚假陈述;fi 您可以使用多个命令/语句,这些命令/语句用分号分隔,以代替true语句和false语句
  • 如果存在o%8.out(复制o%8.out%5.csv),则在与Bourne兼容的shell中回显“输出文件不存在”

    # 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
    
    或者使用替代缩进(分号可以替换为新行):

    注意,我们还引用了
    cp
    的参数,以便在参数中使用空格

  • 您可以通过少量的重组来摆脱
    goto
    。您可以参考此堆栈溢出问题(假设
    bash
    或其他Bourne shell样式的脚本方言):

  • 阅读任何内容,试着写剧本,带着一个特定的问题来到这里。当我看到这个问题时,在右边我看到了许多类似的问题,你可以参考。
    if [ -e o$8.out ]; then
        cp "o$8.out" "$5.csv"
    else
        echo "Output file does not exist"
    fi