do
{
print"CHOOSE ANY OF THE FOLLOWING OPTIONS:\n";
print"==========================================\n";
print"1-LOGIN & LOGOUT\n";
print"2-MAKE CALL\n";
print"3-EXIT\n";
print"==========================================\n";
print("\nENTER YOUR OPTION: ");
$option=<>;
if($option==1)
{
print("IN THE LOGIN & LOGOUT SCENARIO\n");
&Login_logout();
}
elsif($option==2)
{
print("IN THE MAKE CALL SCENARIO\n");
}
elsif($option==3)
{
print("\nEXITING...\n");
exit(0);
}
else
{
print"\nINSERT A VALID OPTION...!!!\n";
}
}while(1);
子程序Login_logout()在这里调用SIPp实例(命令行实例)。成功完成命令行实例后,标量$选项需要一些垃圾值并点击else条件并打印“INSERT A VALID OPTION ... !!!”行。这个过程将继续进行,直到强制关闭Konsole。
任何人都可以告诉我脚本中的错误。
答案 0 :(得分:2)
请记住,<>
需要一行而不是一个字符串,因此需要删除return(CR / LF等)。
...
$option=<>;
chomp $option; ## chomp removes the tailing return
if($option eq '1')
...
答案 1 :(得分:1)
我认为你的外部程序调用修改/重定向STDIN的问题,就像它读取垃圾一样。
设置autoflush:
$|=1;
如果您在外部呼叫中不需要stdin / stderr,请将其显式关闭或将其重定向到文件:
`sip.sh >&- 2>&- <&-`
或仅关闭stdin
`sih.sh <&-`
如果我是正确的,这个技巧只能在最近的ksh和bash下运行。至少在ksh下: - )
的问候,
答案 2 :(得分:-1)
do {
}while(1);
这只是无限循环,没有条件检查所以它会无限循环,更多尝试使用$option=<STDIN>;