2013-04-18 81 views
0

我试图让用户可以输入一个“i”或“V”,并有不同的消息呼应简单的UNIX case语句

这里是我的代码:

while getopts :iv opt 
do 
    case $opt in 
      i) interactive=true ;; 
      v) verbose=true ;; 
      \?) echo "$0: invalid option --'$OPTARG'" 
       exit ;; 
     esac 
done 
shift $(($OPTIND - 1)) 

所以远远有效,但我不确定如何在此循环之外调用它。

我应该使用if循环吗?请帮忙!

+0

通过Unix你是指POSIX兼容sh? –

回答

0

确保您没有继承环境变量interactiveverbose,方法是将它们设置为循环前的值。

interactive=false 
verbose=false 
while getopts :iv opt 
do ... 
done 

您显示将认识的命令行选项-i-v或它们的组合,并相应地设置的变量的代码。

然后,您可以使循环后的代码根据$interactive$verbose的值做不同的事情。请注意,这些测试假定变量设置为truefalse(字符串);如果变量为空,它们将无法正常工作。

if [ $interactive = true ] 
then read line 
    ...process $line... 
fi 

if [ $verbose = true ] 
then echo "Talking more than usual..." 
fi 

等等

我不知道什么是如何调用它这个循环之外“的意思。