#!/bin/sh # # Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. # # NAME # asmcmd - ASM CoMmanD line interface (Wrapper) # # DESCRIPTION # This program is a wrapper for asmcmdcore. It takes the same parameters # as asmcmdcore. It first checks to see if $ORACLE_HOME is set. If not, # it prints an error messages and exits. It also sets $PERL5LIB based on # $ORACLE_HOME if $PERL5LIB is not already set. Finally, it invokes # asmcmdcore at $ORACLE_HOME/bin/asmcmdcore with the Perl interpreter at # $ORACLE_HOME/perl/bin/perl. # # NOTES # usage: asmcmd [-p] [command] # # This wrapper program now supports only UNIX platforms. Use # asmcmd.bat for Windows platforms. # # MODIFIED (MM/DD/YY) # shmubeen 04/06/10 - remove -T option # heyuen 03/16/09 - fix version identification # hqian 06/21/07 - #6137843: restructure to use oratab and oraenv # hqian 06/06/07 - Add $ORACLE_HOME/rdbms/lib/asmcmd to include path # hqian 01/10/07 - Add Perl lib path $ORACLE_HOME/lib/asmcmd # heyuen 10/10/06 - Add exit codes # hqian 01/26/06 - #4939032: enable taint mode, deprecate PERL5LIB # hqian 01/20/06 - #4939032: add new module path to PERL5LIB # hqian 07/19/05 - Remove RCS header # hqian 04/01/05 - #4271064: add SHLIB_PATH for HP-UX # hqian 03/29/05 - Add ${ORACLE_HOME}/lib to LD_LIBRARY_PATH # hqian 03/29/05 - #4271064: Add $LIBPATH for AIX # hqian 12/08/04 - Make this wrapper script a bourne shell script. # hqian 10/19/04 - Rename asmcmd0 to asmcmdcore. # hqian 09/01/04 - Fix path to Perl on NT. # hqian 08/06/04 - Add execute bit to ADE. # hqian 07/26/04 - Remove check for Perl version. # hqian 07/21/04 - Fix Perl version path problem. # hqian 06/30/04 - Fix NT porting issues. # hqian 06/29/04 - Add check for LD_LIBRARY_PATH. # hqian 06/22/04 - Creation # ############################################################################# ECHO=/bin/echo SED=/bin/sed AWK=/bin/awk PATH=/bin:/usr/bin:/usr/sbin:/sbin:$PATH PLATFORM=`uname` # Check to see if ORACLE_HOME is set. if [ "${ORACLE_HOME}" = "" ] ; then # If not then try to obtain the location of the Oracle home from # oratab. # The location of oratab differs by platform. if [ "${PLATFORM}" = "SunOS" -o "${PLATFORM}" = "Solaris" ] ; then ORATAB=/var/opt/oracle/oratab # Solaris or SunOS else ORATAB=/etc/oratab # Linux, AIX, and HP-UX fi # If the oratab file does not exist at the expected location, give up # and print error, asking the user to set ORACLE_HOME. if [ ! -r ${ORATAB} ] ; then ${ECHO} "ASMCMD-00001: ORACLE_HOME environment variable not set" exit -1 fi # Try to get ORACLE_HOME from ortab. ORACLE_HOME=`${AWK} -F: '/^\+ASM/ { print $2 }' ${ORATAB}` # If ORACLE_HOME is not found in oratab, ask the user to supply # ORACLE_HOME. if [ "${ORACLE_HOME}" = "" ] ; then ${ECHO} "ASMCMD-00001: ORACLE_HOME environment variable not set" exit -1 fi # If the value of ORACLE_HOME is not a valid directory, asking user # to supply ORACLE_HOME. if [ ! -d ${ORACLE_HOME} ] ; then ${ECHO} "ASMCMD-00001: ORACLE_HOME environment variable not set" exit -1 fi fi # In case the user did set ORACLE_HOME, but not to a valid directory, # print error to indicate so. if [ ! -d ${ORACLE_HOME} ] ; then ${ECHO} "ASMCMD-00002: ORACLE_HOME is not a valid directory" exit -1 fi # Need to export ORACLE_HOME, since we may have set it in this script. export ORACLE_HOME # Add Solaris32 backward compatibility for LD_LIBRARY_PATH. This extra # path is used for Solaris64 Oracle homes that come with a Solaris32 # Perl build. LD_LIBRARY_PATH="${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}" LD_LIBRARY_PATH="${ORACLE_HOME}/lib32:${LD_LIBRARY_PATH}" export LD_LIBRARY_PATH # AIX uses LIBPATH, not LD_LIBRARY_PATH. if [ "${PLATFORM}" = "AIX" ] ; then LIBPATH="${ORACLE_HOME}/lib:${LIBPATH}" export LIBPATH fi # HP-UX uses SHLIB_PATH, not LD_LIBRARY_PATH. if [ "${PLATFORM}" = "HP-UX" ] ; then SHLIB_PATH="${ORACLE_HOME}/lib:${SHLIB_PATH}" export SHLIB_PATH fi # Set path to Perl. PERLBIN="${ORACLE_HOME}/perl/bin/perl" # Get Perl version. PERLV=`${PERLBIN} -e 'printf "%vd", $^V'` # Get version, in form 5.x.y # # Set PERLINC, which is a list of -I options passed to the perl # interpreter, telling perl where to look for modules. # We no longer support the use of PERL5LIB, because we now use # taint checks, and PERL5LIB is considered tainted. PERLINC="-I ${ORACLE_HOME}/perl/lib/${PERLV}" PERLINC="${PERLINC} -I ${ORACLE_HOME}/perl/lib/site_perl/${PERLV}" PERLINC="${PERLINC} -I ${ORACLE_HOME}/lib" PERLINC="${PERLINC} -I ${ORACLE_HOME}/lib/asmcmd" PERLINC="${PERLINC} -I ${ORACLE_HOME}/rdbms/lib/asmcmd" # Uncomment this one line below to try out asmcmdtemplate.pm, just for fun. # *Do not* merge asmcmd with this line uncommented! #PERLINC="${PERLINC} -I ${ORACLE_HOME}/rdbms/src/client/tools/asmcmd/modules" # Build command to execute asmcmdcore. # -T option has been removed for bug fix 7193021. # -T option is not required as server code does enough validation RUNTHIS="${PERLBIN} -w ${PERLINC} ${ORACLE_HOME}/bin/asmcmdcore" # Now run asmcmdcore with all arguments! exec ${RUNTHIS} "$@" # Should never get here. exit -1