一次簡單實現登錄多系統的需求小程序
【環境介紹】
系統環境:Linux + shell
【背景描述】
需求:由於數據庫維護較多同時涉及較多的系統類型,對於不熟悉系統的同事來說,及時登錄一些數據庫顯然是需要時間,登錄雖然簡單,先查到信息再登錄系統,顯然會降低效率。為了解決這個問題,同事建議是否能寫個腳本,能比較方便的登錄系統。
對於這個問題,考慮的問題如下:
1, 從一臺主機登錄多臺主機,相當於跳轉服務器,網絡上一定要互通;
2, 根據不同業務的系統劃分列表信息;
3, 涉及到資產列表信息,服務器的安全性一定要高。
結果:之前申請了一臺專門監控的服務器,用於提取周報信息。剛好能滿足這個條件。
【針對性設計結構】
1, 顯示信息的方式,根據業務系統不同顯示信息;---根據比多的業務域分類
2, 登錄服務器的方式選擇,多個節點登錄;---能選擇性的多個節點登錄,例如RAC
3, 使用哪個用戶登錄。---考慮到也有單機主機,決定用Oracle用戶登錄
經過對上面的問題考慮,決定用Oracle用戶根據不同系統可多個節點選擇登錄。最終結果如下:
主要信息列表文件:
主要功能輸出信息:
主要實現功能的部分腳本如下:
#!/bin/sh
######################################################################
# login3.sh
# This script is conn db hosts instance
# Author CZT
######################################################################
function connectdb() 》》》主要實現輸出主機信息的函數
{
title=`cat ${list_dest}|head -1`
result=`cat ${list_dest}|grep -i ${Dbname}`
echo "+---------------+---------------+---------------+---------------+---------------+-----+"
printf "|"
printf "%-15s|" $title
printf "\n"
echo "+---------------+---------------+---------------+---------------+---------------+-----+"
printf "|"
printf "%-15s|" $result
printf "\n"
echo "+---------------+---------------+---------------+---------------+---------------+-----+" v_instancenum=4
read -p "Enter host instancenum:" v_instance
while [ ! $v_instance ]
do
read -p "Enter host instancenum:" v_instance
done
if [[ $v_instance =~ "^[1-2]*$" ]]
then
v_instancenum=$[$v_instancenum+$v_instance]
dbip=`cat ${list_dest}|grep -i ${Dbname}|awk ‘{print $"‘$v_instancenum‘"}‘`
echo "Note:You are current try to connect "$Dbname$v_instance
ssh $dbip
else
echo "Note:You are current try to connect "$Dbname$v_instance" does not exist,Please enter the right instancenum!!!"
fi
}
list_dest=‘/home/oracle/tmp/liebiao.txt‘ 》》》創建不同業務域系統的列表數組
LISTS="$(cat /home/oracle/tmp/xitong.txt) QUIT" 》》》創建不同系統的列表數組
echo "+-------------------------------+This is the system list+---------------------------------------+"
select Dest in $LISTS;do 》》》創建不同業務域系統的列表數組
case $Dest in
"CRM") 》》》CRM業務域系統選項信息
DB="$(cat /home/oracle/tmp/CRMDB.TXT) QUIT"
echo "+--------------------------------+This is the $Dest db list+-------------------------------+"
select Dbname in $DB;do
case $Dbname in
"YYDB") 》》》營業數據庫系統信息
connectdb $Dbname; 》》》調用第一步涉及的connectdb函數輸出信息
;;
"GGDB")
connectdb $Dbname;
;;
"DZQD")
connectdb $Dbname;
;;
"QUIT")
echo "Note:You are quit of the option!"
break;
;;
esac
done;
;;
"QUIT") 》》》選擇退出時,退出
echo "Ignorant"
break;
;;
esac
done;
【問題思考】
1, 總體實現的思路邏輯是比較簡單,但是功能確實比較實用,特別適用於不熟悉系統的同事,腳本同時也實現其他庫,比如測試庫,開發庫進行擴展;
2, 對於網絡這段時間出現的問題由於權限限制,無法解決,有些數據庫還是需要手動登錄;
3, 對於輸出信息的顯示也是非常重要,參考MySQL的輸出信息格式,花了不少時間進行調整,用戶體驗也是非常重要的一個關註點;
4, 對於用戶密碼安全性問題,盡量使用加密的方法進行對密碼加密。
【總結】:
1, 根據實際情況,根據需求一定要仔細羅列一下邏輯思路,必會事半功倍;
2, 涉及比較多的主機信息時,寫些小程序對工作的效率也是非常有效提高的;
關於資產安全信息一定評估好,對於數據庫而言數據安全是必不可少的重要環節。
一次簡單實現登錄多系統的需求小程序