标题:初学shell 有个小问题
只看楼主
linkang1024
Rank: 2
等 级:论坛游民
帖 子:90
专家分:83
注 册:2011-10-10
结帖率:70.83%
已结贴  问题点数:20 回复次数:4 
初学shell 有个小问题
#!/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  运行时直接在当前目录运行的

搜索更多相关主题的帖子: linux程序 please morning 
2012-06-08 09:48
静夜思
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:济南的冬天
等 级:管理员
威 望:11
帖 子:8842
专家分:2567
注 册:2004-3-25
得分:10 
方括号里面要留空格
if [ $timeofday="yes" ];then

畅所欲言
2012-06-08 10:24
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:10 
嗯。刚接触的时候可能感觉语法上不太熟悉。我感觉脚本语言学点基本的东西之后,去读点别人写的的比较好,借鉴点经验。

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

另外 = 是用来赋值的。== 是用来判断相等。if 后面用 == 的情况相对会多一点。
2012-06-13 21:59
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
哦,另外由于读取输入之前需要提示这个功能过于平凡,所以 read 带了一个 -p 选项,比如:
read -p "Is it morning? (yes or no) "
的写法就挺常见的。有关命令的详细情况,可以用
$ help read
看到。

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


2012-06-13 22:07
lyh320218
Rank: 2
等 级:论坛游民
帖 子:10
专家分:10
注 册:2012-1-31
得分:0 
用了一下上面的程序后怎么无论输入什么都是输出 good morning
的呢?求指点!!
2012-10-08 17:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-371074-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.312164 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved