注册 登录
编程论坛 Linux教室

初学shell 有个小问题

linkang1024 发布于 2012-06-08 09:48, 805 次点击
#!/bin/sh
echo "is it morning?please anwser yes or no"
read timeofday
if [$timeofday="yes"];then
echo "good morning"
else
echo "good afternoom"
fi
exit 0
输入yes后  显示line 5: [yes=yes]:commad no found
请问是什么原因? 这个是“linux程序设计”的例子  我在分区/home 写的  后缀加了.sh  运行时直接在当前目录运行的

4 回复
#2
静夜思2012-06-08 10:24
方括号里面要留空格
if [ $timeofday="yes" ];then
#3
pangding2012-06-13 21:59
嗯。刚接触的时候可能感觉语法上不太熟悉。我感觉脚本语言学点基本的东西之后,去读点别人写的的比较好,借鉴点经验。

bash 对空格很敏感,大家的代码往往都会体现出对空格的小心处理。比如一般人的代码会写成:
if [ "$timeofday" == "yes" ] ; then
把 timeofday 引住的原因是,它有可能会读到一个空字符串。不加的话,就会变成 [ == "yes" ] 是有语法错误的。
加了之后是 [ "" == "yes" ],没问题,而且应该正好是本来要表达的意思。

另外 = 是用来赋值的。== 是用来判断相等。if 后面用 == 的情况相对会多一点。
#4
pangding2012-06-13 22:07
哦,另外由于读取输入之前需要提示这个功能过于平凡,所以 read 带了一个 -p 选项,比如:
read -p "Is it morning? (yes or no) "
的写法就挺常见的。有关命令的详细情况,可以用
$ help read
看到。

而且你可以用这个例子练练循环(如果你学了的话)。如果用户输入的不是 yes 或者 no(甚至也不是 YES 和 NO 中的任何一种),你可以提示他重新输入,直到他的输入合法。


#5
lyh3202182012-10-08 17:58
用了一下上面的程序后怎么无论输入什么都是输出 good morning
的呢?求指点!!
1