例79 批量刪除日誌
要求:兩類機器一共300多台,寫個指令碼自動清理這兩類機器裡面的日誌檔案。在堡壘機批量發布,也要批量發布到crontab裡面
a類機器日誌存放的路徑很 統一b類機器日誌存放路徑需要用*匹配(因為這個目錄裡除了日誌,還有其他檔案,不能刪除。匹配的時候可用*.log)
a類:/opt/cloud/log 刪除7天前的
b類:/opt/cloud/instances 刪除15天前的
要求寫在乙個指令碼裡面,不用考慮堡壘機上的操作,只需要寫出shell指令碼
要點:判斷機器是a 類還是b類是關鍵點
#!/bin/bash
dir1=/opt/cloud/log/
dir2=/opt/cloud/instance/
if [ -d $dir1 ]
then
find $dir1 -type -f mtime +7 |xargs rm
elif [ -d $dir 2 ]
then find $dir2 -name "*.log" -type f mtime +15 |xargs rm
fi例80 貸款計算器
貸款有兩種還款方式:等額本金法和等額本息法,簡單說明一下等額本息法與等額本金法的主要區別:
等額本息法的特點是:本月還款額仙童,在月供中「本金與利息」的分配比例中,前半段時間所還的利息比例大,本金比例小,還款期限過半後逐步轉為本金比例大,利息比例小。所指出的總利息比等額本金法多,而且貸款期限越長,利息相差越大
等額本金法的特點是:每月的還款額不同,它是將貸款額按還款的總月數均分(等額本金),再加上上期剩餘本金的月利息,形成乙個月還款額,所以等額本金法第乙個月的還款額最多,而後逐月減少,越還越少。所致出的總利息比等額本息法少。
兩種還款方式的比較不是我們今天的討論範圍,我們的任務就是做乙個貸款計算器。其中:
等額本息每月還款的計算公式是:
每月還款額=[貸款本金x月利率x(1+月利率)^還款月數]÷[(1+月利率)^還款月數-1]
等額本金每月還款的計算公式是
每月還款額=貸款本金÷貸款期數+(本金-已歸還本金累計額)x月利率
要點:搞清楚公式
#!/bin/bash
read -p "請輸入貸款總額(單位:萬元): " sum_w
read -p "請輸入貸款年利率(如年利率為6.5%,直接輸入6.5): " y_r
read -p "請輸入貸款年限(單位:年)" y_n
echo "貸款計算方式:"
echo "1)等額本金計算法"
echo "2)等額本息計算法"
read -p "請選擇貸款方式(1|2)" type
sum=`echo "scale=2;$sum_w*10000 " |bc -l`
y_r2=`echo "scale=6;$y_r/100 " |bc -l `
m_r=`echo "scale=6;$y_r2/12" |bc -l`
count=$[$y_n*12]
echo "期次 本月還款額 本月利息 未還款項"
jin()' end /tmpo/io.log`
a=`echo "sacle=2;$sum/5"|bc`
b=`echo $a|cut -d . -f 1`
if [ $b -gt 90 ]
then
mysql -u root -pasda -e "show processlist" > mysql_$t.log
fisleep 1
done
例81 檢視tomcat 日誌
要求:寫乙個擷取tomcat catalina.out日誌的指令碼
tomcat示例t1-t4
#find /opt/tom/ -name catalina.out
/opt/tom/t1/logs/catalina.out
/opt/tom/t2/logs/catalina.out
/opt/tom/t3/logs/catalina.out
/opt/tom/t4/logs/catalina.out
要求:1.這個指令碼可以取tomcat例項t1-t4的日誌
2.這個指令碼可以自定義取日誌的起始點,比如取今天早上10點之後到現在的資料
3.這個指令碼可以自定義取日誌的起始點和重點,比如取今天早上9點到晚上8點的資料
catalina.out日誌內容
#!/bin/bash
lang=en
logfile="/opt/tom/$1/logs/catalina.out"
d_mdy=`date "+%b %d.%y"`
if [ $# -ne 2 ] && [ $# -ne 3 ]
then
echo "你提供的引數數量不正確,請提供2-3個引數。例:sh $0 t1 08:01:00 14:00:00"
exit 1
fiif ! echo $1 | grep -qe '^t1$|^t2$|^t3$|^t4$'
then
echo "第乙個引數必須是t1、t2、t3、t4"
fijudge_time()
date -d "$1" +%s &>/dev/null
if [ $? -ne 0 ]
then
echo "你提供的時間$1格式不正確"
exit 1
fitr_24_12()
date -d "$1" +%r
judge_time_in_log()
if ! grep -q "$d_mdy $(tr_24_12 $1)" $logfile
then
echo "你提供的時間$1在日誌$logfile中不曾出現,請換乙個時間點"
exit 1
fijudge_time $2
judeg_time_in_log $2
if [ $# -eq 3 ]
then
judge_time $3
t1=`date -d "$2" +%s`
t2=`date -d "$3" +%s`
if [ $t2 -lt $t1 ]
then
echo "你提供的時間$2比$3要晚,應該把早的時間放到前面"
exit
fijudge_time_in_log $3
fibegin_n=`grep -n "$d_mdy $[tr_42_12 $2]" $logfile|head -1|awk -f ':' ''`
if [ $# -eq 3 ]
then
n=`grep -n "$d_mdy $(tr_24_12 $3)" $logfile|tail -1 |awk -f ':' ''`
end_n=$[$n+1]
sed -n "$begin_n,$sed_n"p $logfile
else
sed -n "$begin_n,$"p $logfile
fi例83 列印城市名字
要求:寫乙個指令碼讓使用者輸入多個城市的名字(可以使中文),要求不少於5個,然後把這些城市存到乙個陣列裡,最後用for迴圈把他列印出來。
要點賦值陣列:arry=(1 2 a b c )
列印陣列: echo$
#!/bin/bash
read -p "輸入不少於五個城市的名字,用空格分開。" name
n=`echo $name|awk `
if [ $n -lt 5 ]
then
echo "請輸入至少五個城市的名字"
exit
ficity=($name)
for i `seq 0 $[$-1]`
doecho $
done
例84 **上線
背景:乙個業務,有3臺伺服器(a,b,c)做負載均衡,由於規模太小目前並未使用專業的自動化運維工具:有新的需求時,開發同時完成**會把變更上傳到其中一台伺服器a上。但是其他兩台伺服器也需要做相同的變更
要點rsync同步
秘鑰認證或者expect指令碼
#!/bin/bash
dir=/data/wwwroot/www.aaa.com
rs()
rsync -azp --exclude="logs" \
--exclude="tmp" --exclude="upload" \
--exclude="caches " $dir/ $1:$dir
read -p "該指令碼將會把本機的$dir下的檔案同步到$b_ip和$c_ip上,是否要繼續? y|n" c
case $c in
y|y)
rs b_ip
rs c_ip
n|n)
exit
echo "你只能輸入y或者n"
esac
shell訓練計畫30天之第二十四天
例61 查詢檔案差異 要求 有兩個檔案a.txt和b.txt,需求是吧a.txt中有的但b.txt中沒有的行找出來,並寫入到c.txt,然後計算出c.txt檔案的行數 要點 可以使用while迴圈遍歷a.txt,逐行進行匹配,如果這一行在b.txt中沒有就直接重定向到c.txt中即可 bin bas...
shell訓練計畫30天之第六天
一 什麼是shell 1.shell是一種程式語言 2.shell可以使用邏輯判斷和迴圈等語法 3.shell支援自定義函式 4.shell是系統命令的集合 5.shell指令碼可以實現自動化運維,可以大大增加運維的效率 6.shell其實就是把系統的命令寫進檔案中,有點類似於windows的批處理...
shell訓練計畫30天之第一天
一 什麼是shell 1.是命令直譯器 2.支援特定的語法 邏輯判斷 迴圈 3.每個使用者可以有自己特定的shell 4.centos7預設shell為bash bourne agin shell 5.其他的shell zsh ksh 二 命令歷史 1.按向上方向鍵檢視歷史命令 2.歷史命令檔案存在...