cm=/usr/local/bea/watool/tact/share/rootdir/system/expendableparts/uploadComm.sh
/usr/local/bea/watool/tact/share/rootdir/system/expendableparts/91010_888888_20110822134252_mytest.csv
watool
tactclient
tact
/usr/local/bea/watool/tact/share/rootdir/system/expendableparts /usr/local/bea/watool/tact/share/rootdir/system/expendableparts/log
91010_888888_20110822134252
91010_888888_20110822134252_expendpartsload.log
91010_888888_20110822134252_expendpartsload_bad.log
888888
这是shell文件以及它的十个位置参数
Runtime r = Runtime.getRuntime();
Process p = r.exec(cm);
p.waitFor();
return p.exitValue();
下面一段是shell文件里面的语句,
if [ $# -ne 10 ]
then
exit 1;
fi
执行结果是1,我传进去10个参数,怎么他还执行成功,求解答。
[quote]且unix机器上没有.profile文件,这有没有影响 [/quote]
没有的话,前面可以加一个判断再执行。
这个问题你要分两步调,第一步,确保你的shell脚步本事是正确的,你也没告诉我到底单独执行脚步是否正常;第二步,再考虑是否java程序调用shell出错。
[quote]它执行到不等于10时就退出了,后面的代码比较多且调用了oracle的sqlplus与sqlldr等数据库操作[/quote]
这个是指直接执行shell吗?如果是这样,那你的shell本事就不符合你的预期。这样的话,你需要确定前面哪里有错?这个比较难调了,你要仔细看看。比如:
LANG=zh.GBK 这个写法也不太合适,一般都是:LANG=zh_CN.GBK
ORA_NLG33=$ORACLE_HOME/ocommon/nls/admin/data ,这里的ORACLE_HOME前面是否定义了
. /usr/local/bea/.profile 这里增加判断,
if [ -x /usr/local/bea/.profile]; then
. /usr/local/bea/.profile
fi
类似这样的都有可能导致执行出错,你可以在你认为可能出错的地方用“echo”来打印,可以采用二分法,快速定位错误位子。
你直接执行shell是否返回 预期结果呢?
你把sh里面不等于10改小来测试一下,看看是否是参数传的问题。我直接使用-ne 1来测试是正常返回。
把你执行shell的完整代码贴上了。