0

我有批处理文件,但我不知道 shell 脚本。有人可以在这里帮忙吗。

      @echo 关闭
      回显“程序名称:”%0
      rem echo "下一个参数:" %1
      echo "下一个参数:" "用户名/密码"
      回显“用户 ID:”%2
      回显“用户名:”%3
      echo "请求 ID:" %4
      echo "文件名:" %5
      回显“实体名称:”%6
      echo "电子邮件地址:" %7
      echo "提取 ID:" %8
      echo "路径名:" %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"

谢谢。

4

1 回答 1

0

我假设或多或少兼容 Bourne 的 shell,bash因为这是最常见的。首先,您需要了解以下一些差异,以便将批处理脚本转换为 Bourne 样式的 shell 脚本:

  1. 第一个区别是默认情况下不回显执行的命令(尽管您可以更改它)。
  2. 注释以散列字符开头#
  3. cd并且echoexit存在于 Bourne 兼容的 shell 中。
  4. 要测试文件是否存在,您可以使用[ -e file-name ]
  5. IFstatement 成为if 条件 ; then true-statement ; else false-statement ; fi ,您可以使用分号分隔的多个命令/语句代替true-statementfalse-statement
  6. IF EXIST o%8.out (COPY o%8.out %5.csv) ELSE echo "Output file does not exists"在 Bourne 兼容的外壳中看起来像

    # 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以便我们可以在参数中使用空格。

  7. 你可以摆脱goto一点一点的重组。您可以参考这个 Stack Overflow 问题(假设bash或其他 Bourne shell 风格的脚本方言):Is there a "goto" statement in bash?
于 2013-02-26T07:51:35.300 回答