Shell指令碼應用兩個例子

8563084發表於2022-02-27

平時很少寫Shell指令碼,主要是它的語法相比Python要難掌握,但做為非專業運維工程師,拼拼湊湊還是要能寫一點Shell程式碼,在處理檔案相關任務時還是要方便些。

一、資料庫冷備

#!/bin/sh
bakFile="/bak/"$(date "+%Y%m%d")"150001.gz"
mysqldump -h *.rds.amazonaws.com -u* -p* --databases * | gzip > $bakFile
scp -i /bak/EcommerceChinaDev.pem $bakFile ec2-user@ip:/home/ec2-user/bak/
0 15 * * * sh /bak/bakdb.sh

每天定時(UTC時間0點15)將AWS上的RDS dump到一臺離線機器。

二、Java與Vue專案打包釋出

cur_branch=2022_01_25_V8.4
echo $cur_branch
 
echo '開始打包釋出........'
cd /mnt/integrate/source_posadm
rm -rf /mnt/integrate/source_posadm/blinds_pos_admin/
git clone 
 
echo '原始碼下載完成...'
cd /mnt/integrate/source_posadm/blinds_pos_admin/
git checkout $cur_branch
git branch
 
cnpm install
echo 'node依賴模組下載完成'
 
cnpm run test
echo 'build完成'
 
cp -rf /mnt/integrate/source_posadm/blinds_pos_admin/test/. /usr/local/posadm
ps -ef | grep nginx | awk '{print $2}' | xargs kill -9
/usr/sbin/nginx

注:
1、考慮到專案相對較少,不想去搭建Jenkins這類整合打包環境,就直接寫一個Shell指令碼。
2、在指令碼中寫 rm -rf * 要特別小心,一般要指定刪除目錄的完整路徑,不要先cd到目錄,然後執行rm -rf ,這樣風險很大,極有可能誤刪,記得四年前第一次寫的時候沒注意,一個指令碼執行後把指令碼自己都幹掉了。
這裡建議生產環境機器,最好重新定義一下rm,不要直接刪除,把資料先挪到回收站,在~/.bashrc中加入如下程式碼。

alias rm=trash
trash(){
 mv $@ ~/.Trash/}alias rl='ls ~/.Trash'alias ur=undelfile
undelfile(){
 mv -i ~/.Trash/$@ ./}cleartrash(){
 read -p "Clear trash>[n]" confirm [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /usr/bin/rm -rf ~/.Trash/*


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989885/viewspace-2857945/,如需轉載,請註明出處,否則將追究法律責任。

相關文章