首页 > 学技术 > 技术网文 > Linux Shell > 正文

[保留] 自制简漏的终端聊天脚本,请大家多斧正,谢谢


来源 chinaunix.net 酷勤网整理

无聊时用write做了个简单的icq.sh,目前只实现了在同一主机下的所有终端互聊。谈不上什么功能和界面了,主要是抛砖引玉,各位请多修正改进请大家帮着精进啊,谢谢!

脚本简单说明:

  1)由于write默认为root权限,普通用户要使用write必须要先由root授权
授权成功后,可建一普通聊天用户icq(呵呵,不爽就自已改改,当然脚本中的用户名也请相应修改) 

   2)icq用户根下必须要有配置表user.dat,规则为每行为3个字段,分别为序号,tty名,网点名称,字段间以空格分隔.各位可按实际情况编辑生成该表,shell根据这表来选择聊天对像,未在该表中反映的终端和用户将不能应用本shell
引用:$cat user.dat
1  ttyp0 沙湾局
2  ttyp1 乐山局



   3)必须要对方TTY开启并已用icq用户登陆才能与之互聊,聊完之后按Ctrl-d即可退出。已在sco5.0.5 ksh下测试通过,在unix下自已和自已聊起来还是别有一番风味的 ^_^



#/bin/ksh

#终端聊天shell 
trap 'tput sgr0 ; rm $HOME/talk.temp $HOME/icq.tmp 2>/dev/null ; clear ; exit 0 ' 0 1 3 9 15
trap '' 2
tput bold
clear
icqname="icq"

test -e $HOME/user.dat || { echo "\n        用户配置表 user.dat 不存在\n\n        请联系管理人员解决 ^_^ " ; read ; exit 0 ; }

metty=`tty|awk -F"/" '{print $3}'`

if [ -e $HOME/icq.tmp ]
then
me=`awk '{print $3}' $HOME/icq.tmp`
if [ "$metty" = "$me" ]
then
yourtty=`awk '{print $2}' $HOME/icq.tmp` 
yourname=`awk '{ if ($2=="'$yourtty'") print $3}' $HOME/user.dat`   
mename=`awk '{if ($2=="'metty'") print $3}' $HOME/user.dat` 
mexh=`awk '{if ($2=="'metty'") print $1}' $HOME/user.dat`
clear ; mesg -y ; echo "\n        你正与 ${yourname} 聊天\n " 
echo "\n        ${mename} 正与你聊天,请选择 ${mexh} 与之对聊\n" >/dev/$yourtty
/tcb/bin/asroot write $icqname $yourtty ; exit 0 
fi
fi

while :
do
clear 
who | awk '{print $1,$2}' >$HOME/talk.temp
sed '/'"$metty"'/d;/^#/d' $HOME/user.dat |awk 'BEGIN{printf("\n%-5s%-10s%-16s\n"),"序号","TTY","用户名"} \
{printf("%-5s%-10s%-16s\n"),$1,$2,$3}' 

echo -n  "\n        请输入对方的序号(q键退出程序):   "
read xh
test "$xh" = "q" -o "$xh" = "Q" && exit 0   
yourtty=`awk '{if ($1=="'$xh'") print $2 }' $HOME/user.dat 2>/dev/null`
test -z "$yourtty" && { echo "\n       $xh 未配置TTY\n" ; read ; continue ; }

ut=`awk '{if ($2=="'$yourtty'") print $2}' $HOME/talk.temp 2>/dev/null`
test -z "$ut" && { echo "\n       ${ut} 终端未登陆\n" ; read ; echo $icqname $metty $yourtty > $HOME/icq.tmp ; continue ; } 

yn=`awk '{if ($1=="'$icqname'" && $2=="'$ut'") print $1,$2}' $HOME/talk.temp 2>/dev/null`
test -z "$yn" && { echo "\n        $icqname 用户未在 $ut 终端上登陆\n" ; read ; \
echo $icqname $metty $yourtty > $HOME/icq.tmp ; continue ;  } || break 
done
mesg -y
clear
echo $icqname $metty $yourtty > $HOME/icq.tmp 
yourname=`awk '{if ($2=="'$ut'") print $3 }' $HOME/user.dat`
mename=`awk '{if ($2=="'$metty'") print $3 }' $HOME/user.dat`
mexh=`awk '{if ($2=="'$metty'") print $1 }' $HOME/user.dat`
echo "\n        你正与 ${yourname} 聊天\n"
echo "\n        你正与 ${mename} 聊天\n        请选择 ${mexh} 与之对聊\n" >/dev/$yourtty
/tcb/bin/asroot write $icqname $yourtty




 秋池飞叶 回复于:2005-09-02 15:41:55

有点意思,研究下


 styr 回复于:2005-09-02 16:13:48

欢迎测试,请多提意见和改进方案,谢谢.


 heijude 回复于:2005-09-02 16:28:44

强人,赞一个!




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=604309
转载请注明作者名及原文出处



收藏本页到: