我有一个简单的.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”(它是否适合初学者?),但这是一个偶然的任务,死机来了。
有人可以帮我转换文件吗?非常感谢!!!
答案 0 :(得分: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注释char'#')。未注释的行是将.bat语法“转换”为Linux / Unix bash / shell语法。
上面有一些可能需要解决的问题:
您必须在重置PATH时包含正确的值,
请注意,那里的值严格来说明问题。
使用export
以便在当前shell中设置变量(
shell脚本)对从shell运行的子进程可见
脚本,在这种情况下,重要的是sqlldr
我不确定您真正需要分配的值
NLS_NUMERIC_CHARACTERS
。请注意,引用单引号
shell可用的char '
,你应该得到确切的值
使用你想要的。如果使用'*'或其他reg-exp字符,则为此
可能会导致问题。
您可能会发现sqlldr.exe
的名称完全相同。该
linux / unix约定的可执行命令不需要
.exe
扩展名,因此我使用了sqlldr
。只需使用全名即可
您在已安装目录中找到的程序。
#!/bin/bash
行需要是文件中的第一行,没有前导空格。
您还需要通知您的操作系统该脚本是可执行的。从bash cmd行,在包含此脚本的目录中,执行
chmod 755 mySQLLDR_runningScript
最后,不确定为什么你的.bat文件末尾有cmd
,打开一个新窗口?您需要在系统上进行试验才能找到正确的cmd来执行此操作。也许是xterm
。
我希望这会有所帮助。