利用bash脚本编程实现算数运算:
一、运算符号:
1.普通运算符号:+ - * / % **|^
2.增强型的算术运算符号:
+= : let b=b+2 --> let b+=2
-=
*=
/=
%=
3. 特殊的增强型运算:
let b=b+1 --> let b+=1 --> let b++
let b--
b++:先将b的值赋予给其他变量,自身在+1
++b:自身先+1在赋值
算数运算方法:
1.let VAR=算术表达式
将算术表达式先行进行算术运算,并将运算结果保存到变量VAR中;
2.VAR=$[算术表达式]
算术表达式中如果有变量引用,可以使用$来引用变量也可以省略
3.VAR=$((算术表达式))
算术表达式中如果有变量引用,可以使用$来引用变量也可以省略
4. expr ARGU1 ARGU2 ARGU3
ARGU1和ARGU3必须是数值
ARGU2必须是运算符号
例子: [root@localhost ~]# expr 5 + 8
13
5. echo "算术表达式" | bc
注意:*在某些情况下需要转义;
例子:统计/etc/fstab /etc/passwd /etc/issue三个文件中,以字母r开头的行数的总和
变量:存储数据的容器
弱变量:弱类型变量,字符型(默认),数值型(不包括浮点型)
条件测试命令:
test;EXPRESSION
shell内建命令
[EXPRESSION] :
外部命令
`EXPRESSION` :
bash的内部关键字
注意:这类命令一般没有执行结果,只有执行状态返回值
test测试命令有三类测试表达式:
1. 数值测试: 双目操作符
-eq: 被测试的两个数值是否相等,相等为真,不等为假
-ne: 被测试的两个数值是否不相等,不等为真,相等为假
-gt: 被测试的两个数值,左面的是否大于右面的,大于为真,不大于为假
-lt: 被测试的两个数值,左面的是否小于右面的小于为真
-ge: 被测试的两个数值,左面是否大于等于右面的大于等于为真,小于为假
-le: 被测试的两个数值,左面的是否小于等于右面的,小于等于为真,大于为假
例子:# test 4 -eq 10
# echo $?
1
2. 字符串测试
双目操作符:
==|= :推荐用==:表示被测试的两个字符串是否相同,相同为真,不同为假
!=:表示被测试的两个字符串是否不同,不同为真,相同为假
>:被测试的两个字符串在ASCII表总对应的二进制数值,左边是否大于右面,大于为真,小于为假
<:被测试的两个字符串在ASCII表总对应的二进制数值,左边是否小于右面,小于为真,大于为假
注意:<和>必须用在`EXPRESSION`测试语句中
=~ :被测试的两个字符串,左侧字符串能否被右侧的PATTERN匹配,能匹配为真,不能为假
单目操作符:
-z '字符串‘: 判定指定的字符串是否为空串,空为真,不空为假
-n ‘字符串’:判定指定的字符串是否为非空串,不空为真,空为假
注意:1.通常情况下字符串要加引号,单引号或双引号都可以,根据实际情况选择
2.[[]]和[]在某些情况下意义可能不同,区分使用
3. 表达式和操作符两端都要有空格
3. 文件状态测试
文件的存在性测试:如果被测试的文件存在为真,不存在为假
-a或-e [ -e /etc/shadow]
文件类型测试(测试存在性):
-b FILE:被测试的文件是否存在,并且是否为块设备 ,存在且为块设备为真,否则为假
-c FILE:被测试的文件是否存在,并且是否为字符设备
-d FILE: 被测试的文件是否存在,并且是否为目录文件
-f FILE: 被测试的文件是否存在,并且是否为普通文件
-h|L FILE:被测试的文件是否存在,并且是否为符号链接文件
-p FILE:被测试的文件是否存在,并且是否为管道文件
-s FILE: 被测试的文件是否存在,并且是否为套接字文件
文件的访问权限测试:
-r FILE:被测试的是否存在,并且当前有效用户是否可读,文件存在且当前有效用户可读为真,否则为假
-w FILE:被测试的是否存在,并且当前有效用户是否可写
-x FILE:被测试的是否存在,并且当前有效用户是否可执行
文件的特殊权限标识测试
-u FILE: 被测试的文件是否存在并且是否设置了SUID权限;文件存在且设置了SUID权限为真,否则为假
-g FILE: 被测试的文件是否存在并且是否设置了SGID权限;文件存在且设置了SGID权限为真,否则为假
-k FILE: 被测试的文件是否存在并且是否设置了STICKY权限;文件存在且设置了STICKY权限为真,否则为假
文件内容是否为空:
-s FILE: 被测试文件是否存在且内容是否不为空 ,存在且内容不为空为真,否则为假
文件的所有权测试:
-O FILE: 被测试文件是否存在并且其属主是否为当前有效用户
-G FILE 被测试文件是否存在并且其属组是否为当前有效用户 的组
时间戳测试:
-N FILE: 被测试的文件自从上一次被修改后是否被修改过
双目测试:
FILE1 --ef FILE2:测试两个文件是否指向同一个文件系统的相同的inodo硬链接
FILE1 -nt FILE2: 被测试的两个文件,FILE1是否比FILE2更新
FILE1 -ot FILE2: 被测试的两个文件,FILE1是否比FILE2更旧
测试语句中可以添加逻辑运算:
1.
[ -o /tmp/test ] && [ -s /tmp/test ]
![ -o/tmp/test ]
2.
[ -o /tmp/test -a -s /tmp/test ]
[ !-o /tmp/test ]
命令的执行结果:
正常输出结果
命令的执行状态返回值:
0-255
0
1,2,127:系统保留
3-126,127-255:用户自定义
注意:当shell脚本运行时,一旦遇到exit命令时,将立即结束当前shell尚锦城,同时脚本的运行也将被停止,即
之后的命令不再被执行