shell 脚本比较字符串相等_比较带空格的字符串相等的Shell脚本 如何比较两个.....

****************************比较带空格的字符串相等的Shell脚本***************************

如果要比较的字符串中间有空格,可以用下面的程序(摘自《Unix Shells by Example, 3rd Edition》)

name="Joe Blow"

if [[ $name == "Joe Blow" ]]

then

printf "Hello $name\n"

fi

如果不带空格,则可以用下面的程序

name="Joe"

if [ $name = "Joe" ]

then

printf "Hello $name\n"

fi

需要注意的是方括号和等号的数目

****************************************如何比较两个字符串*******************************

我想在shell中完成如下的动作:VAR1=abcd VAR2=ef,那么按照c语言 VAR2大于VAR1了,

可是我看到shell中好象只能检测这两个字符串是否匹配 而不能比较大小啊

好像是不能比较大小。如果用变通的方式呢,似乎可考虑用sort等命令来组合。麻烦点儿。

if [ $VAR1 = `echo "$VAR1 $VAR2"|sort|head -1` ]

then

echo "VAR1 is little than VAR2"

else

echo "VAR1 is greater that VAR2"

fi

不错不错,今天加班也算有收获了

前面加一个相等时的判断,这个字符串比较函数就完整了,呵呵

实际上是利用了sort的排序功能,高

发现新问题:sort 排序时并不时按ascii值时行排序的,将sort的所有选项都试过了,也没能得到按ascii进行排序的结果。

迷惑!!!!

谁给解释并解决一下?

先谢了!

sort可以照字典序排列,通常和ascii值是一致的啊.

举个例子,大家来看一下.

to valentine:

例如以下两个文件a.txt和b.txt,其中括号内为行首字符的16进制ascii码,b.txt由a.txt排序所得,即sort a.txt >b.txt。可以看出,b.txt的内容并不是按ascii码内容从小到大排列的。

a.txt的内容:

(20 空格)

(09 tab)

_(5f)

-(2d)

1(31)

a(61)

A(41)

b.txt的内容:

(09 tab)

(20 空格)

A(41)

a(61)

1(31)

-(2d)

_(5f)

备注:测试环境为sco504。

又:informix排序时是按ascii值大小进行的,而c语言之strcmp好像也是按ascii值的大小进行比较。

对于字母,数字,空格和tab,如果设置正确的LC_CTYPE,sort的结果和ASCII序是一致的.

sco下试一下en_US.ascii.

如您所言,LC_CTYPE=en_US.ascii;export LC_CTYPE;sort a.txt >b.txt,b.txt果然按ascii值进行排序。

在solaris8 sparc 上实验通过 谢谢大家和斑竹

其他问题俺不懂,但

俺看第一个问题其实比较简单

expr $var1 > $var2 > /dev/null

是啊,俺也学到东西了

不过就楼主文题而言, expr $VAR1 < $VAR2 不就解决乎?

说错了大家打俺

没错啊,是用expr比较简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值