shell编程2-----算术运算、条件测试

算术运算

+ - * / %
+=,-=,*= /= %=
i++,i--
实现算术运算:
(1)let var=算术表达式

[root@server1 bash]# num1=2
[root@server1 bash]# num2=3
[root@server1 bash]# let sum=$num1+$num2
[root@server1 bash]# echo $sum
5

(2)$[算术表达式]

[root@server1 bash]# echo $[1+2]
3

(3)$((算术表达式))

[root@server1 bash]# echo $((1+2))
3

(4)var=$(expr agr1 arg2 arg3, …)

[root@server1 bash]# num1=1
[root@server1 bash]# num2=4
[root@server1 bash]# sum=$(expr $num1+$num2)  #注意操作符与各参数之间应该有空格,否则会被认为字符串
[root@server1 bash]# echo $sum
1+4
[root@server1 bash]# sum=$(expr $num1 + $num2)  
[root@server1 bash]# echo $sum
5

bash内建的随机数生成器:$RANDOM
在这里插入图片描述
生成0-59之间的随机数
在这里插入图片描述
传递参数计算/etc/passwd中第$1个用户和第$2个用户的id值和

#!/bin/bash
num1=$(cut -d: -f3 /etc/passwd | head -n $1 | tail -n 1)
num2=$(cut -d: -f3 /etc/passwd | sed -n "$2p")
echo $[$num1+$num2]
sum=$[$num1+$num2]
echo $sum

传递两个参数路径给脚本,计算两个行之和

#!/bin/bash
spaceline1=$(grep "^$" $1 | wc -l)
spaceline2=$(grep "^[[:space:]]*$" $2 | wc -l)
echo $[$spaceline1+$spaceline2]

统计/etc /var /usr 目录公有多少个一级子目录及文件

条件测试

测试命令

test 表达式
[ 表达式 ]
[[ 表达式 ]]
注意:表达式前后必须有空格

-gt :大于为真
-lt:小于为真

[root@server1 bash]# [ 1 -gt 3 ]
[root@server1 bash]# echo $?
1
[root@server1 bash]# [ 1 -lt 3 ]
[root@server1 bash]# echo $?
0
[root@server1 bash]# test 1 -lt 3
[root@server1 bash]# echo $?
0
测试类型

数值测试:

-gt:大于  -ge:大于等于
-lt:小于 -le:小于等于
-eq:等于 -ne:不等于

字符串测试:

==/= :
>:ASCII是否大于
<:
!=
=~:左侧字符串是否能被右侧的模式所匹配,匹配到为真
	这里测试要使用[[ ]]
-z:字符串是否空,空为真
-n:字符串是否不空,不空为真

字符串要使用引号。
[root@server1 bash]# name="wtt"
[root@server1 bash]# [[ $name =~ w.* ]]
[root@server1 bash]# echo $?
0
[root@server1 bash]# [[ $name =~ x.* ]]
[root@server1 bash]# echo $?
1

文件测试:

存在性测试
-a/-e file  文件是否存在
-b file   是否存在且为块设备文件
-d file   是否存在且为目录文件
-f file   是否存在且为普通文件。
-S file 是否存在且为套接字文件
-h file  或 -L file 是否存在且为符号链接文件

权限测试:
-r file:对于当前用户来说是否具有读权限
-w file 
-x file

文件特殊权限测试:
-g file : 是否存在且拥有sgid权限
-u file :是否存在且拥有suid权限
-k file :是否拥有sticky权限

文件大小测试:
-s file :是否存在且为空

-O file :当前用户是否为文件的属主
-G file:当前用户是否为文件的属组

双目测试
file1 -ef file2 :file1与file2是否指向同一设备的相同inode

在这里插入图片描述
组合测试条件:

逻辑运算:
	第一种方式:
	command1 && command2
	command1 || command2
	!command
	[ -e file ] && [ -r file ]
	
	第二种方式:
	表达式1 -a 表达式2  并且
	表达式1 -o 表达式2  或者

例1:当前主机的主机名为空或者为server1,输出主机名,否则报错

[root@server1 tmp]# [ -z $HostName ] || [ $HostName=="server1" ] && echo $HostName
server1
[root@server1 tmp]# [ -z $HostName -o $HostName=="server1" ] && echo $HostName
server1

例2:如果cat命令存在并且可执行,则用它打开/etc/fstab文件

[root@server1 tmp]# which cat
/bin/cat
[root@server1 tmp]# [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab 
自定义退出状态码:
exit n:自定义退出状态码
注意:脚本中一旦遇到exit命令,会立即终止,终止状态取决于exit命令后面的数字
如果未给脚本指定退出状态码,则整个脚本的退出状态码取决于脚本执行过程的最后一条命令的状态码。

写一个脚本,接受一个文件路径未参数,如果参数个数小于1,则提示用户至少应该给一个参数,并立即退出,如果参数个数不小于1,则显示第一个参数所指向的文件的空白行数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值