ll_211314 发表于 2010-2-24 10:03

新手问一个简单的shell问题,请帮忙。

看到一个shell程序,不太理解,发上来请兄弟们帮看看。
#!/bin/sh
yes_or_no() {
echo “Is your name $* ?”
while true
do
   echo -n “Enter yes or no: “
   read x
   case “$x” in
      y | yes ) return 0;;
      n | no ) return 1;;
      * ) echo “Answer yes or no”
   esac
   done
}
echo “Original parameters are $*“
if yes_or_no “$1”
then
   echo “Hi $1, nice name”
else
   echo “Never mind”
fi
exit 0
while循环是不是死循环,case语句当输入的不是yes和no的时候是怎么执行的,还有下面的if语句是yes_or_no返回0时为真?
如果您不嫌烦就帮忙大概讲一个这个程序,谢了。
}

ll_211314 发表于 2010-2-24 11:26

看来没人回答了,等我自己再研究吧,进来个人,我结贴给分。

sinanjj 发表于 2010-2-24 11:45

这个程序谁写的。有问题啊。

应该这样

ll_211314 发表于 2010-2-24 11:47

3# sinanjj

是《linux程序设计》里的程序,我看的不太懂,版主帮看看。

sinanjj 发表于 2010-2-24 11:51

#!/bin/sh
yes_or_no() {
echo Is your name $* ?
while true
do
   echo -n Enter yes or no:
   read x
   case $x in
      "y" | "yes" ) return 0;;
      "n" | "no" ) return 1;;
      * ) echo Answer yes or no
   esac
   done
}
echo Original parameters are $*
if yes_or_no $1
then
   echo Hi $1, nice name
else
   echo Never mind
fi
exit 0

sinanjj 发表于 2010-2-24 11:51

本帖最后由 sinanjj 于 2010-2-24 11:54 编辑

主要考察shell程序的参数。

LZ自己运行测试下。就知道了。

从书上拷贝的时候”不是英文字符。

怪不得我觉得这么奇怪。。。。

$1是参数1, 以此类推。

$*是所有参数。

ll_211314 发表于 2010-2-24 11:54

我运行了。
* ) echo Answer yes or no这个地方不太懂,还有就是那个while如果在c里应该是个死循环啊。

sinanjj 发表于 2010-2-24 11:57

当然是死循环啊。

不是还有return吗。

就是直接return出函数了。给C是一样的。

ll_211314 发表于 2010-2-24 11:58

应该是return语句就直接跳出函数了。

sinanjj 发表于 2010-2-24 11:59

你这不自己会分析吗。。。。。。。。。。。

ll_211314 发表于 2010-2-24 12:01

本帖最后由 ll_211314 于 2010-2-24 12:02 编辑

呵呵,是你提示了一下想起来了,谢谢斑竹了,给分了。

WandyLau 发表于 2011-10-6 17:03

你的问题解决了么?我也看这本书,最近也看到这里了。是个死循环。我执行了。我也想到了return的返回值了。可是不行,跳不出while循环。
页: [1]
查看完整版本: 新手问一个简单的shell问题,请帮忙。