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天(自习)的主要内容,如果未能解决你的问题,请参考以下文章

linux学习第6天(自习) vim使用

Linux 第10天自习文件权限管理

Linux 第22天 自习 Linux 任务计划

Linux 第18天自习 网络管理

Linux 第14天自习 btrfs和压缩归档

Linux CentOS 学习第4天(2018年6月7日)