升騰、實達終端綁定輔助腳本程序

 

升騰、實達終端綁定輔助腳本程序

——Unix Shell編程筆記

 

作者:半點閒

博客:blog.csdn.net/cg_i

時間:2011-1-27 13:54 星期四

開發環境:Ubuntu10.10

運行環境:Ubuntu10.10

適用範圍:ScoOperServer5.0.6上裝有實達終端衛士(Start SteInetd Serve ver 5.11)、升騰固定終端程序(Centerm Telnet Server ver1.0)。

 

說一說:

         2010年9月,工作上的變動使我有機會接觸到Unix系統,也使我有機會可以深入學習這個系統。之前雖也接觸過非微軟的Windows系統,那時只是爲了應付任務的需要並沒有深入研究。我算得上是這個系統的門外漢“君子不隱其短,不懂則問,不能則學。”書籍就是我最好的朋友,在快速適應新的工作環境和調整好狀態後,抽出時間用一週左右粗淺讀完《Unix Shell編程(第三版)》、《精通正則表達式(第三版)》(還在讀),被Unix強勁和其廣泛的程序集(隨標準操作系統發佈的有200多條基本命令),這些命令(也稱工具)可以完成從計算文件行到發送電子郵件,甚至顯示任何一年的月曆等任何事情。不僅如此這些命令組合起來,優雅而簡便地完成更復雜的功能。而“正則表達式”絕對具有偉大技術發明的一切特點,它簡單,優美,功能強大,妙用無窮。初次看到它時其密碼般的形象很難接受,但當你理解後,能夠將一些正則表達式組合應用,達到超乎相像的效果它更像是一門藝術。

這個“腳本”程序:

         再說說我這個程序吧,它用了我二週的時間(不要笑我噢^_^!)。這個程序算得上是我在Unix系統中第一個編碼最長的“腳本”程序了(之前的程序或是“玩具”或只處理一些極其簡單的任務)。

當然,通過別的編程語言也能實現這個應用,這裏我通過Shell來完成它,我個人認爲像目前這種應用,也只有Shell可以以最簡單、高效、優雅的方式來完成它。也更是我讀了上述一本半書最好的課後作業。不僅鞏固了書中所學,更如癡如醉地享受到了學習所帶來的樂趣,這就是創造的力量。

 

求拍磚:

         剛剛接觸Unix系統對Shell編程的瞭解也很膚淺,代碼和處理算法難免讓各位“大俠”不忍目睹,歡迎各界來電來信拍磚,謝謝!

 

由來:

我的日常工作中管理着數十臺Unix服務器,其中每臺服務器又各連接着數百臺終端(實達或升騰),將這些終端進行規範管理的確是個苦力活。

以前的作法:

1、  Telnet到服務器;

2、  進入配置文件所在的目錄(一般爲/etc);

3、  用編輯程序打開“終端綁定”配置文件(一般用vi);

4、  添加或修改綁定(這其中還涉及):

1)、查找從小到大可用的“虛擬設備”;

2)、IP、“虛擬設備”是否和目前將要操作的記錄重複。

         問題:通過Telnet到服務器進入/etc目錄下修改“終端綁定”配置文件,一般會用到root或管理員極別的用戶,這些用戶權限比較大,它們的一舉一動都會對服務器產生影響,一般不易指定多人(缺乏靈活性)。如果配置文件經常頻繁改動(或者有多人維護)記錄中就會出現“冗餘”或“空洞”記錄。

         現在的作法:

1、  執行TerminalBindConfig.sh “服務器名稱” “服務器IP” “終端類型”(如果你也有多臺服務器,可以通過另外一個腳本做一個界面根據用戶選擇執行上述命令。我就是這樣做的因爲其中涉及一些敏感信息這裏就不提供了);

2、  根據菜單選項進行操作(操作界面見圖1);

3、  將更新後的配置文件上傳至服務器。

好處:不需要登錄到服務器上,多人操作使用統一界面,操作更透明所有處理記錄相關的問題由程序來處理,安全、規範。

運行原理:

每天第一次啓用這個程序時,會從服務器中下載當前“終端綁定”配置文件(以保持最新)。接下來所有的配置操作都在本地完成,當確定無誤後再將修改後的配置文件上傳至遠程服務器(服務器原配置文件會被更改爲當前系統時間的擴展名後備份)。

