升腾、实达终端绑定辅助脚本程序

 

升腾、实达终端绑定辅助脚本程序

——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张图片

(图1:终端绑定辅助程序运行主界面)

升腾、实达终端绑定辅助脚本程序_第2张图片

(图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 

 

你可能感兴趣的:(OS/Network,终端,脚本,服务器,extension,file)