【Linux基础篇】退出、测试、判断及运算符

退出状态

Linux系统中,每个命令执行完成后,系统都会返回1个退出状态来表示命令执行是否正确

最后1次执行的退出状态值保留在内置变量 $? 中,通过echo $? 可判断命令是否执行成功

 

POSIX规定的几种退出状态值:

0            运行成功,未出现任何问题

1~125    运行失败,脚本命令,系统命令错误,或者参数传递错误等

126        找到命令但无法执行

127        未找到命令或无效命令

>128      命令被系统强制结束

 

测试命令

判断某个条件或某组条件是否成立,如果为真,则返回0,为假,则返回非0值

测试命令有两种方式:

test expression

[ expression ]

"[" 启动测试,在"[" 与 "]"之间,前后空格不能省略

第2种方式,常与if、case、while语句联合使用

 

整数比较运算符

-eq  等于

-ge  大于等于

-gt   大于

-le   小于等于

-lt    小于

-ne  不等于

 

num=100

[ "$num" -ge 100 ]

echo $?

 

字符串比较运算符

string                       测试字符串是否不为空

-n string                   测试字符串是否不为空

-z string                    测试字符串是否为空

string1 = string2       测试字符串是否相等

string1 != string2      测试字符串是否不等

 

str1="Hello"

[  "$str1" = "hello" ]

echo $?

1  #退出状态为1,表示不相等

 

 

 文件操作符

test file_operator File  或

[ file_operator  File ]

File可以是文件名、目录、文件路径等

 

-d   file   测试file是否为目录

-f    file   测试file是否为普通文件

-e   file   测试file是否存在

-s   file    测试file长度是否不为0

-r    file   测试file是否为可读权限

-w  file    测试file是否为可写权限

-x   file    测试file是否为可执行权限

-L   file    测试file是否符号化链接

 

 [ -d file_exam ]  判断文件是否为目录

 [ -f file_exam ]   判断文件是否为文件

 [ -e file_exam ]  判断是否存在,创建或删除1个文件后,判断是否创建或删除成功

 

 

逻辑运算符

用来与测试命令联合使用

与、或、非

! expression   非(not)

expression1 -a expression2  且(and)

expression1 -o expression2  或(or)

 

[ -e fiel1 -a -x file1 ]   #测试fiel1是否存在且可执行  

[ "$integer1" -lt 5 -o "$integer1" gt 10 ] #测试integer1小于5或者大于10

 

 

条件判断

根据不同的条件执行不同的语句

 

if 

if expression

then

command1

command2

fi

注意:测试条件expression后面没有分号,则then语句必须换行

 

if和then可以处于同一行,必须使用 ";" 来终止if语句

if expression;then

command1

command2

fi

 

#!/bin/bash

echo "input your name"

read name  #读取键盘输入,并赋值给变量name

if [  -z "$name"  ];then

echo "name cannot be null"

fi

 

 

if...else

 

if expression;then

command1

command2

else

command3

fi

 

if...elif...else

 

if expression1;then

command1

command2

elif expressionN

command3

elif expressionX

command4

else

command5

fi

case选择

case variable in

value1)

comamnd1;;

value2)

command2;;

valueN)

commandN;;

*)

commandDefault;;

 esac

 

case结构的变量值variable逐个与value1,value2,...,valueN进行比较,直到找到匹配项

如果找到,则执行该项下面的语句,遇到";;"时,直接跳出case到esac

否则,执行"*)"下面的语句,直到";;"时结束

 

#!/bin/bash

echo "input you favor number"

read number1

case "$number1" in

1)

echo "You are good!";;

2)

echo "You are bad!!";;

*)

echo "You are nothing!!!";;

esac

 

 

运算符

算术运算符

+    加  (+=)

-    减   (-=)

*    乘   (*=)

/    除    (/=)

%  取余   (%=)   10%3 = 1

**  幂运算 (**=)   5**3 = 125

 

位运算符

<<  (<<=)  左移  即*2  左移n位,即乘以2的n次幂

>>  (>>=)  右移  即/2   右移n位,即除以2的n次幂

&    (&=)    按位与

|      (|=)     按位或

~     (~=)    按位异或

^      (^=)    按位取反

 

自增自减运算

++variable   先自增再参与运算

variable++   先参与运算再自增

--variable     先自减再参与运算

variable--     先参与运算再自减

 

数字常量

Linux Shell默认将数字按10进制处理

如果要使用其它进制,需要对其进行特殊标记

当使用数字0作为前缀,表示8进制

当使用0x进行标记,表示16进制

 

另外,还可以使用#num进行标记

8#    则表示8进制,如8#75

16#  则表示16进制,如16#F9

注意:num#后面跟的数字不能超过其对于进制中最大数值范围

如,2#20则错误,因为2进制范围是0~1,2已经超出有效范围。

 

 

 

 

猜你喜欢

转载自just2learn.iteye.com/blog/2038157
今日推荐