(圖1:終端綁定輔助程序運行主界面)

(圖2:查找記錄界面)

#!/bin/sh
trap "" 2
stty erase ^H
###############################################################
# 文件:TerminalBindConfig.sh
# 參數:$1 服務器名稱;$2 服務器IP;$3 終端類型(升騰"C",實達"S")
# 說明:終端綁定配置程序,目前只支持“升騰"和"實達"終端
# 版本:ver 1.0
# 作者:半點閒
# 博客:blog.csdn.net/cg_i
# 開發平臺:Ubuntu10.10
# 字符集:UTF-8
# 開始時間:2011-1-12 星期三
# 修改時間:
###############################################################
CONFIG_FILENAME=""		#擴展名爲當前系統日期的終端綁定配置文件(全路徑)
WINDOW_X=`tput lines`	#獲取屏幕信息	
WINDOW_Y=`tput cols`
#IP規則正則表達式
REGEX_IP="(2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[1-9]?[0-9])(/.(2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[1-9]?[0-9])){3}"
#終端
CENTERM_NAME="升騰終端"
CENTERM_FILE="ctelnetd.conf"
START_NAME="實達終端"
START_FILE="stelnetd.conf"
CT_FILE=""
CT_NAME=""

###############################################
# 函數:downloadTerminalBindConfigFile()
# 參數:$1 服務器名稱;$2 服務器IP;$3 終端綁定配置文件
# 返回:
# 說明:從遠程服務器中下載終端綁定配置文件
# 作者:半點閒
# 開始時間:2011-1-13 7:09 星期四
# 修改時間:2011-1-20 9:36 星期四
###############################################
downloadTerminalBindConfigFile()
{
	echo "下載/c";tput setf 6;echo "[$1]/c";tput setf 7;echo "綁定配置文件"
	echo "登錄用戶:/c";read user
	stty -echo	#關閉屏幕回顯
	echo "密碼:/c";read paswd
	stty echo	#開啓屏幕回顯
	#############################################################
	#關閉回顯後,讀入用戶的回車符號不會導致屏幕換行,因此後面加上'/n'來換行。
	#############################################################
	echo "/n確定(Y)?/c";read choice
	
	if [ "$choice" = "Y" -o "$choice" = 'y' ]
	then
		##########################
		# 存放文件的目錄不存在時
		##########################
		if [ ! -d "$1" ]
		then
			mkdir "$1"
		fi
		
		cd "$1"
		
		echo "open $2" > ftp.cmd
	    echo "user $user $paswd" >> ftp.cmd
	    echo "cd etc" >> ftp.cmd
	    echo "get $3" >> ftp.cmd
	    echo "quit" >> ftp.cmd
	    ftp -v -n < ftp.cmd 
	    rm "ftp.cmd" #清除臨時文件
	    
	    tmp=$(setBindConfigFile "$3")
	    if [ -z "$tmp" ]
	    then
	    	echo "從遠程服務器下載文件失敗!"
	    	read pause
	    else
	    	###############################################
			# 功能:iconv把下載的文件轉換爲與本地系統相同的編碼格式。
			# 本地系統:Ubuntu10.10
			# 中文字符編碼:UTF-8
			# 遠程服務器:ScoOperServer5.0.6
			# 中文字符編碼:GB2312
			###############################################
			iconv -f gb2312 -t utf-8 "$tmp" > "$tmp.iconv"
			mv "$tmp.iconv" "$tmp"
	    fi
	   
	    cd ..
	fi
}
#############################################################
# 函數:setBindConfigFile()
# 參數:$1 終端綁定配置文件名(原始名稱)。
# 返回:0 成功。副作用:返回更改後的文件名;
#	  1 失敗。副作用:返回""(空)字符串.
# 說明:將終端綁定配置文件更改爲本地名,更名後格式爲:"xxxx.當前年月日"。
# 注意:
#	  shell函數只能返回整數值,要想獲取"字符串"值得通過下面方式。
# 如:
#	  value=setBindConfigFile "文件名" 獲取的是函數返回的整數值.
#	  value=$(setBindConfigFile "文件名") 將函數當作命令來執行,
#	  可獲取函數中用echo命令輸出的字符串信息,達到獲取“字符串”值。
#
# 作者:半點閒
# 開始時間:2011-1-13 21:35 星期四 不旱了,寫完這個我就去睡覺。
# 修改時間:2011-1-20 9:55 星期四 下雪了
#############################################################
setBindConfigFile()
{
	if [ -e "$1" ]
	then
		##########################################################
		# 語句:sed 's//..*$//'
		# 說明:用sed命令把第一個"."符號(標誌着文件擴展名)到行尾的所字符刪掉。
		##########################################################
		file=$(echo | echo "$1" | sed 's//..*$//')
		extension=$(echo ".`date +%Y%m%d`")
		mv "$1" "$file$extension"
		echo "$file$extension"
		return 0
	fi
	
	echo ""
	return 1
}
############################################################
# 函數:getBindConfigFile()
# 參數:$1 終端綁定配置文件名(原始名稱)。
# 返回:0 成功。副作用:副作用:返本地配置文件名;
#	  1 失敗。副作用:返回""(空)字符串.
# 說明:返回本地終端綁定配置文名,格式:"xxxx.當前系統年月日"。
# 注:返回值更詳細解釋詳看setBindConfigFIle()函數說明。
# 作者:半點閒
# 開始時間:2011-1-13 17:02 星期四
# 修改時間:2011-1-20 10:40 星期四
############################################################
getBindConfigFile()
{
	##########################################################
	# 語句:sed 's//..*$//'
	# 說明:用sed命令把第一個"."符號(標誌着文件擴展名)到行尾的所字符刪掉。
	##########################################################
	file=$(echo "$1" | sed 's//..*$//')
	extension=$(echo ".`date +%Y%m%d`")
	
	if [ -e "$file$extension" ]
	then
		echo "$file$extension"
		return 0
	fi
	
	echo ""
	return 1
}
#################################################
# 函數:display()
# 參數:$1 擴展名爲當前系統日期的終端綁定配置文件名(全路徑)
# 說明:
# 作者:半點閒
# 開始時間:2011-1-13 3:06 星期四
# 修改時間:
#################################################
display()
{
	###############################
	# 功能:獲取文件記錄數
	# 命令:sed 's/^#.*//'
	# 說明:刪除'#'開頭的行,所有的字符。
	# 命令:sed '/^$/d'
	# 說明:刪除所有空行。
	###############################
	record=$(sed 's/^#.*//' "$1" | sed '/^$/d' | wc -l)
	perviously=1				#上次訪問記錄的位置
	too=0						#已閱記錄條數
	screen=$(($WINDOW_X - 4))	#一屏最多能顯示的記錄條數(爲底部菜單預留4個像素高)
	
	while [ "$too" -le "$record" ]
	do
		clear
	
		if [ "$too" -eq 0 ]
		then
			sed 's/^#.*//' "$1" | sed '/^$/d' | cat -n | sed -n $perviously,"$screen"p
			too=$screen
			perviously=$screen
		else
			sed 's/^#.*//' "$1" | sed '/^$/d' | cat -n | sed -n $perviously,"$too"p
			perviously=$too
		fi
		
		tput setf 6	#前景色:黃色
		tput cup $(($WINDOW_X - 2)) 1;echo "________________________________________________________/c"
		tput cup $WINDOW_X 1;echo " N:下一行 | P:下一頁 | F:查找指定記錄 | Q:退出 | 輸入:/c"
		tput setf 7	#前景色:白色
		
		read choice
		case "$choice"
			in
			[nN]) $((too += 1));;
			[pP])
				#####################################
				# 說明:記錄不夠一屏顯示時,顯示餘下的記錄。
				# 時間:2011.1.17 星期一 6:00
				#####################################
				if [ "$(($record - $too))" -lt "$screen" ]
				then
					$((too += $record - $too))
				else
					$((too += $screen))
				fi
				;;
			[qQ]) break;;
		esac
	done
}
################################################
# 函數:modifyTTY()
# 參數:$1 服務器名稱;$2 終端綁定配置文件(原始名稱);
#	  $3 本地終端綁定配置文件名
# 說明:修改“虛擬設備名稱”
# 作者:半點閒
# 開始時間:2011-1-19 14:54 星期三
# 修改時間:2011-1-24 14:30 星期一
################################################
modifyTTY()
{
	ttyName=$(sed 's/^#.*//' "$3" | sed '/^$/d' | sed -n 1,1p | sed 's/[^a-zA-Z]//g')
	
	echo "當前虛擬設備名稱:/c";tput setf 6;echo "[$ttyName]";tput setf 7
	echo "是否更改(Y):/c";read choice
	
	if [ "$choice" = "Y" -o "$choice" = 'y' ]
	then
		echo "請輸入新的虛擬設備名稱:/c";read newName
		########################
		# 去掉字符串中的空格、製表符
		########################
		newName=$(echo "$newName" | sed 's/[ /t]//g')
		
		if [ -n "$newName" ]
		then
			echo "確定將原虛擬設備名/c";tput setf 6;echo "[$ttyName]/c";tput setf 4;echo "更改爲[$newName]";tput setf 7
			echo "確定(Y):/c";read choice
			
			if [ "$choice" = "Y" -o "$choice" = 'y' ]
			then
				cd $1
				fileName=$(getBindConfigFile $2)
				if [ -e "$fileName" ]
				then
					sed "s/$ttyName/$newName/g" "$fileName" > "${fileName}.tmp"
					mv "${fileName}.tmp" "$fileName"
					echo "更改虛擬設備名成功!"
					read pause
				fi
				cd ..
			fi
		fi
	fi
}
################################################
# 函數:resetStartTtyNum()
# 參數:$1 服務器名稱;$2 終端綁定配置文件(原始名稱);
#	  $3 本地終端綁定配置文件名
# 說明:重置“虛擬設備”起始號。
# 作者:半點閒
# 開始時間:2011-1-20 13:20 星期四
# 修改時間:
################################################
resetStartTtyNum()
{
	###############################
	# ttyName:提取"虛擬設備"名
	# ttyNumber:提取"虛擬設備"起始號
	#   1.提取格式爲"設備名+設備號"
	#   2.提取"設備號"
	###############################
	ttyName=$(sed 's/^#.*//' "$3" | sed '/^$/d' | sed -n 1,1p | sed 's/[^a-zA-Z]//g')
	ttyNumber=$(sed 's/^#.*//' "$3" | sed '/^$/d' | grep -o "$ttyName[0-9]*" | sort -n | sed -n 1,1p)
	ttyNumber=$(echo "$ttyNumber" | sed 's/[^0-9]//g')
	
	echo "當前虛擬設備起始號:/c";tput setf 6;echo "[$ttyNumber]";tput setf 7
	echo "是否重置(Y):/c";read choice
	
	if [ "$choice" = "Y" -o "$choice" = 'y' ]
	then
		echo "請輸入新的設備起始號:/c";read newNumber
		##############
		# 去掉非數字字符
		##############
		newNumber=$(echo "$newNumber" | sed 's/[^0-9]//g')
		if [ -z "$newNumber" ]
		then
			echo "[$newNumber]非法!"
			read pause
		elif [ "$newNumber" -lt 0 ]
		then
			echo "[$newNumber]非法!"
			read pause
		else
			echo "確定將原設備起始號/c";tput setf 6;echo "[$ttyNumber]/c";tput setf 7;echo "重置爲/c";tput setf 4;echo "[$newNumber]";tput setf 7
			echo "確定(Y):/c";read choice
			
			if [ "$choice" = "Y" -o "$choice" = 'y' ]
			then
				cd $1
				fileName=$(getBindConfigFile "$2")
				if [ -z "$fileName" ]
				then
					echo "未找到終端配置文件!"
					read pause
				else
					record=$(sed 's/^#.*//' "$fileName" | sed '/^$/d' | wc -l)
					perviously=1 #上次訪問記錄的位置
					
					while [ "$perviously" -le "$record" ]
					do
						if [ "$perviously" -eq 1 ]
						then
							sed 's/^[0-9].*$//g' "$fileName" | sed '/^$/d' > "$fileName.tmp"
						fi
						
						sed 's/^#.*//' "$fileName" | sed '/^$/d' | sed -n $perviously,"$perviously"p | sed "s/$ttyName[0-9]*/$ttyName$newNumber/" >> "$fileName.tmp"
						perviously=$(($perviously + 1))
						newNumber=$(($newNumber + 1))
					done
					mv "$fileName.tmp" "$fileName"
					echo "重置完畢,按任意鍵退出!"
					read pause
				fi
				cd ..
			fi
		fi
	fi
}
################################################
# 函數:modify()
# 參數:$1 服務器名稱;$2 終端綁定配置文件(原始名稱);
#	  $3 本地終端綁定配置文件名
# 說明:
# 作者:半點閒
# 開始時間:2011-1-20 17:07 星期四
# 修改時間:
################################################
modify()
{
	while trueSTART_FILE="stelnetd.conf"
	do
		clear
		tput cup 0 19;echo "修改綁定配置"
		tput cup 1 10;echo "------------------------------"
		tput cup 2 18;echo "A.修改IP;"
		tput cup 3 18;echo "B.修改虛擬設備號;"
		tput cup 4 10;echo "------------------------------"
		tput cup 5 18;echo "請選擇(Q鍵退出):/c";read choice
	
		case "$choice"
			in
			[aA]) modifyIP "$1" "$2" "$3";;
			[bB]) ;;
			[qQ]) break;;
			*	) echo "錯誤的選項!";read pause;;
		esac
	done
}
################################################
# 函數:modifyIP()
# 參數:$1 服務器名稱;$2 終端綁定配置文件(原始名稱);
#	  $3 本地終端綁定配置文件名
# 說明:更改終端IP。
# 作者:半點閒
# 開始時間:2011-1-21 15:03 星期五 晴
# 修改時間:
################################################
modifyIP()
{
	echo "原終端IP:/c";read originalIP
	echo "新終端IP:/c";read newIP
	
	if [ ! $(echo "$originalIP" | grep -E "$REGEX_IP") ]
	then
		echo "原終端IP:[$originalIP]非合法IP格式,請重新輸入!"
		read pause;return
	elif [ ! $(echo "$newIP" | grep -E "$REGEX_IP") ]
	then
		echo "新終端IP:[$newIP]非合法IP格式,請重新輸入!"
		read pause;return
	fi
	
	find=$(grep "/<$newIP/>" "$3")
	if [ -n "$find" ]
	then
		echo "IP/c";tput setf 4;echo "[$newIP]/c";tput setf 7;echo "已存在,按任意鍵返回!"
		read pause;return
	fi
	
	find=$(grep "/<$originalIP/>" "$3")
	if [ -z "$find" ]
	then
		echo "在配置文件中未找到與/c";tput setf 6;echo "[$originalIP]/c";tput setf 7;echo "相匹配的記錄!"
		read pause;return
	else
		echo "IP/c";tput setf 6;echo "[$originalIP]/c";tput setf 7;echo "相對應的記錄:"
		tput setf 4	
		echo "$find"
		tput setf 7
		echo "更改後如下所示:"
		tput setf 6
		echo "$(sed "s//<$originalIP/>/$newIP/g" "$3" | grep "/<$newIP/>" )"
		tput setf 7
		echo "確定(Y):/c";read choice
		
		if [ "$choice" = "Y" -o "$choice" = 'y' ]
		then
			cd $1
			fileName=$(getBindConfigFile $2)
			sed "s//<$originalIP/>/$newIP/g" "$fileName" > "$fileName.tmp"
			mv "$fileName.tmp" "$fileName"
			cd ..	
		fi
	fi
}
###############################################################
# 函數:addBind()
# 參數:$1 服務器名稱;$2 擴展名爲當前系統日期的終端綁定配置文件(全路徑);
#	  $3 終端類型
# 說明:添加新的綁定到配置文件
# 作者:半點閒
# 開始時間:2011-1-17 7:06 星期一
# 修改時間:2011-1-25 11:02 星期二
###############################################################
addBind()
{
	echo "添加綁定"
	echo "終端IP:/c";read ip
	echo "起始窗口[0-9]:1(默認)"
	echo "中止窗口[0-9]:2(默認)"
	echo "確定(Y):/c";read choice
	
	if [ "$choice" = "Y" -o "$choice" = 'y' ]
	then
		if [ ! $(echo "$ip" | grep -E "$REGEX_IP") ]
		then
			echo "終端IP:[$ip]非合法IP格式,請重新輸入!"
			read pause;return
		fi
		##############
		# 獲取文件記錄數
		##############
		record=$(sed 's/^#.*//' "$2" | sed '/^$/d' | wc -l)
		##############
		# 提取虛擬設備
		##############
		ttyName=$(sed 's/^#.*//' "$2" | sed '/^$/d' | sed -n 1,1p | sed 's/[^a-zA-Z]//g')
		ttyNumber=$(sed 's/^#.*//' "$2" | sed '/^$/d' | grep -o "$ttyName[0-9]*" | sed 's/[^0-9]//g' | sort -n | sed -n $record,"$record"p)
		
		echo "將新增以下兩條綁定到配置文件:"
		tput setf 6	#前景色:紅色。
		newRecord=""
		
		if [ "$3" = "C" ]
		then
			echo "$ip/t1/t$ttyName$(($ttyNumber + 1))"
			echo "$ip/t2/t$ttyName$(($ttyNumber + 2))"
			CT_FILE=$CENTERM_FILE
		elif [ "$3" = "S" ]
		then
			echo "$ip.1/t$ttyName$(($ttyNumber + 1))/t0/t0/t0/t1"
			echo "$ip.2/t$ttyName$(($ttyNumber + 2))/t0/t0/t0/t1"
			CT_FILE=$START_FILE
		else
			echo "未知終端類型!"
			read pause;return
		fi
		tput setf 7	#前景色:白色
		echo "確定(Y):/c";read choice
		if [ "$choice" = "Y" -o "$choice" = 'y' ]
		then
			cd $1
			fileName=$(getBindConfigFile $CT_FILE)
			
			find=""
			if [ "$3" = "C" ]
			then
				##################################
				# 升騰記錄格式:"IP 窗口號 虛擬設備名稱"
				##################################
				find=$(grep "/<$ip/>" "$fileName" | grep "[^1-9A-Za-z.]1[^1-9A-Za-z.]")
				find=$find$(grep "/<$ip/>" "$fileName" | grep "[^1-9A-Za-z.]2[^1-9A-Za-z.]")
			elif [ "$3" = "S" ]
			then
				##########################################
				# 實達記錄格式:"IP.窗口號 虛擬設備名稱 0 0 0 1"
				##########################################
				find=$(grep "/<$ip.1/>" "$fileName")
				find=$find$(grep "/<$ip.2/>" "$fileName")
			fi
			
			if [ -n "$find" ]
			then
				echo "當前配置存在重名IP綁定:"
				tput setf 4
				echo "$find"
				tput setf 7
				echo "按任意鍵退出......"
				read pause
			else
				if [ "$3" = "C" ]
				then
					echo "$ip/t1/t$ttyName$(($ttyNumber + 1))" >> "$fileName"
					echo "$ip/t2/t$ttyName$(($ttyNumber + 2))" >> "$fileName"
				elif [ "$3" = "S" ]
				then
					echo "$ip.1/t$ttyName$(($ttyNumber + 1))/t0/t0/t0/t1" >> "$fileName"
					echo "$ip.2/t$ttyName$(($ttyNumber + 2))/t0/t0/t0/t1" >> "$fileName"
				fi				
				echo "添加記錄到配置文件成功,按任意鍵返回。"
				read pause
			fi

			cd ..
		fi
	fi
}
###############################################
# 函數:delBind()
# 參數:$1 服務器名稱;$2 終端綁定配置文件名(原始名稱)
#	  $3 終端類型
# 說明:刪除配置文件中的綁定。
# 作者:半點閒
# 開始時間:2011-1-19 11:07 星期三
# 修改時間:2011-1-25 13:59 星期二
###############################################
delBind()
{
	echo "刪除綁定"
	echo "終端IP:/c";read ip
	echo "確定(Y):/c";read choice
	
	if [ "$choice" = "Y" -o "$choice" = 'y' ]
	then
		if [ ! $(echo "$ip" | grep -E "$REGEX_IP") ]
		then
			echo "終端IP:[$ip]非合法IP格式,請重新輸入!"
			read pause;return
		fi
		
		cd $1
			
		fileName=$(getBindConfigFile $2)
		find=""
		if [ "$3" = "C" ]
		then
			##################################
			# 升騰記錄格式:"IP 窗口號 虛擬設備名稱"
			##################################
			find=$(grep "/<$ip/>" "$fileName" | grep "[^1-9A-Za-z.]1[^1-9A-Za-z.]")
			find=$find$(grep "/<$ip/>" "$fileName" | grep "[^1-9A-Za-z.]2[^1-9A-Za-z.]")
		elif [ "$3" = "S" ]
		then
			##########################################
			# 實達記錄格式:"IP.窗口號 虛擬設備名稱 0 0 0 1"
			##########################################
			find=$(grep "/<$ip.1/>" "$fileName")
			find=$find$(grep "/<$ip.2/>" "$fileName")
		fi
			
		if [ -z "$find" ]
		then
			echo "在配置文件中未找到與[$ip]相匹配的記錄!"
			read pause
		else
			echo "刪除以下綁定:"
			tput setf 4
			echo "$find"
			tput setf 7
			
			echo "確定(Y):/c";read choice
			
			if [ "$choice" = "Y" -o "$choice" = 'y' ]
			then
				sed "/^$ip.*$/d" "$fileName" > "${fileName}.tmp"
				mv "${fileName}.tmp" "$fileName"
				echo "綁定刪除成功,按任意鍵返回."
				read pause
			fi
		fi
		
		cd ..
	fi
}
###############
# 程序開始
###############
###############
# 獲取"終端類型"
###############
case "$3"
	in
	[Cc]) CT_NAME=$CENTERM_NAME;CT_FILE=$CENTERM_FILE;;
	[Ss]) CT_NAME=$START_NAME;CT_FILE=$START_FILE;;
	*	) echo "終端類型錯誤!";read pause;return
