#!/bin/sh
#AUTHOR: bones7456 (bones7456@gmail.com)
#VERSION: 20090728

PASSFILE="$HOME/.pass"

if [[ x`which expect` = x"" ]];then
	echo "么装expect啊...先给装上吧..."
	exit 1
fi
if [[ x`which luit` = x"" ]];then
	echo "么装luit啊...先给装上吧..."
	exit 2
fi
if [[ ! -f $PASSFILE || ! -r $PASSFILE ]];then
	echo "密码文件不存在或不可读"
	exit 3
fi
PASSFILEAccess=`stat "$PASSFILE" | grep Access | head -1 | awk -F "[(/]+" '{print $2}'`
if [[ $PASSFILEAccess -gt 0600 ]];then
	echo "密码文件($PASSFILEAccess)权限太大了,为了安全起见,请设置为600"
	exit 4
fi
if [[ $# -eq 0 ]];then
	echo "Usage: $0 [-l]|[-e]|hostname1 hostname2 ..."
	exit 5
fi
if [[ $1 = "-l" ]];then
	cat $PASSFILE
	exit 0
fi
if [[ $1 = "-e" ]];then
	gedit $PASSFILE &
	exit 0
fi

HOSTS=""
EXP=""
LINEPREFIX="name"
NL="
"
USUALNAME=`grep -vE ^# $PASSFILE | grep usualName | awk '{print $2}'`
USUALNAMEPSW=`grep -vE ^# $PASSFILE | grep usualPSW | awk '{print $2}'`

echo -e "\x1b]0;""$@""\x07" >&2
until [[ -z "$1" ]]
do
	THENAMEANDHOST=`grep -vE ^# $PASSFILE | grep "${LINEPREFIX}=$1" | awk '{print $2}'`
	if [[ "x$THENAMEANDHOST" = "x" ]];then
		echo "没有找到名称为 $1 的服务器..."
		exit 10
	fi
	TMP=`echo "$THENAMEANDHOST" | wc -l`
	if [[ $TMP -gt 1 ]];then
		echo "找到多个名称匹配 $1 的服务器..."
		echo "`grep -vE ^# $PASSFILE | grep "${LINEPREFIX}=$1"`"
		exit 11
	fi
	THENAME=`grep -vE ^# $PASSFILE | grep "${LINEPREFIX}=$1" | awk '{print $2}' | awk -F "@" '{print $1}'`
	THEPSW=`grep -vE ^# $PASSFILE | grep "${LINEPREFIX}=$1" | awk '{print $3}'`
	CODING=`grep -vE ^# $PASSFILE | grep "${LINEPREFIX}=$1" | awk '{print $4}'`
	HOSTS+=" ssh -t "$THENAMEANDHOST
	if [[ "x$THEPSW" = "x" || "$THEPSW" = "|" && "$THENAME" = "$USUALNAME" ]] ; then
		EXP+="expect password:"$NL"send \""$USUALNAMEPSW"\n\""$NL
	elif [[ "$THEPSW" != "NULL" ]] ; then
		EXP+="expect password:"$NL"send \""$THEPSW"\n\""$NL
	fi
	LINEPREFIX+="-$1"
	shift
done
if [[ "x$CODING" = "x" ]];then
	CODING=`grep -vE ^# $PASSFILE | grep usualCODING | awk '{print $2}'`
fi
if [[ "x$CODING" = "x" ]];then
	echo "$PASSFILE 中没有配置 usualCODING,使用utf8."
	CODING="utf8"
fi
CMD="set timeout 30"$NL"spawn luit -encoding ""$CODING""$HOSTS"$NL"$EXP""interact""$NL"
echo "$CMD"
echo "======================"
expect -c "$CMD"

