日期:2014-05-16  浏览次数:20621 次

关于shell函数返回值
大家好,请看以下shell程序:

Perl code

#!/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" #问题1.当函数yes_or_no返回值为0,条件为真,当yes_or_no返回值为0,条件反而为假
then
  echo "Hi $1, nice name"
else
  echo "Never mind"
fi

exit 0




但是为什么我一段程序:
Perl code

if 0 #问题2.这里无论是什么值,执行的结果都是no
then
  echo "yes"
else
  echo "no"
fi



请问两个问题的产生有什么原因?



------解决方案--------------------
shell中的真为0 假为非0 这是和C语言最大的区别。

至于为什么 if 0 或其他数 的结果都是no 。 那是因为if 是用来判断真假的 而你的0 1 没有实际意义。 没有这样的命令或变量 你可以这样。
Assembly code

a=0 
if [[ $a ]] 
then 
echo yes
else 
echo no

a=1
if [[ $a ]] 
then 
echo yes
else 
echo no

------解决方案--------------------
布尔型0就是no
------解决方案--------------------
这个和bash版本有关 低版本的bash 不支持 [[运算符。

[]这个运算符有时候会出现问题 比如 [ $a -eq 1 ] 当a没定义的时候会报语法错误 而[[不会
------解决方案--------------------
可以参考 tr 的[[:upper:]] [[:lower:]]
------解决方案--------------------
探讨

请问tr是什么意思?谢谢!