Shell条件测试语句

条件测试

条件测试的基本语法

shell程序中,当指定条件为真时,返回0;为假时,返回非0。

条件测试的语法有两种,分别为test命令和[命令

test expression

expression可以由字符串,整数,文件名,以及各种运算符组成。

例如:

1 -eq 2   测试两个整数是否相等

‘string’    字符串是否为空

-z 'string' 字符串是否为空

-e file       指定的文件是否存在


[ expression ]  Shell要求在条件表达式后面追加一个右方括号来与前面的 [ 配对。条件表达式与左右方括号之间必须要有空格。

字符串测试

string    本身代表字符串是否为空   不可以与 [ 一起使用

string1 = string2

string1 != string2

-n string  判断字符串是否为非空串

-z string  判断字符串是否是空串

#! /bin/sh


a='abc'
test $a
echo 'test $a' $?


test -n "$a"
echo 'test -n "$a"' $?


test -z "$a"
echo 'test -z "$a"' $?


a="hello"
b="world"


[ "$a" = "$b" ]
echo '[ "$a" = "$b" ]'  $?


[ "$a" != "$b" ]
echo '[ "$a" != "$b" ]' $?

----------------------------

[hdli@localhost shell]$ ./teststring.sh
test $a 0
test -n "$a" 0
test -z "$a" 1
[ "$a" = "$b" ] 1
[ "$a" != "$b" ] 0


运算符的左右两边必须保留空格,否则执行的是test “string”/[ 'string' ]的命令,并且永远返回的是0

在测试运算符 “=”、“!="、-z 等符号的左右两边一定要有空格


整数测试

在程序设计中,两个整数值得比较是经常遇到的。

test number1 op number2

[ number1 op number2 ]


number1  -eq  number2

number1 -ne  number2

number1 -gt   number2

number1 -lt  number2

number1  -ge  number2

number1  -le  number2


文件测试

test op file

[ op file ]

-a file  文件是否存在

-b file   文件是否存在且为块文件

-c file   文件是否存在且为字符文件

-d file    文件是否存在且为目录

-e file    文件是否存在

-s file     文件长度是否大于0或者文件为非空文件

-f file      文件存在,并且为常规文件

-w file    文件是否存在,并且可写

-L file     文件是否存在,并且为符号链接

-u file     文件是否设置suid位。

-r file      文件是否存在,并且可读

-x file      文件是否存在,并且可执行

-nt 表示某个指定文件修改时间是否比另外一个文件晚

-ot 表示某个指定的文件是否比某个文件早


逻辑操作符

!  expression                            非

expression1 -a expression2    且

expression1 -o expression2    或


test "$a" -gt 20 -a "$a" -le 60    a是否大于20小于等于60

[ -x file1 -a -w file1 ]                  file1是否可读可执行


运算符

算术运算符

+

-

*

/

%

+=

-=

*=

/=

%=

<<

>>

&

|

~

^

** 冥运算,3**3就是3的3次方

expr expression

fli3@SZPC1895 ~
$ echo `expr \( 2 - 6 \) \* 12`
-48

数字与括号间要有空格 ,运算符与数字之间也要有空格


$((...))

使用这种形式来进行算术运算写法比较自由,无需对运算符和括号做转义处理,可以采用松散或者紧凑的格式来书写表达式。

result=$((3+6))

result=$(( 3 * 6 ))


$[...]使用方式同上

使用let命令,其可以执行一个或者多个算术表达式,其中的变量名无需使用$符号。如果表达式中含有空格或者其他特殊字符,则必须将其引用起来

n=10

let n=n+1

echo $n


数字常量的进制

两种表示方法:

以0开头的数字表示八进制

正常的数字是十进制

以0x开头的是十六进制


使用#,2#1000就是一个二进制数字,8#42就是一个8进制,16#AB就是一个十六进制

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值