Sed Get Code

#!/bin/sh
#Program Name: Get_Code
#Author: Tangjun Chen {RHCE,OCP}
#Country: China
#Alias:  Majesty
#Version: 1.1_2012-10-20
#Description: It is base on linux built-in function/program
#             like grep,head,and so on. Processing batch using while
#             all the codes stored in directory /tmp/all_codes.

####make sure you login by oracle
if [ $USER == oracle  ]; then echo "login by oracle, continue......"
else exit; fi

####make sure input the schema.
if [ "$1" == ''  ]; then
echo "Please input a schema like 'hr' ";exit;fi

####First subprogram get all the relative schema's program name.
sub_program_name(){
sqlplus / as sysdba<<EOF > /tmp/tmp.txt
set heading off
set feedback off
select distinct name from dba_source
where owner=upper('$1');
EOF
#@@@Filter begin
head -n -2 /tmp/tmp.txt | sed -n -e '12,$ p' > /tmp/program_name.txt
}    

####Second program get code to a assigned directory.
sub_get_code(){
#$1 is owner
#$2 is name of program
sqlplus / as sysdba<<FIRST_SQL > /tmp/tmp.txt
set heading off
set feedback off
SELECT text FROM dba_source
WHERE owner=upper('$1')
  AND name=upper('$2');
FIRST_SQL
#@@@Filter begin, all the program was named by the program name add ".sql"
mkdir -p /tmp/all_codes   > /dev/null  2>&1
head -n -2 /tmp/tmp.txt | sed -n -e '12,$ p' > /tmp/all_codes/$2.sql
}

####Main program begin, generate program name in /tmp/program_name.txt
sub_program_name  $1

####Processing batch all lines of the text, respectively.
while read line
do
  sub_get_code $1 $line
done < /tmp/program_name.txt

####classify
mkdir /home/oracle/plsql_$1  >/dev/null 2>&1
cp /tmp/all_codes/*  /home/oracle/plsql_$1  >/dev/null 2>&1

#package
cd /home/oracle/plsql_$1
mkdir -p /home/oracle/plsql_$1/package >/dev/null 2>&1
v_package=`grep -i PACKAGE *| awk -F: '{print $1}'`
while read line
do
  mv $line package/  >/dev/null  2>&1
done <<EOF
$v_package
EOF

#function
cd /home/oracle/plsql_$1
mkdir -p /home/oracle/plsql_$1/function >/dev/null 2>&1
v_function=`grep -i FUNCTION *| awk -F: '{print $1}'`
while read line
do
  mv $line function  >/dev/null  2>&1
done <<EOF
$v_function
EOF

#procedure
cd /home/oracle/plsql_$1
mkdir -p /home/oracle/plsql_$1/procedure >/dev/null 2>&1
v_procedure=`grep -i PROCEDURE *| awk -F: '{print $1}'`
while read line
do
  mv $line procedure  >/dev/null  2>&1
done <<EOF
$v_procedure
EOF

#trigger
cd /home/oracle/plsql_$1
mkdir -p /home/oracle/plsql_$1/trigger  >/dev/null 2>&1
v_trigger=`grep -i TRIGGER *| awk -F: '{print $1}'`
while read line
do
  mv $line trigger  >/dev/null  2>&1
done <<EOF
$v_trigger
EOF
 

你可能感兴趣的:(sed)