LinuxSir.cn,穿越时空的Linuxsir!

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

刚学shell, 写了一个小脚本,老是不对,请教。

[复制链接]
发表于 2004-9-5 21:20:36 | 显示全部楼层 |阅读模式

  1. #!/bin/bash
  2. str1="abc"
  3. str2="abc"
  4. if [ str1 = str2 ] ; then
  5.         echo "str1 equal to str2"
  6. else
  7.         echo "str1 not equal to str2"
  8. fi

复制代码


运行时总是打印不相等,为什么?
发表于 2004-9-5 21:26:53 | 显示全部楼层
try this:


  1. #!/bin/sh
  2. str1="abc"
  3. str2="abc"
  4. if [ $str1 = $str2 ] ; then
  5.         echo "str1 equal to str2"
  6. else
  7.         echo "str1 not equal to str2"
  8. fi
复制代码
 楼主| 发表于 2004-9-5 21:35:27 | 显示全部楼层
这样改对上面的程序是对的,可我要是把str2="",后,会出现下面的提示
./st3: line 4: [: abc: unary operator expected
 楼主| 发表于 2004-9-5 21:36:21 | 显示全部楼层
而且我也想不通这里为什么要加$呢,有不需要引用值
发表于 2004-9-5 22:09:47 | 显示全部楼层
在shell里对变量的引用必须用$ 这是规定 ;)
这样改对上面的程序是对的,可我要是把str2="",后,会出现下面的提示
./st3: line 4: [: abc: unary operator expected

这种情况,也许用 [[ ... ]]是很合适的 ;)

  1. if [[ $str1 ==  $str2 ]] ; then
复制代码
 楼主| 发表于 2004-9-5 22:21:48 | 显示全部楼层
问题解决。多谢。(其实是你的那篇帖子有不清楚的地方,哈,)
可有一个疑问是什么时候用 [] 什么时候用 [[]]呢??
 楼主| 发表于 2004-9-5 22:25:41 | 显示全部楼层
还有个问题就是我手头一本比较旧的书上写道:
var='command'
可以将命令command的输出内容存放到变量var中,可我怎么试也不行呀,应该怎么做
 楼主| 发表于 2004-9-5 22:30:59 | 显示全部楼层
继续提问,呵呵,不好意思

for语句中,
for var in list
list 应该是一种什么样的变量? 比方说,从1到10, list会是中什么情况。
发表于 2004-9-5 22:31:23 | 显示全部楼层
最初由 benu 发表
还有个问题就是我手头一本比较旧的书上写道:
var='command'
可以将命令command的输出内容存放到变量var中,可我怎么试也不行呀,应该怎么做

应该是:
var=`command`
是反引号,而不是单引号!
发表于 2004-9-5 22:33:36 | 显示全部楼层
最初由 benu 发表
继续提问,呵呵,不好意思

for语句中,
for var in list
list 应该是一种什么样的变量? 比方说,从1到10, list会是中什么情况。

见:
http://www.linuxsir.cn/bbs/showthread.php?threadid=28945
中对for循环的描述
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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