台灣最大程式設計社群網站
線上人數
1923
 
會員總數:246570
討論主題:190029
歡迎您免費加入會員
討論區列表 >> Linux / Unix >> Shell Script 備份資料語法
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Shell Script 備份資料語法
價值 : 5 QP  點閱數:1240 回應數:1
樓主

町風
初學者
229 213
1974 203
發送站內信

Shell Script語法不是很熟,
想請問下面一段code主要是做什麼?
感謝!


本篇文章發表於2015-06-08 16:24
1樓
回應

椰子殼
檢舉此回應
依照script的行為,我猜這可能是呼叫一個已安裝的備份package的作業
用增加註解的方式,可能比較好說明,可能配合你實際作業的狀況,自行判斷

#!/bin/sh
#
# $freebsd: src/etc/periodic/daily/220.backup-pkgdb,v 1.1.2.3.2.1 2012/03/03 06:15:13 kensmith exp $
#

# if there is a global system configuration file, suck it in.
#

###########################
## 這邊會先載入設定檔,裡面可能會宣告一些參數,或者有一些設定,建議打開來看一下
## 設定檔裡面,可能有以下兩個設定
## daily_backup_pkgdb_enable="xxx"
## daily_backup_pkgdb_dir="/xxx/xxx"
#########################
if [ -r /etc/defaults/periodic.conf ]
then
. /etc/defaults/periodic.conf
source_periodic_confs
fi

rc=0


case "$daily_backup_pkgdb_enable" in
## 這邊是說,如果daily_backup_pkgdb_enable設定值為"yes" (不分大小寫) 就會做下面的動作
[yy][ee][ss])
## 宣告參數,後面使用
bak="${daily_backup_pkgdb_dir:-/var/backups}"
## 看起來是宣告備份檔案名稱,組起來字串應該是
## /xxx/xxx:-/var/backups/pkgdb.bak.tbz
bak_file="${bak}/pkgdb.bak.tbz"

## 這個make,可能看一下 bsd.port.mk 的內容,看這個make file要求做什麼事情
## 如果make失敗,pkg_dbdir=/var/db/pkg
pkg_dbdir=`make -f/usr/share/mk/bsd.port.mk -v pkg_dbdir 2>/dev/null` ||
pkg_dbdir=/var/db/pkg

if [ ! -d "$bak" ]
then
## 如果/xxx/xxx不存在,嘗試建立目錄,如果失敗,會出現錯誤訊息,並且跳出
install -d -o root -g wheel -m 750 $bak || {
echo '$daily_backup_pkgdb_enable is enabled but' \
"$daily_backup_pkgdb_dbdir doesn't exist" ;
exit 2 ; }
fi

echo ''
echo 'backing up package db directory:'

## 產出亂數的temp檔案名稱,組起來名稱如下,?代表隨機亂數
## /xxx/xxx:-/var/backups/pkgdb.bak.tbz-?????
new_bak_file=`mktemp ${bak_file}-xxxxx`

## 把pkg_dbdir的目錄tar起來,tar成temp檔案
if tar -cjhf "${new_bak_file}" "$pkg_dbdir" 2>/dev/null; then
chmod 644 "${new_bak_file}"
## 如果/xxx/xxx:-/var/backups/pkgdb.bak.tbz.2 與 /xxx/xxx:-/var/backups/pkgdb.bak.tbz都存在
if [ -e "${bak_file}.2" -a -e "${bak_file}" ]; then
unlink "${bak_file}.2"
mv "${bak_file}" "${bak_file}.2"
fi
## 如果檔案存在,才會mv /xxx/xxx:-/var/backups/pkgdb.bak.tbz為/xxx/xxx:-/var/backups/pkgdb.bak.tbz.2
[ -e "${bak_file}" ] && mv "${bak_file}" "${bak_file}.2"
## 再把/xxx/xxx:-/var/backups/pkgdb.bak.tbz-?????,mv成/xxx/xxx:-/var/backups/pkgdb.bak.tbz
mv "${new_bak_file}" "${bak_file}"
else
## return code設定為3,應該是表示異常結束
rc=3
fi ;;
esac

exit $rc

本篇文章回覆於2015-07-14 14:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.