酷!學園

技術討論區 => Linux 討論版 => 主題作者是: an04080412 於 2018-01-09 11:47

主題: 請高手前輩們幫忙 linux shell 腳本
作者: an040804122018-01-09 11:47
大家好,最近想寫一個linux shell 腳本,請高手前輩們幫忙,謝謝。

在A主機將oracle需要的結構目錄透過spool導出成一個文字檔後,這部分我已經完成。

將得到的文字檔內容,怎麼判斷寫另一個 shell 腳本在 B主機上mkdir相同的結構路徑。

1.導出的shell 腳本

#!/bin/sh
sqlplus -S / as sysdba <<EOF
 
set newpage none
set space 0
set pagesize 0
set heading off
set echo off
set termout off
set trimout on
set trimspool on
set linesize 2500
 
SPOOL /tmp/oraclelist.txt
 
select instance_name from v\$instance;
select display_value from v\$parameter where name ='spfile';
select name from v\$controlfile;
select name from v\$datafile;
select member from v\$logfile;
archive log list;
show parameter db_recovery_file_dest;
 
SPOOL OFF
exit;
EOF

2. 得到的文字檔案路徑的結果

/opt/oracle/product/11.2.0/dbhome_1/dbs/spfileorcl.ora

/opt/oracle/oradata/orcl/control01.ctl
/opt/oracle/flash_recovery_area/orcl/control02.ctl

/opt/oracle/oradata/orcl/system01.dbf
/opt/oracle/oradata/orcl/sysaux01.dbf
/opt/oracle/oradata/orcl/undotbs01.dbf
/opt/oracle/oradata/orcl/users01.dbf
/opt/oracle/oradata/orcl/example01.dbf
/opt/oracle/oradata/orcl/myspace.ora

/opt/oracle/oradata/orcl/redo03.log
/opt/oracle/oradata/orcl/redo02.log
/opt/oracle/oradata/orcl/redo01.log

/opt/oracle/flash_recovery_are

3. 將得到的文字檔內容,該怎麼判斷路徑寫另一個 shell 腳本
    在 B主機上mkdir相同的結構路徑,請高手們協助,謝謝。





主題: Re: 請高手前輩們幫忙 linux shell 腳本
作者: kojj2018-01-10 14:49
我不確定你的詳細需求是什,不過Linux 上面有一個指令叫dirname,他可以幫你判斷與顯示完整路徑

dirname的用法你可以去google的到

順便參考一下別人寫的 shell script來寫code吧    ;)
https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within
主題: Re: 請高手前輩們幫忙 linux shell 腳本
作者: HaWay2018-01-10 16:29
乘上所言:
大致上像這樣
$ mkdir -p $(dirname /opt/oracle/oradata/orcl/system01.dbf)
主題: Re: 請高手前輩們幫忙 linux shell 腳本
作者: netman2018-01-10 20:47
假設你將清單存在 dir_list.txt 好了:
for i in $(< dir_list.txt); do echo mkdir -p ${i%/*}; done
滿意後將 echo 拿掉即可...

注意:這裏沒有照顧到路經存在空白,或是檔案已經存在,或等等狀況...