shell編程實戰18

1. 批量刪除日誌算法

 

2. 房貸計算器tomcat

#!/bin/bashbash

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 "期次 本月還款額 本月利息 未還款額"blog

jin()
{
#月還款本金m_jin=貸款總額sum/期數count
m_jin=`echo "scale=2;($sum/$count)/1 " | bc -l`
#定義未還本金r_jin(第一期應該是貸款總額)
r_jin=$sum
for((i=1;i<=$count;i++))
do
#本月利息m_xi=剩餘本金*月利率
m_xi=`echo "scale=2;( $r_jin*$m_r)/1"|bc -l`
#本月還款m_jinxi=月還本金m_jin+本月利息m_xi
m_jinxi=`echo "scale=2;( $m_jin+$m_xi)/1"|bc -l`
#已還款本金jin=月還本金m_jin*期數i
jin=`echo "scale=2;( $m_jin*$i)/1"|bc -l`
#剩餘本金r_jin=貸款總額sum-已還本金jin
r_jin=`echo "scale=2;( $sum-$jin)/1"|bc -l`
if [ $i -eq $count ]
then
#最後一月的還款額應該是每個月還款本金+本月利息+剩餘本金
m_jinxi=`echo "scale=2;( $m_jin+$r_jin+$m_xi)/1"|bc -l`
#最後一月的剩餘本金應該是0
r_jin=0
fi
echo "$i $m_jinxi $m_xi $r_jin"
done
}it

xi()
{
#每期還款m_jinxi=(貸款總額sum*月利率m_r*((1+月利率m_r)^期數count))/(((1+月利率m_r)^期數count)-1)
m_jinxi=`echo "scale=2;(($sum*$m_r*((1+$m_r)^$count))/(((1+$m_r)^$count)-1))/1 " | bc -l`
#定義未還本金r_jin(第一期應該是貸款總額)
r_jin=$sum
for((i=1;i<=$count;i++))
do
#本期利息m_xi=剩餘本金r_jin*月利率m_r
m_xi=`echo "scale=2;( $r_jin*$m_r)/1"|bc -l`
#本期本金m_jin=本期本息m_jinxi-本期利息m_xi
m_jin=`echo "scale=2;($m_jinxi-$m_xi)/1 " | bc -l`
#未還本金r_jin=上期未還本金r_jin-本期應還本金m_jin
r_jin=`echo "scale=2;($r_jin-$m_jin)/1 " | bc -l`
if [ $i -eq $count ]
then
#最後一月本息m_jinxi=本期本金m_jin+未還本金r_jin
m_jinxi=`echo "scale=2;($m_jin+$r_jin)/1 " | bc -l`
#最後一月的剩餘本金應該是0
r_jin="0.00"
fi
echo "$i $m_jinxi $m_xi $r_jin"
done
}table

case $type in
1)
jin
;;
2)
xi
;;
*)
exit 1
;;
esacawk

3. 監控磁盤監控

 

4. 查看tomcat日誌變量

#!/bin/bash

LANG=en
logfile="/opt/TOM/$1/logs/catalina.out"

#將當天的英文月、數字日期、數字年做爲變量賦值給d_mdy
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
fi

#判斷第一個參數是否符合要求
if ! echo $1|grep -qE '^t1$|^t2$|^t3$|^t4$'
then
echo "第一個參數必須是t一、t二、t3或t4"
exit 1
fi

#判斷時間有效性
judge_time()
{
date -d "$1" +%s &>/dev/null
if [ $? -ne 0 ]
then
echo "你提供的時間$1格式不正確"
exit 1
fi
}

#將24小時制時間轉換爲12小時
tr_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
fi
}

#判斷第2個參數是否合法
judge_time $2

#判斷起始時間點是否出如今日誌裏
judge_time_in_log $2

#若是提供第3個參數
if [ $# -eq 3 ]
then
#判斷第3個參數是否合法
judge_time $3

#判斷起始時間是否早於結束時間
t1=`date -d "$2" +%s`
t2=`date -d "$3" +%s`
if [ $t2 -lt $t1 ]
then
echo "你提供的時間$2比$3要晚,應該把早的時間放到前面"
exit
fi

#判斷提供的結束時間點是否出如今日誌中
judge_time_in_log $3
fi

#取起始時間所在行行號
begin_n=`grep -n "$d_mdy $(tr_24_12 $2)" $logfile|head -1|awk -F ':' '{print $1}'`

#取結束時間所在行行號,並用sed截取日誌內容
if [ $# -eq 3 ]
then
n=`grep -n "$d_mdy $(tr_24_12 $3)" $logfile|tail -1|awk -F ':' '{print $1}'`
#結束日期所在行的下一行纔是日誌的內容
end_n=$[$n+1]
sed -n "$begin_n,$end_n"p $logfile
else
sed -n "$begin_n,$"p $logfile
fi

5. 打印城市名字

 

6. 代碼上線

 

相關文章
相關標籤/搜索