码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2018-08-04 15:03:20      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:图形   type   active   乘法   最大   run   evel   ssi   脚本   

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 \b 词首

\> or \b 词尾

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

分组

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

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

扩展正则表达式

字符匹配

. 匹配任一单个字符

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

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

次数匹配

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

? 匹配前方字符0或1次

+ 匹配前方字符至少1次

{n} 匹配前方字符n次

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

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

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

位置锚定

^ 匹配行首

$ 匹配行尾

\< or \b 匹配词首

\> or \b 匹配词尾

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

分组

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


基本正则和扩展正则区别

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,正则,命令历史

标签:图形   type   active   乘法   最大   run   evel   ssi   脚本   

原文地址:http://blog.51cto.com/winthcloud/2154650

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!