LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1216|回复: 7

看LINUX与UNIX Shell编程指南中有一CASE永远不可能运行到,请前辈帮我看看。

[复制链接]
发表于 2005-6-22 23:53:43 | 显示全部楼层 |阅读模式
看LINUX与UNIX Shell编程指南中有一CASE永远不可能运行到,请前辈帮我看看。
此文在264页,红色部分据我分析经过: ${_ANS := $_DEFAULT}后,它的值已经变成了给它的默认值Y或者N,所以它不可能为空,那么if的条件if ["$_ANS" = ""]就不可能成立。请各前辈指点。谢谢了。
continue_promptYN()
#to call: continue_prompt "string to display" default_answer
{
# continue_prompt
_STR=$1
_DEFAULT=$2
#check we have the right params
if [$# -lt 1];then
        echo "continut_prompt: I need a string to display"
        return 1
fi
while :
do
        echo -n "$_STR [Y..N] [$_DEFAULT]:"
        read _ANS
        # if user hits return set the default and determine the return vallue
        : ${_ANS := $_DEFAULT}
        if ["$_ANS" = ""];then
        case $_ANS in
                Y) return 0
                ;;
                N) return 1
                ;;
        esac
        
            fi
        #user has selected something
        case $_ANS in
            y|Y|Yes|YES) return 0 ;;
                n|N|NO|No) return 1 ;;
                *) echo "Answer either Y or N,default is $_DEFAULT" ;;
        esac
        echo $_ANS
done
}
发表于 2005-6-23 03:22:40 | 显示全部楼层
Post by netjumby
看LINUX与UNIX Shell编程指南中有一CASE永远不可能运行到,请前辈帮我看看。
此文在264页,红色部分据我分析经过: ${_ANS := $_DEFAULT}后,它的值已经变成了给它的默认值Y或者N,所以它不可能为空,那么if的条件if ["$_ANS" = ""]就不可能成立。请各前辈指点。谢谢了。
continue_promptYN()
#to call: continue_prompt "string to display" default_answer
{
# continue_prompt
_STR=$1
_DEFAULT=$2
#check we have the right params
if [$# -lt 1];then
        echo "continut_prompt: I need a string to display"
        return 1
fi
while :
do
        echo -n "$_STR [Y..N] [$_DEFAULT]:"
        read _ANS
        # if user hits return set the default and determine the return vallue
        : ${_ANS := $_DEFAULT}
        if ["$_ANS" = ""];then
        case $_ANS in
                Y) return 0
                ;;
                N) return 1
                ;;
        esac
        
            fi
        #user has selected something
        case $_ANS in
            y|Y|Yes|YES) return 0 ;;
                n|N|NO|No) return 1 ;;
                *) echo "Answer either Y or N,default is $_DEFAULT" ;;
        esac
        echo $_ANS
done
}


我想是打印时少打了一个!吧。如果$_ANS是空,根本没有必要do case. 所以可能是打印错误。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-23 14:23:36 | 显示全部楼层
谢谢yongjian ,如果是!=的话,那红色的部分完全可不用了,因为下面还有个CASE在判断Y,N。
回复 支持 反对

使用道具 举报

发表于 2005-6-23 21:51:41 | 显示全部楼层
Post by netjumby
谢谢yongjian ,如果是!=的话,那红色的部分完全可不用了,因为下面还有个CASE在判断Y,N。


我认为也是没有必要了。就算$_ANS为空的情况,下面的case也能包括。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-23 22:40:06 | 显示全部楼层
但例子是书上抄来的,肯定有它的用途的。
当输入回车时,read _ANS为空,当$2没有时,if ["$_ANS" = ""];条件成立,但就是不知道在
case $_ANS in
Y) return 0
;;
N) return 1
;;
esac
里,会返回哪一个,是Y还是N呢???????????谢谢。
回复 支持 反对

使用道具 举报

发表于 2005-6-24 06:54:58 | 显示全部楼层
Post by netjumby
但例子是书上抄来的,肯定有它的用途的。
当输入回车时,read _ANS为空,当$2没有时,if ["$_ANS" = ""];条件成立,但就是不知道在
case $_ANS in
Y) return 0
;;
N) return 1
;;
esac
里,会返回哪一个,是Y还是N呢???????????谢谢。


是的,但就算条件成立,下面的case全包括了。书上的也不一定全对,是不是。
回复 支持 反对

使用道具 举报

发表于 2005-6-24 08:42:54 | 显示全部楼层
这本书上示例的错误比较多,你注意一下,有很多明显错误的地方自己应该就可以看出来。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-24 10:30:26 | 显示全部楼层
谢谢yongjian版主,你的头像帅呆了。 谢谢帮我的几位。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表