esac
################################
# 配置文件不存在時,從遠程服務器中下載
################################
CONFIG_FILENAME=$(getBindConfigFile "$1/$CT_FILE")
if [ -z "$CONFIG_FILENAME" ]
then
	downloadTerminalBindConfigFile "$1" "$2" "$CT_FILE"
	CONFIG_FILENAME=$(getBindConfigFile "$1/$CT_FILE")
fi
	
if [ ! -e "$CONFIG_FILENAME" ]
then
	return
fi

while true
do
	clear
	tput cup 0 22;echo "終端綁定配置程序"
	echo "--------------------------------------------------------------------"
	tput setf 4			#前景色:紅色。
	echo "機構名稱:/c"
	tput setf 7			#前景色:白色。
	echo "$1  /c"
	tput setf 4			#前景色:紅色。
	echo "終端類型:/c"
	tput setf 7			#前景色:白色。
	echo "$CT_NAME  /c"
	tput setf 4			#前景色:紅色。
	echo "文件名稱:/c"
	tput setf 7			#前景色:白色。
	echo "$CT_FILE"
	echo "--------------------------------------------------------------------"
	tput cup 4 23;echo "1.查看綁定配置文件信息;"
	tput cup 5 23;echo "2.添加綁定;"
	tput cup 6 23;echo "3.刪除綁定;"
	tput cup 7 23;echo "4.修改綁定;"
	tput cup 8 23;echo "5.修改虛擬設備名稱;"
	tput cup 9 23;echo "6.重置虛擬設備起始號;"
	tput cup 10 23;echo "7.更新配置到服務器。"
	echo "--------------------------------------------------------------------"
	tput cup 12 24;echo "請選擇(Q鍵退出):/c";read choice
	
	case "$choice"
			in
			1) display "$CONFIG_FILENAME";;
			2) addBind "$1" "$CONFIG_FILENAME" "$3";;
			3) delBind "$1" "$CT_FILE" "$3";;
			4) modify "$1" "$CT_FILE" "$CONFIG_FILENAME";;
			5) modifyTTY "$1" "$CT_FILE" "$CONFIG_FILENAME";;
			6) resetStartTtyNum "$1" "$CT_FILE" "$CONFIG_FILENAME";;
			7) ;;
			[qQ]) break;;
			*	) echo "錯誤的選項!";read pause;;
	esac
done 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章