0

我是 root 用户,在 shell 脚本中我想将用户更改为 oracle 而不是运行 sql 脚本,我尝试了以下操作;

#!/bin/sh

portStatus=`lsof -ni:5060`
if [ ${#portStatus} -ne 0 ]
  then
    sudo -u oracle << EOF
    /oracle/product/102/db/bin/sqlplus -s a513s6p4/a513s6p4 @/oracle/product/102/db/GW_EP_List.sql;
    EOF
  else
    exit
fi

它给了我以下错误;

./deneme2.sh: syntax error at line 12: `end of file' unexpected

你能告诉我可能是什么问题吗?

谢谢,哈利特

4

3 回答 3

1

使用此处文档时,结束字符串必须位于行首!

尝试

#!/bin/sh

portStatus=`lsof -ni:5060`
if [ ${#portStatus} -ne 0 ]
  then
    sudo -u oracle << EOF
    /oracle/product/102/db/bin/sqlplus -s a513s6p4/a513s6p4 @/oracle/product/102/db/GW_EP_List.sql;
EOF
  else
    exit
fi
于 2013-06-05T10:51:43.340 回答
0
sudo -u oracle /oracle/product/102/db/bin/sqlplus -s a513s..........

你在这里不需要EOF。像上面一样执行你的sqlplus命令。在这种情况下,您的oracle用户必须是sudo用户。

如果oracle是普通用户

su - oracle -c "/oracle/product/102/db/bin/sqlplus -s a513s.........."

关于su命令的更多信息(来自手册页):

su 命令用于在登录会话期间成为另一个用户。在没有用户名的情况下调用,su 默认成为超级用户。可选参数 - 可用于提供与用户直接登录时所期望的环境相似的环境。额外的参数可以在用户名之后提供,在这种情况下,它们被提供给用户的登录 shell。特别是, -c 的参数将导致下一个参数被大多数命令解释器视为命令。该命令将由 /etc/passwd 中为目标用户指定的 shell 执行。

于 2013-01-21T10:58:52.963 回答
0

您可以使用su. 记住获取环境su -

COMMAND="/oracle/product/102/db/bin/sqlplus -s a51... "
su - oracle -c $COMMAND

一个不错 的基于 oracle 的示例站点,Automating Database Startup and Shutdown on Linux Post

case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
        su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
        touch /var/lock/subsys/dbora
        ;;
于 2013-01-21T10:59:58.903 回答