0

我有一个简单的 .bat 文件

@echo; set nls_lang=russian_cis.ru8pc866  
@echo off

SET NLS_NUMERIC_CHARACTERS=. '


sqlldr.exe userid=PRB/0611@TSESTDB control=control_file.ctl LOG=fdb_log.log errors=100

cmd

我需要转换为 .sh 文件才能在基于 UNIX 的 pc 上运行。我开始阅读《BASH Programming - Introduction HOW-TO》(它适合初学者吗?),但它是一个临时性的任务,而且死线来了。

有人可以帮我转换文件吗?非常感谢!!!

4

1 回答 1

1

重写你的脚本。

  #!/bin/bash

  # @echo; 
  # set nls_lang=russian_cis.ru8pc866 
  export NLS_LANG=russian_cis.ru8pc866

  # not needed @echo off

  # SET NLS_NUMERIC_CHARACTERS=. '
  export NLS_NUMERIC_CHARACTERS='.'

  PATH="/path/to/sqlDir/install:${PATH}"
  # sqlldr.exe userid=PRB/0611@TSESTDB control=control_file.ctl LOG=fdb_log.log errors=100
  sqlldr userid=PRB/0611@TSESTDB control=control_file.ctl LOG=fdb_log.log errors=100

  # ? cmd

我已将您的代码留在其中,但已注释掉(使用 shell 注释字符“#”)。未注释的行是将 .bat 语法“翻译”成 Linux/Unix bash/shell 语法。

上面有一些你可能需要解决的问题:

  1. 您必须在 PATH 的重置中包含正确的值,请注意该值严格用于说明问题。 export用于使当前 shell(shell 脚本)中设置的变量对从 shell 脚本运行的子进程可见,在这种情况下,重要的是sqlldr

  2. 我不确定你真正需要分配什么值 NLS_NUMERIC_CHARACTERS。请注意,通过引用 shell 可用的单引号字符',您应该得到您想要使用的值。如果使用 '*' 或其他正则表达式字符,这可能会导致问题。

  3. 您可能会发现它sqlldr.exe有一个完全不同的名称。可执行命令的 linux/unix 约定不需要 .exe扩展名,所以我使用了sqlldr. 只需使用您在安装目录中找到的程序的全名即可。

带有的行#!/bin/bash必须是文件中的第一行,没有前导空格。

您还需要通知您的操作系统该脚本是可执行的。从 bash cmd 行,在包含此脚本的目录中,执行

 chmod 755 mySQLLDR_runningScript

最后,不知道你为什么cmd在你的 .bat 文件的末尾,要打开一个新窗口?您需要在系统上进行试验以找到正确的 cmd 来执行此操作。也许xterm

我希望这有帮助。

于 2012-04-25T18:48:47.627 回答