Linux 第17天 bash,find,正则,命令历史

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 第17天 bash,find,正则,命令历史相关的知识,希望对你有一定的参考价值。

Linux 第17天

时间: 20180803


目录

脚本测试

$-变量作用

bash的配置文件

忘记的内容回顾

命令历史

命令历史调用

bash算术运算help let

管道重定向

正则表达式和扩展表达式元字符

find命令的使用




脚本测试


[ X"$var = X"$var" ] 此种方式可以避免变量出现空值时提示语法错误

[ "$name" = "$test"] 此种方式也是为了避免变量出现空值,但是如果两个变量都空时会为真

[[ "$var" =~ EXPR ]] 支持扩展正则表达式匹配,后边的正则不可加引号


脚本不支持别名: 脚本内不可以执行命令的别名


read 和用户交互式为某变量赋值

-p 在为变量赋值时,增加一个提示字符串

-n 指定变量的字符长度,当用户输入字符长度达到时自动保存至变量,而不是等到用户按回车

-s 用户输入时不会显示用户所输入的字符,一般用于设置密码

-d 指定结束符号,当输入所指定的结束字符时,自动保存字符串至变量中

-t 指定等待时间,当用户长时间未输出字符时,自动退出交互界面,变量为空值


$-变量作用

此变量是一个监控变量,可以显示当前bash的配置情况

echo $- 会显示一个字符串,每个字符代表bash开启的功能

h hashall 有此字符表示shell会将命令所在的路径hash下来,避免每次都要搜索硬盘路径

通过set +h 将h选项关闭

i interactive-comments 包含这个选项说明当前的shell是一个交互式的shell。所谓的交互

式shell,在脚本中, i选项是关闭的

m monitor 打开监控模式,就可以通过job control来控制进程的停止、继续、后台或前台

执行 bg fg

B braceexpand 大括号{}展开,如果关闭后则大括号将会被当作普通的字符串来识别

H history H选项打开,可以展开历史列表中的命令,可以通过!执行其历史命令,

如果关闭后则不可以执行。 set +|- H



bash的配置文件

按生效范围划分,存在两类

全局配置:

/etc/profile

/etc/profile.d/*.sh

/etc/bashrc

个人配置:

~/.bash_profile

~/.bashrc


按功能划分存在两类

profile类: 为交互式登录的shell提供配置

全局: /etc/profile /etc/profile.d/*.sh

个人: ~/bash_profile


功用: 定义环境变量 运行命令或脚本


bashrc类: 为非交互式和交互式登录的shell提供配置

全局: /etc/bashrc

个人: ~/.bashrc


功用: 定义命令别名和函数 定义本地变量



shell登录时读取配置文件的顺序

交互式登录

1) 直接通过终端输入账号密码登录

2) 使用"su - User" 切换的用户

执行顺序: /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile

--> ~/.bashrc --> /etc/bashrc


非交互式登录

1) su UserName

2) 图形界面下打开的终端

3) 执行脚本

4) 任何其它的bash实例

执行顺序 ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


bash退出任务

当用户退出登录时会读取并执行此文件~/.bash_logout


功用: 创建自动备份 清除临时文件等



locate 通过数据库来查找系统里的文件cent7最小安装已经废弃此软件包mlocate

-i ignore case 忽略字符大小写

-n 后边跟一个数值表示显示所匹配到的前#个文件

-r 后边可以跟一个基本正则表达式来搜索文件

updatedb 此命令用来更新文件查询数据库,如果系统有生成新文件时可以使用此命令来更新

数据库



忘记的内容回顾


命令历史

!! 执行上一条命令

!-1 执行上一条命令

!n 执行history命令输出对应序号n的命令

!-n 执行history命令历史中倒数每n个命令

!string 重复前一个以"string"开头的命令

!?string 重复前一个包含"string"的命令

!string:p 仅打印命令,而不执行

!$:p 打印出!$(上一条命令的最后一个参数)的内容

!*:p 打印输出!*(上一条命令的所有参数)的内容

^string 删除上一条命令中第一个string

^string^string2 将上一条命令中的第一个string1替换为string2

!:gs/string1/string2 将上一条命令中所有所有string1都替换为string2

历史命令调用

Ctrl+r 可以搜索包含某个字符串的历史命令

Ctrl+g 从命令历史搜索模式退出

command !^ 调用上一条命令的第一个参数作为command的参数

command !$ 调用上一条命令的最后一个参数作为command的参数

command !* 调用上一条命令的全部参数作为command的参数

command !:n 调用上一条命令的第n个参数作为command的参数

command !n:^ 调用第n条命令的第一个参数作为command的参数

command !n:$ 调用第n条命令的最后一个参数作为command的参数

command !n:m 调用第n条命令的第m个参数作为command的参数

command !n:* 调用第n条命令的所有参数作为command的参数



bash算术运算help let

+, -, *, /, %取模, **乘方

实现算术运算的语法

a=5 b=8

1) let c=$a+$b

2) c=$[$a+$b]

3) c=$(($a+$b))

4) c=$(expr $a + $b)

5) echo $a+$b|bc

乘法符号有些场景中需要转义在其前方加



管道重定向

> 将标准输出重定向至文件中覆盖其原有内容

>> 将标准输出重定向至文件中但不会覆盖其原有内容,追加在其之后

2> 将错误输出重定向至文件中覆盖其原有内容

2>> 将错误输出重定向至文件中但不会覆盖其原有内容,追加在其之后

&> 将标准和错误输出重定向至文件中覆盖其原有内容

&>> 将标准和错误输出重定向至文件中但不会覆盖其原有内容,追加在其之后

2>&1 将错误输出转至标准输出

1>&2 将标准输出转至错误输出

示例 ls abc >f1 2>&1


正则表达式和扩展表达式元字符

标准正则表达式

字符匹配

. 任意单个字符

[] 匹配括号内任一单个字符

[^] 匹配除了括号内的任一单个字符

[:alnum:] 字母和数字

[:alpha:] 大小写字母

[:upper:] 大写字母

[:lower:] 小写字母

[:digit:] 数字

[:punct:] 标点符号

[:print:] 可打印字符

[:space:] 空格

[:blank:] 空白字符


次数匹配

* 匹配前方字符任意次包含0次

? 匹配前方字符0或1次

+ 匹配前方字符至少1次

{n} 匹配前方字符n次

{n,} 匹配前方字符至少n次

{n,m} 匹配前方字符至少n次,最多m次

{,m} 匹配前方字符最多m次

位置锚定

^ 行首

$ 行尾

< or  词首

> or  词尾

| 表示匹配前边或后边的模式之一

分组

() 将一组表达式括起来可以将其用来后向引用

需要注意后向引用是引用前方的分组括号中的模式所匹配的字符,非模式本身

扩展正则表达式

字符匹配

. 匹配任一单个字符

[] 匹配括号内任一单个字符

[^] 匹配除了括号内任意单个字符

次数匹配

* 匹配前方字符任意次包含0次

? 匹配前方字符0或1次

+ 匹配前方字符至少1次

{n} 匹配前方字符n次

{n,} 匹配前方字符到少n次

{n,m} 匹配前方字符至少n次,最多m次

{,m} 匹配前方字符最多m次

位置锚定

^ 匹配行首

$ 匹配行尾

< or  匹配词首

> or  匹配词尾

| 表示匹配前边或后边的模式之一

分组

() 将一组表达式括起来可以将其用来后向引用


基本正则和扩展正则区别

In  basic  regular  expressions  the  meta-characters ?, +, {, |, 

(, and ) lose their special meaning; instead use the backslashed

versions ?, +, {, |, (, and ).


默认的基本正则?, +, {, |, (, ),在shell中有特殊意义所以在其前方加上将其

转义,即不被shell所识别为特殊字符。而扩展正则做了优化使其可以直接使用这些

字符,而不会被shell所识别为特殊含义的字符。



find 搜索文件系统上的文件或文件夹

-maxdepth LEVEL 最大搜索目录深度,指定目录为第1级

-mindepth LEVEL 最小搜索目录深度

-iname 搜索文件名时不区分大小写

-regex "pattern" 以pattern匹配整个文件路径字符串,而不仅仅是文件名称

-empty 搜索空文件或空目录

fine /app -type d -empty

-perm +|-#

# 表示精确匹配所给的权限

如 -perm 644 则精确匹配文件权限为644的文件或文件夹

/# 表示匹配所给权限中的一组即可

如 -perm /644 则匹配文件权限属主大于6或属组大于4或其它大于4的文件或

文件夹

-# 表示匹配所给权限中的每一位

如 -perm -644 则匹配文件权限属主至少6并且属组至少为4其它为4的文件或

目录

/|- 664 110 110 100

/ 110 110 100 表示1关心0不关心有无都可以 每1组之间为或关系

可以匹配的有 777, 600, 060, 004等只要有一组满足即可

- 110 110 100 表示1关心0不关心有无都可以 每1组之间为与关系

可以匹配的有664, 764, 667, 665等三组权限同时大于664就满足

-atime # 单位是天

# 表示 [#,#+1) 此种方式用的不多,一般+-用的比较多

如 -atime 5 表示5天前到6天之内被访问的过的文件

+# 表示 [#+1,无穷大)

如 -atime +5 表示6天(包含每6天)之前被访问过的文件

-# 表示 (#,now)

如 -atime -5 表示6天之内被访问过的文件

-ctime

-mtime

-amin # 单位是分钟

-cmin

-mmin

-size +|- #UNIT

#UNIT (#-1,#]

如5K 表示 (4K,5] 匹配4k-5K大小的文件

-#UNIT [0,#-1]

如-5K 表示 [0,4K] 表示匹配小于等于4K大小的文件

+#UNIT

如+5K 表示 (5K,无穷大) 表示匹配大于5K大小的文件

-prune

查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件

find /etc (–path '/etc/sane.d' –o –path '/etc/fonts' )

-a -prune –o -name "*.conf"


以上是关于Linux 第17天 bash,find,正则,命令历史的主要内容,如果未能解决你的问题,请参考以下文章

linux-基础知识-第17天

linux find 正则表达式

Linux 第9天bash基础命令

Linux 第7天

第5天(半天)shell编程初步grep及正则表达式

Linux基础(强大到流泪的find/grep)