免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10943 | 回复: 9
打印 上一主题 下一主题

linux 下如何比较字符串大小? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-11 10:59 |只看该作者 |倒序浏览
在sco unix下,
1.sh文件如下内容:
a=$1
b=$2
if [ $a -ge $b ];then
   echo "A大"
else
   echo "B大"
fi

#./1.sh 100.00 200.00

结果:
B大
运行正常
但在SUSE Linux下
出现如下错误
./1.sh: line 5: [: 200.00: integer expression expected
B大
好像正能是整型树才能比较,


请问在Linux下子字符串如何比较,上面的应如何修正?

论坛徽章:
0
2 [报告]
发表于 2006-04-11 11:11 |只看该作者

  1. a=$1
  2. b=$2
  3. if expr "$a" \> "$b" >/dev/null 2>&1; then
  4.    echo "A大"
  5. else
  6.    echo "B大"
  7. fi
复制代码

论坛徽章:
0
3 [报告]
发表于 2006-04-11 11:18 |只看该作者
如果 两数相等,好像总是B大?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2006-04-11 11:23 |只看该作者
有兴趣去精华区翻翻吧?写的再清楚不过了

论坛徽章:
0
5 [报告]
发表于 2006-04-11 16:41 |只看该作者
不好意思,在精华里找一下午也没找到!

另为问个问题,不知shell里空字符串怎么处理?
比如以一文件a.txt:
aaa|bbb|ccc|ddd|eee|fff
001||003|004|005|006

test.sh

fo i in `cat  a.txt`
do
  n=`echo $i |cut -f 2 -d "|"`

  if  test  $n = ''
      then
          echo $i
  fi
done

这样的问题怎么办?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
6 [报告]
发表于 2006-04-11 16:46 |只看该作者
如果你没找到,新手导航中就有两个链接

if  test  $n = ''
      then
          echo $i
  fi
就先抛开讲法问题吧?,你想实现什么逻辑功能?
当一个变量为空时显示它?

论坛徽章:
0
7 [报告]
发表于 2006-04-11 17:32 |只看该作者
一个表,各记录以“|”分隔,各字都有为空的可能,如上面,以第二字段为判断条件,当该记录该字段为空时,程序就报错:
./test.sh: line 15: test: =: unary operator expected

论坛徽章:
0
8 [报告]
发表于 2006-04-12 09:19 |只看该作者
原帖由 seeLnd 于 2006-4-11 11:11 发表

  1. a=$1
  2. b=$2
  3. if expr "$a" \> "$b" >/dev/null 2>&1; then
  4.    echo "A大"
  5. else
  6.    echo "B大"
  7. fi
复制代码



./3.sh 10.00 9.99
B大

这也不是我要的结果

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
9 [报告]
发表于 2006-04-12 09:35 |只看该作者
呵呵,你是要比较字符串还是要比较数值?自己搞清楚了么?

如果要比较数值,而且是浮点数的话,建议试试 bc或awk

echo 12.3 9.7|awk '{ print (($1>=$2)?$12) " is bigger"} '

关于空字串的问题
[ "$a" = "" ]
[ x$a = x ]
[ -z $a ]
都可以,好像也是个月经问题了,十三问里就有

论坛徽章:
0
10 [报告]
发表于 2006-04-12 15:49 |只看该作者
这回老大的解答不错,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP