退出状态
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已经超出有效范围。