【问题标题】:bug in shell scripting basic programshell脚本基本程序中的错误
【发布时间】:2014-09-07 07:13:27
【问题描述】:

以下是我从书中复制的代码,但它无法正常工作

#!/bin/sh

echo "is it morning?reply with yes or no"
read timeof

if [ $timeof="yes" ]
then
echo "Good morning"
else
echo "Good afternoon"
fi

exit 0

当我输入是时,它会输出早上好,但它也会输出早上好。过了一会儿,它对是和否都说下午好。这真是令人沮丧,请帮忙。

~
~

【问题讨论】:

  • 不应该是-eq而不是=

标签: shell sh ubuntu-13.10


【解决方案1】:

等号的两边都应该有一个空格字符。请注意,它不允许 timeof 为空。额外的功劳给你修复:-)

【讨论】:

  • 是的,谢谢,解决了。因此,在分配变量时,不得在任一侧使用空格,但在检查条件时这是必要的。 null问题可以通过两边使用双引号来解决?
  • 如果要显式测试 null,请使用 -z。阅读“test”命令(“[”通常是“test”的链接)。如所写,如果用户输入“否”或只是在空白行上按下回车键,您的程序将打印“下午好”。哦,我建议您使用 /bin/bash,因为 /bin/sh 是一个较旧的 shell。无论如何,在查找信息时,请确保您正在阅读正确 shell 的手册页。
【解决方案2】:

除了在Gary_W 中提到的在= 周围添加空格外,在必要时还要将参数括在双引号中,以防止分词和意外的路径名扩展。

if [ "$timeof" = yes ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2011-05-21
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    相关资源
    最近更新 更多