Linux shell getopts问题
我是在看一本Unix.shell编程(第三版)中书中一个例子时发现问题的,源代码如下:
描述:
这个例子很简单,大意是看某个用户是否已经登陆.执行些程序里后面跟参数,如 ./run -m -t 30 root
-m 就是是否要把显示信息发送到邮箱去,如果不加-m就直接显示在标准输出
-t 呢就是设定多长时间去检查些用户是否已经登陆.
问题:
1.执行此程序时在case里把option赋值给了interval 但我通过打出而是把t这个字母赋值给了它,而不是30这个数字?
2.$OPTIND这个参数的变化是根据什么?
3.此程序执行时,如果监听的用户已经登陆则正常,如果没有登陆则错误,我知道这与interval这个赋值有关系, 请问怎样才能把30赋给interval而不是t呢?
谢谢!!!
mailopt=FALSE
interval=60
#process command options
while getopts mt: option
do
case "$option"
in
m)mailopt=TRUE;;
t)interval=$option;;
\?)echo "Usage: mon [-m] [-t n] user"
echo "-m means to be informed by mail"
echo "-t means check every n seconds"
exit 1;;
esac
done
#make sure a user name was specified
echo $OPTIND
echo $#
if [ "$OPTIND" -gt "$#" ]
then
echo "Missing user name!"
exit 2
fi
shiftcount=$((OPTIND - 1))
shift $shiftcount
user=$1
#
#Check for user logging on
#
until who | grep "^$user " > /dev/null
do
sleep "$interval"
done
#
#When we reach this point, the user has logged on
if [ "$mailopt" = FALSE ]
then
echo "$user has logged on"
else
runner=$(who am i | sed 's/ .*//')
echo "$user has logged on" | mail $runner
fi