linux学习第4天(自习)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux学习第4天(自习)相关的知识,希望对你有一定的参考价值。
linux学习第4天(自习)
时间: 20180719
目录
bash 变量类型
bash 的配置文件
shell登录类型
bash 中的算术运算
bash 中的条件测试
bash 脚本语句控制
grep和正则表达式
基本正则表达式元字符
扩展正则表达式元字符
文件查找 find, locate
bash 变量类型
根据变量的生效范围等标准可分为
本地变量
生效范围为当前shell进程,对当前shell之外的其它shell进程包括当前
shell的子进程均无效
环境变量
生效范围为当前shell进程及子进程
局部变量
生效范围为当前shell进程中某代码片段(通常指函数)
位置变量
$1,...,$n{10}来表示,用于放置在脚本代码中调用过命令行传递给它的参数
特殊变量
$? 上一个命令执行后返回的执行状态码(执行成功或失败)
$0 表示命令本身
$# 传递给脚本参数的个数
$* 传递给脚本的所有参数,全部参数在下次引用时会合成一个参数
[email protected] 传递给脚本的所有参数,全部参数在下次引用时每个参数都是独立的
set 显示已经定义的所有变量
unset 销毁已经定义的变量
变量命令法则
1 不能使用程序中的保留字: 如if, for 等
2 只能使用数字、字母及下划线,且不能以数字开头
3 要做到见名知意
bash 的配置文件
按照生效范围划分,存在两类
全局配置文件:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置文件
~/.bash_profile
~/.bashrc
profile 为交互式登录的shell提供配置
功用 定义环境变量
运行命令或脚本
bashrc 为非交互式登录的shell提供配置
功用 定义命令别名
定义本地变量
shell登录类型
交互式
直接通过终端输入账号和密码登录,使用su -l USERNAME 或 su - USERNAME
读取配置文件顺序
/etc/profile --> /etc/profile.d/*.sh --> ~/bash_profile -->
~/.bashrc --> /etc/bashrc
非交互式
使用su USERNAME 或者通过图形界面下打开的终端,读取配置文件顺序
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
bash中的算术运算
1 let Var_name=EXPRESSION
2 $[EXPRESSION]
3 $((EXPRESSION))
4 命令 expr ARG1 运算符 ARG2 如A=$(expr $B * $C)
5 Var++ Var--...
6 Var+=Var2...
bash中的条件测试
数值测试
-gt great than 是否大于
-ge great than or equal 是否大于等于
-eq equal 是否等于
-ne not equal 是否不等于
-lt less than 是否小于
-le less than or equal 是否小于等于
字符串测试
== 是否等于
> 是否大于 使用字母排序方式,如果前边的字符串排在后边字符串之后,则为真
< 是否小于 使用字母排序方式,如果前边的字符串排在后边字符串之前,则为真
!= 是否不等于
=~ 左侧字符串是否能够被右侧的PATTERN所匹配 此种只能用 [[ ]]方式
-z "string" 测试字符串是否为空,空则为真
-n "string" 测试字符串是否不空,不空为真
文件测试
1. 存在性测试
-a FILE (少用)
-e FILE 文件存在性测试,存在为真
2. 存在性并类别性测试
-b FILE 文件存在且为块设备为真
-c FILE 文件存在且为字符设备为真
-d FILE 文件存在且为目录文件为真
-f FILE 文件存在且为普通文件为真
-h 或 -L FILE 文件存在且为符号连接文件为真
-p FILE 文件存在且为命名管道文件为真
-S FILE 文件存在且为socket文件为真
3. 文件权限测试
-r FILE 是否存在且可读
-w FILE 是否存在且可写
-x FILE 是否存在且可执行
4. 文件特殊权限测试
-g FILE 是否存在且拥有sgid权限
-u FILE 是否存在且拥有suid权限
-k FILE 是否存在且拥有sticky权限
5. 文件大小测试
-s FILE 是否存在且非空
6. 文件是否打开
-t fd: fd表示文件描述符是否已经打开且与某终端相关
-N FILE 文件自上一次被读取之后是否被修改过
-O FILE 当前有效用户是否为文件属主
-G FILE 当前有效用户是否为文件属组
7. 双目测试
file1 -ef file2 两文件是否指向同一个设备上的相同inode
file1 -nt file2 文件1的mtime新于file2为真
file1 -ot file2 file1的mtime旧于file2为真
组合测试条件
&&(与) ||(或) !非
EXPRESSION -a EXPRESSION 与
EXPRESSION -o EXPRESSION 或
! EXPRESSION 非
bash脚本语句控制
if EXPRESSION; then
...
elif CONDITION; then
...
else
...
fi
for 变量名 in 列表; do
...
done
while CONDITION; do
...
done
until CONDITION; do
...
done
脚本测试
bash -n scripts.sh 测试语法问题
bash -x scripts.sh 显示每条执行命令,可用来检查脚本执行过程
grep和正则表达式
Global search REgular expression and Print out the line
一款文件过虑工具,通过用户所指定的模式来搜索文本并打印出文本中所匹配到的行
--color 高亮显示匹配到的行
-v 显示不能被pattern所匹配到的行
-i 忽略字符大小写
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息,一般用于测试是否匹配到
-A # after 显示匹配到的后#行
-B # before 显示匹配到的前#行
-C # context 显示匹配到的前后各#行
-E 使用ERE 支持使用扩展的正则表达式
基本正则表达式元字符
字符匹配
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[]中的范围有以下几种表示方法
[:alnum:] 表示所有字母和数字
[:alpha:] 表示所有的字母
[:digit:] 表示所有的数字
[:lower:] 表示所有的小写字母
[:punct:] 表示所有的标点符号
[:space:] 表示空白字符
[:upper:] 表示所有的大写字母
次数匹配
* 匹配前边的字符任意次
.* 任意长度的任意字符
? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
{m} 匹配前面的字符m次
{m,n} 匹配前面的字符至少m次,最多n次
{0,n} 匹配前面的字符最多n次
{m,} 匹配前面的字符至少m次
位置锚定
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,于用模式的最右侧
^PATTERN$ 用于匹配整行
^$ 空行,不包含空格的行
^[[:space:]]*$ 空行,但包含空格的行
< 或 词首锚定,用于单词模式的左侧
> 或 词尾锚定,用于单词模式的右侧
<PATTERN> 匹配到整个单词
分组
分组是指将一个或多个字符捆绑在一起,当作一个整体进行处理,并供后向引用
()
扩展正则表达式元字符
字符匹配
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
扩展和基本正则表达式相同
次数匹配
* 任意次
? 0次或1次
+ 至少1次
{m} 精确匹配m次
{m,n} 至少m次,最多n次
{m,} 至少m次
{0,n} 最多n次
锚定
扩展正则表达式的位置锚定与基本正则表达式的相同,不再重复说明
分组
() 用括号括起来表示要引用的内容,不需要转义。 后向引用
文件查找
locate 此命令为非实时查找文件,依赖自身的数据库updatedb可以手动更新此数据库
find 此命令为实时查看文件,特点精确查找,精准查找,速度慢
find 用法
find [options]... [查找路径] [查找条件] [处理动作]
查找路径: 默认为当前目录
查找条件: 默认为指定路径下的所有文件
处理动作: 默认为显示至屏幕
查找条件
-name "文件名称" 支持使用globbing字符
-iname "文件名称" 查找时忽略字符大小写
-user USERNAME 根据文件的属主查找
-uid UID 查找指定的UID文件
-gid GID 查找指定的GID文件
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
根据文件类型查找
-type TYPE 根据文件类型查找
f 普通文件
d 目录文件
l 符号链接
b 块设备文件
c 字符设备文件
s 套接字文件
p 命名管道文件
根据文件大小查找
-size [+|-]#UNIT 常用单位: K,M,G
#UNIT #-1<x<=#
-#UNIT x<=#-1
+#UNIT x>#
如 5k 表示 4k<x<=5k
-5K 表示 x<=4K
+5K 表示 x>5K
根据时间戳查找
以“天”为单位
-atime [+|1]#
+# x>=#+1
-# x<#
# #<=x<#+1
-mtime
-ctime
以分钟为单
-amin
-mmin
-cmin
根据权限查找
-perm [+|-]MODE
MODE 与MODE精确匹配
如: find . -perm 644
+MODE 任何一类用户的权限只要能包含对其指定的任何一位权限即可
find ./ -perm /222 表示任何一类用户的权限中包含写权限就OK
find ./ -perm /621 表示属主有读或写,或属组有写,或其它有执行
权限都会被匹配到
-MODE 每类用户指定的权限都必须匹配,为三类用户所有指定的权限都能够
包含如:
find ./ -perm -222 表示每一位中的权限大于等于2就匹配
find ./ -perm -555 表示包括666, 676 等,但不包括555等
NOTE: +020中的0表示不匹配属主和其它位的权限,而不是说属主和其它位没有
没有任何权限
组合条件查找
-a 与, -o 或, -not ! 条件取反
处理动作
-print 默认处理动作,显示打印到屏幕上
-ls 类似于ls -l
-delete 删除查找到的文件
-fls /path/to/somefile 查找到的所有文件的长格式信息保存至指定的文件中
-ok COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件
执行命令之前,都会交互式要求用户确认,其它{}表示前面查找到的所有内容
的引用,
-exec COMMAND {} ; 对查找到的每个文件执行COMMAND指定的命令
(不会有交互提示)
以上是关于linux学习第4天(自习)的主要内容,如果未能解决你的问题,请参考以下文章