shell訓練計畫30天之第二十七天

2021-09-27 06:24:43 字數 4357 閱讀 4202

例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.歷史命令檔案存在...