【问题标题】:Syntax error near unexpected token 'fi' in shell script sqlplusshell脚本sqlplus中意外标记'fi'附近的语法错误
【发布时间】:2016-08-15 20:03:42
【问题描述】:

我在执行他的 bash 脚本时遇到了问题。目前,在意外标记“fi”附近收到错误提示语法错误。 'fi'。

 USER_TYPE=$1 #IDENTIFY USER TYPE TYPE1,TYPE2,TYPE3,TYPE4,TYPE5
 USER_NAME=$2
 TARGET_SCHEMA=$3
 TARGET_TABLE=$4
PERMISSION_TYPE=$5
if $USER_TYPE == 'TYPE1';
    then
sqlplus /  <<  E00
CREATE USER ${USER_NAME}
IDENTIFIED BY "default"
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
ACCOUNT UNLOCK;
ALTER USER ${USER_NAME} DEFAULT ROLE ALL;
GRANT CREATE SESSION TO ${USER_NAME};
GRANT CONNECT TO ${USER_NAME};
exit
E00
cat perm.txt |while read PERMISSION OWNER TABLE USER 
do
sqlplus / as sysdba > /home/o/direct/Passa/output/output.log << E01
GRANT $PERMISSION ON $OWNER.$TABLE TO $USER; 
E01
fi

【问题讨论】:

  • 我将删除 sqlplus 和 Oracle 标签,因为这是一个 shell 脚本问题(“fi”与 Oracle 或 sqlplus 无关)。
  • 修复语法。请看:shellcheck.net

标签: bash shell while-loop


【解决方案1】:

您缺少while 循环的done 关键字。

cat perm.txt |while read PERMISSION OWNER TABLE USER 
do
sqlplus / as sysdba > /home/o/direct/Passa/output/output.log << E01
GRANT $PERMISSION ON $OWNER.$TABLE TO $USER; 
E01
done
fi

顺便说一句,这是UUOC。您可以只使用输入重定向

while read PERMISSION OWNER TABLE USER 
do
sqlplus / as sysdba > /home/o/direct/Passa/output/output.log << E01
GRANT $PERMISSION ON $OWNER.$TABLE TO $USER; 
E01
done < perm.txt

【讨论】:

  • 哈哈哇。非常感谢巴尔玛。回到办公桌后我会检查一下。
猜你喜欢
  • 2014-01-02
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多