如何在循环中使用getopts内部的case命令,UNIX

时间:2014-11-16 20:29:06

标签: bash unix

我目前有一个Unix程序,我试图正确地使用getopts while循环,其中case命令嵌套在里面。在getopts里面while循环是一个case命令,在case case里面是两个选项,它们都是循环。这是当前的代码:

while getopts ufn: user
do

    case "$user"

    in

            u)

                    tty=$(who | grep "$user " | cut -d\  -f 2)
                    until who | grep "$user "  > /dev/null
                    do
                            sleep 60
                    done
                            echo "$user has logged onto $tty";;
            f)

                    until find | home/students/shaunkolkman/$user
                    do
                            test -d $user || test -f $user
                            sleep 20
                    done
                            echo "$user is a file or directory";;

    esac

done

user=$1

选项u是一个until循环,它寻找某人登录并显示该用户所在的tty。选项f是一个直到查找文件或目录的循环。直到循环工作完全正常。一旦我发现了这个问题,我们将在稍后添加选项n。

这是一个示例信息,其中包含对正在发生的事情的描述。

./mon4 -f vex

我面临的问题是来自-f的f被视为变量。随着-f仍被读取作为getopts的选项。我不明白为什么vex不被读作变量。

1 个答案:

答案 0 :(得分:0)

如前所述,需要值的选项需要冒号

while getopts uf:n: user
#               ^
#              /
#    notice ---

Example