shell脚本基础(三)

bash脚本之算术运算

算术运算格式

1.let 将需要运算结果保存在一个变量中

name1=10

name2=12

let sum=$name1+$name2

echo $sum

2.$[$name1+$name2]:无需将结果保存在变量中,直接输出结果

3.$(($name1+$name2)):无需将结果保存在变量中,直接输出结果

4.expr $name1 + $name2:无需将结果保存在变量中,直接输出结果

sum=$(expr $name1 + $name2):将运算结果保存在变量中

注:乘法符号在有些场景中需要使转义符;

文件查找

locate 依赖于系统事先构建好的索引库,自动实现更新(周期性任务更新),也可手动更新数据库(updatedb更新时间较长).默认情况下是模糊查询

locate -b 基于基名查找

locate -c 统计总共有多少个符号条件的文件

locate -r 可使用正则表达式进行查找

find 与locate不同,其为实时查找,通过指定路径下的系统层级结构完成文件查找

-name 精确匹配文件名

-iname 忽略大小写精确匹配

-regex 基于正则表达式模式查找文件,匹配整条路径

根据文件从属关系查找

-user 查找属主指定用户的所有文件

-group查找属组指定用户的所有文件

-uid查找属主指定UID的所有文件

-gid查找属组指定的GID的所有文件

-nouser/nogroup查找非属主或属组的所有文件

-type根据文件类型找查

f普通文件,d目录文件,c字符设备,l符号链接,b块文件,p管道文件,s套接字文件

组合测试

与:-a  默认工作模式,可以不加,表示两个两个条件都成立才可以

或:-o 满足其中一个条件即可

非:-not/! 相当于不是的意思

 

!A -a !B =!(A -o B)

 

!A-o !B=!(A -a B)
根据文件大小查找
-size[+ -] 常用单位k,M,G
#UNIT(#-1,#)指定单位大小,查找范围非#,而是从#-1到最大#之间;
-#UNIT(0,#-1)小于#,查找范围是0到#-1之前
+#UNIT(#,oo)大于#,查找范围是从#到无穷
根据时间戳查找
1.以“天“”为单位查找
-atime[+|-]#:#为负数,表示过去的时间
以#=3天为例说明
#[#,#-1]距现在3天,表示为大于72小时,小于96小时的范围
-#[0,#]距现在小于3天,表示为0-3之间
+#[oo,#-1]距离现在3天以上,表示为-4天到无穷大

 

-mtime用法同上

-ctime用法同上

2.以“分钟”为单位

-amin用法同上

-mmin用法同上

-cmin用法同上

例 find -type f -atime 1 -ls

查找过去24-48小时之间访问过的文件

find /etc -atime +7 -ls 
查8天之前的访问过的文件
根据权限位查找
-perm[/|-]mode
mode精确权限查找
例:find ./ -perm 644 查找权限为644的所有文件
/mode查找任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合其一即可
6=r+w只要r或w其一符合即可
find ./ -perm /222或/111 查找至少有一类用户有执行或写权限的文件
-mode 任何一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足
处理动作
-print 输出至标准输出
-ls 对查找出的文件执行ls -l
-delete 删除
-fls /PATCH 与ls区别在于,把查找到的文件信息保存至指定的文件中
-ok COMMAND{}\;对查找到的每个文件搪行由COMMAND表示的命令
find ./ -nouser -a -nogroup -ok chown root:root {}\;将没有属主和属组的文件改为root,更改时系统会提示单个文件确认通知
-exec COMMAND {}\;不需要用户确认,直接修改
find ./ -perm /002 -exec mv {}{}.danger\; 将属主为其他用户的文件加上danger后缀
 
posted @ 2020-09-28 09:34  扬帆直上  阅读(148)  评论(0)    收藏  举报