一.概述
使用read命令来接受输入
使用read来把输入值分配给一个或多个shell变量:
-p指定要显示的提示
-t TIMEOUT
read从标准输入中读取值,给每个单词分配一个变量
所有剩余单词都被分配给最后一个变量
read -p “Enter a filename:“ FILE
过程式编程语言:
顺序执行
选择执行
循环执行
条件选择if语句
选择执行:
注意:if语句可嵌套
单分支
if 判断条件;then
条件为真的分支代码
fi
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
多分支
if 判断条件1; then
if-true
elif 判断条件2; then
if-ture
elif 判断条件3; then
if-ture
…
else
all-false
fi
逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
条件判断:case语句
case支持glob风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
a|b: a或b
case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
…
*)
默认分支
;;
esac
二.文件查找命令
在文件系统上查找符合条件的文件;
文件查找:locate, find
非实时查找(数据库查找):locate
实时查找:find
使用locate命令
locate KEYWORD
有用的选项
•-i执行区分大小写的搜索
•-n N只列举前N个匹配项目
locate foo
•搜索名称或路径中带有“foo”的文件
locate -r ‘\.foo$’
•使用Regex来搜索以“.foo”结尾的文件
查询系统上预建的文件索引数据库
/var/lib/mlocate/mlocate.db
依赖于事先构建的索引
索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)
索引构建过程需要遍历整个根文件系统,极消耗资源
工作特点:
•查找速度快
•模糊查找
•非实时查找
•搜索的是文件的全路径,不仅仅是文件名
•可能只搜索用户具备读取和执行权限的目录
find 命令
实时查找工具,通过遍历指定路径完成文件查找;
工作特点:
•查找速度略慢
•精确查找
•实时查找
•可能只搜索用户具备读取和执行权限的目录
语法:
find [OPTION]… [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
根据文件名和inode查找:
-name "文件名称":支持使用glob
*, ?, [], [^]
-iname"文件名称":不区分字母大小写
-inumn 按inode号查找
-samefilename 相同inode号的文件
-links n 链接数为n的文件
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
根据属主、属组查找:
-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME: 查找属组为指定组(GID)的文件
-uidUserID:查找属主为指定的UID号的文件
-gidGroupID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
根据文件类型查找:
-type TYPE:
•f: 普通文件
•d: 目录文件
•l: 符号链接文件
•s:套接字文件
•b: 块设备文件
•c: 字符设备文件
•p: 管道文件
组合条件:
与:-a
或:-o
非:-not, !
德·摩根定律:
(非P) 或(非Q)= 非(P 且Q)
(非P) 且(非Q) = 非(P 或Q)
示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
根据文件大小来查找:
-size [+|-]#UNIT
常用单位:k, M, G
#UNIT: (#-1, #]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
如:+6k 表示(6k,∞)
根据时间戳:
以“天”为单位;
-atime[+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以“分钟”为单位:
-amin
-mmin
-cmin
根据权限查找:
-perm [/|-]MODE
MODE: 精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰
-MODE:每一类对象都必须同时拥有指定权限,与关系
0 表示不关注
•find-perm755会匹配权限模式恰好是755的文件
•只要当任意人有写权限时,find-perm+222就会匹配
•只有当每个人都有写权限时,find-perm-222才会匹配
•只有当其它人(other)有写权限时,find-perm-002才会匹配
处理动作
-print:默认的处理动作,显示至屏幕;
-ls:类似于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件;(危险动作)
-flsfile:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;
对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
有些命令不能接受过多参数,此时命令执行可能会失败,下面方式可规避此问题
find | xargs COMMAND
Gnome搜索工具 (图形化的搜索工具)
位置->搜索文件……
图形化搜索工具,可搜索
•命令
•内容
•用户/组群
•大小
•修改时间
压缩、解压缩及归档工具
file-roller (图形化解压缩工具)
compress/uncompress: .Z
compress [-dfvcVr] [-b maxbits] [file …]
-d: 解压缩,相当于
-c: 结果输出至标准输出,不删除原文件
-v: 显示详情
uncompress解压缩
zcat file.Z>file
gzip/gunzip: .gz
gzip[OPTION]… FILE …
-d: 解压缩,相当于gunzip
-c: 将压缩或解压缩的结果输出至标准输出
-#:1-9,指定压缩比,值越大压缩比越大
zcat:不显式解压缩的前提下查看文本文件内容
实例:
gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
bzip2/bunzip2: .bz2
bzip2 [OPTION]… FILE …
-k: keep, 保留原文件
-d:解压缩
-#:1-9,压缩比,默认为6
bzcat:不显式解压缩的前提下查看文本文件内容
xz/unxz: .xz
xz[OPTION]… FILE …
-k: keep, 保留原文件
-d:解压缩
-#:1-9,压缩比,默认为6
xzcat: 不显式解压缩的前提下查看文本文件内容
zip/unzip
打包压缩
zip –r sysconfigsysconfig/
解包解压缩
unzip sysconfig.zip
cat /var/log/messages | zip message –
unzip -p message > message
tar
cpio
主流的压缩工具gzip
作业练习:
1、编写脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息
2、编写脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息
第二种方法
3、编写脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)
4、编写脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数
5.总结find的德.摩根定律及应用实例
德.摩根定律就是
让复杂化的判断条件简单化
例:(非 P) 或 (非 Q) = 非(P 且 Q)
(非 P) 且 (非 Q) = 非(P 或 Q)
实例表示:
查询etc目录下非root属主且非tss属主的文件
如果我们不按照摩根定律来写
就需要
如果使用摩根定律就可以将命令简单化
6.find prem 查找权限的总结
find /权限 /代表或的意思,就是三个权限当中满足一个属主的权限就能匹配
find 权限 属于精确查找,三种权限必须完全一致才能匹配
find -权限 -代表并的意思,就是三种权限当中必须都要满足当中一个.
7、查找/var目录下属主为root,且属组为mail的所有文件
8、查找/var目录下不属于root、lp、gdm的所有文件
9、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
10、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
11、查找/etc目录下大于1M且类型为普通文件的所有文件
12、查找/etc目录下所有用户都没有写权限的文件
13、查找/etc目录下至少有一类用户没有执行权限的文件
14、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
原创文章,作者:Kartik,如若转载,请注明出处:http://www.178linux.com/37738