关于查找空值问题 (如何用 read 读入空格?)

关于查找空值问题 (如何用 read 读入空格?)

现在正式学习SHELL编程第15天了。进步不是很大,,但仍然坚持着做些小程序。上次做了个冒泡程序,这次做个查找程序:实现的是从终端输入一个字符串,看它是否存在数组里,如存在就计算他出现了几次,现在我的问题是,如我输入空格,它怎么检测出空格?现在就是这块不能通过,望LINUX前辈指教!!
#!/bin/sh
surname=(zhao wang sun li zhou wu zheng wang wu li wu)
i=${#surname[@]}
changliang=0
read var

if [ "$var" =  " " ]; then
echo "you enter nothing,please enter suranme!!"
fi

j=0
while [ $j -lt $i ]
do

if [ "$var" =  "${surname[$j]}" ];then

    let changliang++
fi
let j++
done
if [ $changliang = 0 ]; then
echo "$var is not here"
else
echo  "$var is in here, and it appear $changliang times "
fi

      
引用:
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=25926 $?=0] ; cat foo.sh
#!/bin/bash

read -p "Please input:" line
echo "Your input is [$line]"

saveIFS=$IFS
IFS='\r\n'
read -p "Please input:" line
echo "Your input is [$line]"
IFS=$saveIFS
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=25926 $?=0] ; ./foo.sh
Please input:  hello world    <--- 前后各有两个空格
Your input is [hello world]
Please input:  hello world    <--- 前后各有两个空格
Your input is [  hello world  ]
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=25926 $?=0] ; ./foo.sh
Please input:    <--- 输入两个空格
Your input is []
Please input:    <--- 输入两个空格
Your input is [  ]
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=25926 $?=0] ; bye
      
为了方便别人阅读, 发贴时请把 script 写得整齐一些, 必要时把 script 写在 [code] ... [/code] 中间       
你是想输入空格后,检测数组中空格出现的次数?
而且这个条件好像不会为真的
if [ "$var" =  " " ]; then
echo "you enter nothing,please enter suranme!!"
fi
如果是想只输入空格也显示"you enter nothing,please enter suranme!!"这句话,那么代码如下
复制内容到剪贴板
代码:
#!/bin/sh
surname=(zhao wang sun li zhou wu zheng wang wu li wu)
i=${#surname[@]}
changliang=0
read var

if [ -z "$var" ]; then
   echo "you enter nothing,please enter suranme!!"
else
   j=0
   while [ $j -lt $i ]
   do
      if [ "$var" =  "${surname[$j]}" ];then
         let changliang++
      fi
      let j++
   done
   if [ $changliang = 0 ]; then
      echo "$var is not here"
   else
      echo  "$var is in here, and it appear $changliang times "
   fi
fi
      
引用:
原帖由 dearvoid 于 2008-10-29 16:52 发表
为了方便别人阅读, 发贴时请把 script 写得整齐一些, 必要时把 script 写在
复制内容到剪贴板
代码:
...
中间
下次注意这个问题!      
引用:
原帖由 lsdm1984 于 2008-10-29 17:19 发表
你是想输入空格后,检测数组中空格出现的次数?
而且这个条件好像不会为真的
if [ "$var" =  " " ]; then
echo "you enter nothing,please enter suranme!!"
fi
如果是想只输入空格也显示"you enter nothing,pl ...
哦。问题是这样的:我要在终端按下回车键,或者输入空格键,那程序应该提示:you enter nothing,please enter suranme!!"。
但是我测试的时候,出现下面的问题,也就是说程序把空各读入到循环里了,所以 “   is not here" 出现在这里:(
引用:
[root@qing ~]# ./p4.sh
please enter:
you enter nothing,please enter suranme!!
is not here
      
引用:
原帖由 dearvoid 于 2008-10-29 16:46 发表
我没理解你的方法       
你试下我的代码能否满足你的要求。
你也可以在执行完
echo "you enter nothing,please enter suranme!!"
后面加上
exit 0
这样程序就可以按照你的意思执行了      
引用:
原帖由 lsdm1984 于 2008-10-29 17:43 发表
你试下我的代码能否满足你的要求。
你也可以在执行完
echo "you enter nothing,please enter suranme!!"
后面加上
exit 0
这样程序就可以按照你的意思执行了
对,搞定了。谢谢!!!      
引用:
原帖由 skyblue1 于 2008-10-29 17:34 发表
我没理解你的方法
默认情况下 read 是不能读入空格的, 因此你的判断永远不会为 TRUE, 要想读入空格, 可以用我说的方法. bash manual 的 read 命令有如此解释:
引用:
The characters in IFS are used to split the line into words.