二元比较 *** 作符,比较变量或者比较数字。注意数字与字符串的区别。
整数比较
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
<小于(需要双括号),如:(("$a" <"$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
>大于(需要双括号),如:(("$a" >"$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ],与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
3
4 [ $a == z* ] # File globbing 和word splitting将会发生
5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是.
但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
!= 不等于,如:if [ "$a" != "$b" ]
这个 *** 作符将在[[]]结构中使用模式匹配.
<小于,在ASCII字母顺序下.如:
if [[ "$a" <"$b" ]]
if [ "$a" \<"$b" ]
注意:在[]结构中"<"需要被转义.
>大于,在ASCII字母顺序下.如:
if [[ "$a" >"$b" ]]
if [ "$a" \>"$b" ]
注意:在[]结构中">"需要被转义.
具体参考Example 26-11来查看这个 *** 作符应用的例子.
-z 字符串为"null".就是长度为0.
-n 字符串不为"null"
链接:https://www.jianshu.com/p/6322715ad196
linux中,c语言字符串比较采用strcmp()函数
在linux命令行下,man strcmp,可以看到函数说明:
$ man strcmp...
NAME
strcmp, strncmp - compare two strings
SYNOPSIS
#include <string.h>
int strcmp(const char *s1, const char *s2)
DESCRIPTION
The strcmp() function compares the two strings s1 and s2. It returns an integer less than, equal to, or greater than zero if s1 is found, respectively, to be less than, to match, or be greater than s2.
strcmp函数比较两个字符串s1和s2. 函数返回小于0,等于0,或大于0的整数,分别对应s1<s2, s1=s2, s1<s2 .
比如 s1 = "good" s2="...this is good", 从s2取后四位进行两个字符串比较,代码如下:
#include <stdio.h>#include <string.h>
int main()
{
char *s1 = "good" , *s2="...this is good"
int len=strlen(s2)
if ( len >= 4 ) //如果串长超过4位,则移动指针到最后四位的位置
s2 =s2+len-4
printf("s2=%s\n", s2 ) //输出移位后的字符串内容
printf("compare s1,s2=%d\n", strcmp(s1,s2) ) //输出0,表示相同
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)