其他的文本处理命令:
1.wc
2.cut命令:
注意:能够被cut修剪的文件或数据内容,一般是具有某种特定格式或结构的文本文件或数据内容;
如 :/etc/passwd
格式:cut [OPTION]... [FILE]...
常用选项:
-d,--delimiter=DELIM:指定在实施修剪操作时所使用的字段分隔符号,默认是TAB(空白字符);
-f,--fields=LIST:根据指定的字段分隔符号来指定要保留的字段编号列表;
LIST可以称为字段列表,地址定界,书写方法:
1.NUM:选择被指定的单个数字所表示的字段,该字段将被保留;
2.NUM1,NUM2,NUM3,……:离散的多个被指定的字段的数字的列表;所有数值所代表的字段均被保留;
3.NUM1-NUM2:连续的多个被指定的字段的数字列表,所有数值所代表的字段均被保留;
NUM1-:从NUM1开始直到行尾的所有字段;
-NUM2:从行首第一个字节开始直到NUM2的所有字节
--output-delimiter=STRING:指定输出数据时的字段分隔符号;
例:取出用户名,UID,以及默认的shell
[root@localhost ~]# cut -d ":" -f 1,3,7 --output-delimiter=" " /etc/passwd
对于某些特定格式的数据进行剪切提取,并以规范的格式输出也可以用下一个awk命令
[root@localhost ~]# df | tr -s ' ' '\t' | cut -f 3,5
3.awk:
gawk - pattern scanning and processing language
常用选项:
-F fs,--field-separator fs:指定字段分隔符,默认空白字符;
对于awk,根据字符分隔符切分出来的各字段,分别使用$1,$2,$3,……$NF来进行标识:$1,$3……$NF是awk的内部变量;
awk|gawk [Options] ...'/PATTERN/{print $1,$2}'
例:[root@localhost ~]# df | awk '{print $3,$5}' |tr ' ' '\t'
已用 已用%
3696340 8%
0 0%
88 1%
9140 1%
0 0%
154172 77%
16 1%
8086368 100%
4.sort:
sort - sort lines of text files
对于指定文件中的行按照ASCII编码表中的字符顺序进行排序输出;
格式:sort [OPTION]... [FILE]...
常用选项:
-n:以数字的数值大小为排序依据进行排序;
-r:倒序显示排序结果;
-R:随机排序:只是此随机排序算法非常简陋,不太适用于复杂环境中的排序要求;
-u, --unique:重复出现的行,只出现一次,去重;连续且相同的行称为重复行;
-t,--field-separator=SRP:指定字段分隔符;
-k:指定根据哪个关键字字段进行排序,一般和-t同时使用;
随机选取用户:[root@localhost ~]# sort -R /etc/passwd | head -1
halt:x:7:0:halt:/sbin:/sbin/halt
5.uniq
注意:uniq命令本身不具备排序的功能;
格式:uniq [OPTION]... [INPUT [OUTPUT]]
常用选项:
-c,--count:对于重复的行计算重复次数;(常用于统计日志文件)
-d,--repeated:只显示重复的行,且每个重复行只显示一个作为代表;
-u,--unique:只显示无重复行;
6.diff
diff - compare files line by line 对两个文件内容进行逐行比较
格式:diff [OPTION]...FILE
制作patch文件:
# diff file1 file2 > patch_file
注意:patch_file中记录的是file2的内容和file1文件相比有哪些不同;使用patch_file时,应该向file1打补丁;
7.patch:
patch - apply a diff file to an original
格式:patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]
常用选项:
-i patchfile or --input=patchfile:用于指明patch文件的路径;
条件测试命令:
test命令 == [命令,bash的内建命令;
格式:
test expression
[ expression ]
[[:bash的关键字,一般仅用于某些特定结构或这种格式之中;
[[ expression ]]
注意:此类条件测试命令,一般没有执行结果,仅有执行状态返回值,如果其执行状态返回值为0则表示true,如果其执行状态返回值为1,则表示false;
条件测试命令共有三类条件测试表达式:
1.数值测试:双目操作;
测试操作符:
-eq:测试两个数值是否相等;相等为真,不等为假;
-ne:测试两个数值是否不等;相等为假,不等为真;
-lt:小于,测试左边的数值是否小于右边的数值;小于为真,不小于为假;
-gt:大于,测试左边数值是否大于右边数值;大于为真,不大于为假;
-le:小于等于,测试左边的数值是否不大于右边数值;如果不大于为真,大于为假;
-ge:大于等于,测试左边的数值是否不小于右边数值;如果不小于为真,小于为假;
2.字符串测试:
双目测试:
==|=:测试两个字符串是否为相同的字符串;相同为真,不同为假;
!=:测试两个字符串是否不相同;不同为真,相同为假;
>:测试左边的字符串所对应的ASCII编码是否比右边的字符串ASCII编码大;大于为真,小于为假;
<:测试左边的字符串所对应的ASCII编码是否比右边的字符串ASCII编码小;小于为真,大于为假;
STRING=~PATTERN:测试左侧的字符串STRING能否被右边的模式PATTERN匹配;能匹配为真,不能为假;
注意:>,<,=~这三类测试操作符只能用在[[expression]]测试语句中使用
[root@localhost ~]# [ a == a ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ a == b ]
[root@localhost ~]# echo $?
1
单目测试
-z'STRING':测试STRING是否为空字符串,空为真,不空为假;
[root@localhost ~]# [ -z $MYVAR ]
[root@localhost ~]# echo $?
0
-n'STRING':测试STRING是否为非空字符串,不空为真,空为假;
[root@localhost ~]# [ -n $MYVAR ]
[root@localhost ~]# echo $?
0
注意:
1】通常情况下,字符串是要用引号引用的,单引号或双引号都可以,只有在特定的情况下,只能选择单引号或双引号之一;
2】[]和[[]]在某些情况下,意义不完全相同,要区分对待;
3】如果使用[]或[[]]进行条件判断,在表达式的两端都有留空白字符,以区分命令和参数之间的关系;
4】所有的双目测试操作符和参数之间也要留有空白字符空间;
3.文件测试:
单目测试:
-a|-e FILE:测试文件是否存在,存在为真,不存在为假;
-b FILE:测试文件是否存在且为块设备文件,存在且为块设备为真,否则为假;
-c FILE:测试文件是否存在且为字符设备文件,存在且为字符设备为真,否则为假;
-d FILE:测试文件是否存在且为目录文件,存在且为目录文件为真,否则为假;
-f FILE:测试文件是否存在且为普通文件,存在且为普通文件为真,否则为假;
-h|-l FILE:测试文件是否存在且为符号链接文件,存在且为符号链接文件为真,否则为假;
-s FILE:测试文件是否存在且其大小要大于零,存在且大小大于0为真,否则为假;
-S FILE:测试文件是否存在且为套接字文件,存在且为套接字为真,否则为假;
-t FD:测试文件描述符是否在终端上被打开,被打开为真,否则为假;
-r FILE:测试文件是否存在且当前用户是否被授予读权限,存在且授权为真,否则为假;
-w FILE:测试文件是否存在且当前用户是否被授予写权限,存在且授权为真,否则为假;
-x FILE:测试文件是否存在且当前用户是否被授予执行或搜索权限,存在且授权为真,否则为假;
文件特殊权限标识测试:
-u FILE:测试文件是否存在且设置了SUID,存在且授权为真否则为假;
-g FILE:测试文件是否存在且设置了SGID,存在且授权为真否则为假;
-k FILE:测试文件是否存在且设置了STICKY,存在且授权为真否则为假;
文件的所有权测试:
-O FILE:测试文件是否存在且其属主为当前有效用户;存在且属主为当前有效用户为真,否则为假
-G FILE:测试文件是否存在且其属组是否为当前有效用户的所在组;存在且属组为当前有效用户的所在组为真,否则为假;
双目测试:
FILE1 -ef FILE2:测试两个文件是否拥有相同的Inode标号:即:两个文件是否为硬链接;
测试语句中添加逻辑运算符号:
1.利用bash的逻辑运算符号:
[ expression1 ] && [ expression2 ]
[ expression1 ] || [ expression2 ]
![ expression ]
2.利用条件测试本身的逻辑运算符号:
[ expression1 -a expression2 ]
[ expression1 -o expression2 ]
命令的执行结果:
1.命令的正常输出结果;
2.命令的执行状态返回值;
0-255
0:标识命令成功执行或者条件判断为真;
1-255:表示命令执行失败或者条件判断为假;
1,2,127:系统默认保留的;
exit命令:
exit - exit the shell
格式:exit [n]
退出shell时可以使用n作为状态返回值;如果没有指定n,则默认的状态返回值为最后一条命令的状态返回值;
注意:
当shell脚本运行时一旦遇到exit命令将立即结束运行此脚本的shell进程,同时次脚本的运行也会停止,其后续的所有命令不会再被解释执行,因此包含了exit命令的脚本,不要使用source命令来执行;
bash的颜色显示规则:
调用了ASCII编码对于颜色的设置方案‘
Ctrl键:\033
[:控制字符和颜色代码之间的分隔符;
所有的颜色代码都应该使用m结尾;
颜色代码:
1:加粗子显示文本字符;
4:为文本字符添加下划线标识;
5:使文本字符闪烁;
7:将文本字符的背景颜色和前景颜色交换;
8:将文本字符的背景颜色设置为与前景颜色相同;
30-39:设置文本字符的前景色,38,39为保留,未被使用;
40-49:设置文本字符的背景色,48,49为保留,暂时未使用;
注意:此类控制字符和颜色代码必须放置在echo -e 模式中显示;
程序的组成部分:
二进制文件;
帮助文件:
配置文件:
bash——CLI中的一种:
bash同样属于完整的应用程序,上述四类文件,bash都有;
二进制文件:/bin/bash
帮助文件: /usr/share/man/man1/bash.a.gz
配置文件:
三类:
1.profile类:
2.bashrc类:
3.logout
为交互式登录的shell进程提供终止及清理类功能的配置文件;
bash的类型:
1.交互式登录的bash
1)直接通过某个终端输入账户信息和密码之后打开的bash进程;
2)su - | -l USERNAME执行切换登录大开的bash进程;
配置文件的加载顺序:
/etc/profile --> /etc/profile.d/*.sh -->~/.bash_profile --> ~/.bashrc --> /etc/bashrc
2.非交互式登录的bash
1)在图形界面下,通过菜单项或右键菜单打开的终端所启动的bash进程;
2)使用su USERNAME执行切换登录打开的bash进程;
配置文件的加载顺序:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
bash的配置文件:
1.profile类:
全局配置文件
/etc/profile
/etc/profile.d/*.sh
注意:在RHEL或CentOS系列的发行版操作系统中,通常会存在这样的情况;如果一个配置文件的内容很多,格式很复杂,将会尝试将此配置文件切割拆分为多个片段配置文件,往往把最核心最主要的主配置文件中,将一些附属的或者扩展的配置内容分散存放在各个片段配置文件中;而被切分出来的片段配置文件一般会统一保存在“程序名称.d”命名格式的目录中;而我们约定,在这类目录中保存的片段配置文件的后缀名称会是统一的字符串;
个人配置文件:
~/.bash_profile
profile类配置文件的作用:
1.用于定义用户的环境变量;
2.用于运行脚本或者执行命令;
2.bashrc类:
全局配置文件:
/etc/bashrc
个人配置文件:
~/.bashrc
bashrc类配置文件的作用:
1.用于定义本地变量
2.定义命令别名
3.用于定义umask
注意:只有root用户才能修改全局类的bash配置文件,普通用户只能修该其家目录中属于其个人的配置文件;
为什么要为bash使用配置文件?
所有利用bash命令行完成的命令行完成的命令操作,只要没有涉及到文件修改的,一般都只是针对当前的shell生效,一旦shell进程结束,则此前所有的操作的生命周期就咋偶到尽头,即配置失效;
配置文件的作用:
1.能够使用户赖以生存的配置信息长期有效;
1.注销重新登录,打开新的shell进程;
2.source命令;
3.exec命令;
3.logout类:
个人配置文件:
~/bash_logout
作用:在关闭shell进程之前,清除某些用户自定义的配置,删除某些临时文件或目录,以及撤销用户此前定义的变量,清理某些可能会引发安安全问题的隐患等操作;
bash的变量中存放的字符串的处理方式:
bash变量:
弱变量:
1.无需事先定义即可应用;
2.变量没有数据类型的硬性要求默认是字符型;
1.字符串切片:
${#VAR}:返回字符类型变量的变量值的长度;
${VAR:offset}:返回字符型变量中第“offset”位置之后的内容不包括第“offset”位置的字符;offset取值范围为:0-$[${#VAR}-1]
${VAR:offset:number}:返回字符型变量中从第offset个字符后长度为number的字符部分;
${VAR -length}:取字符型变量字符串最右侧的“length”个字符
注意:在“-length”之前要留有空格;
2.基于模式(PATTERN)取字符串
${VAR#*PATTERN}:自左而右查找VAR变量中所存储的字符串中,第一次被PATTERN匹配到的字符,删除从字符串开始到第一个被PATTERN匹配的字符之间的所有字符;
${VAR##*PATTERN}:自左而右查找VAR变量中所存储的字符串中,所有被PATTERN匹配到的字符,删除从字符串开始到最后一次被PATTERN匹配的字符之间的所有字符;
${VAR%PATTERN*}:自右向左去查找VAR变量所存储的字符串中,第一次被PATTERN匹配到的字符,删除从字符串结尾到第一个PATTERN匹配到的字符之间的所有字符;
${VAR%%PATTERN*}:自右向左去查找VAR变量所存储的字符串中,所有被PATTERN匹配到的字符,删除从字符串结尾到最后一个PATTERN匹配到的字符之间的所有字符;
3.查找替换:
${VAR/PATTERN/SUBSTRING}:在VAR变量中,查找能够被PATTERN匹配到的内容,将其中第一个匹配到的结果PATTERN替换为SUBSTRING;
${VAR//PATTERN/SUBSTRING}:在VAR变量中,查找能够被PATTERN匹配到的内容,将所有匹配到的结果PATTERN替换为SUBSTRING;
${VAR/#PATTERN/SUBSTRING}:在VAR变量中查找行首匹配PATTERN的内容,将匹配的内容更换成SUBSTRING;
${VAR/%PATTERN/SUBSTRING}:在VAR变量中查找行尾匹配PATTERN的内容,将匹配的内容更换成SUBSTRING;
4.查找删除:
${VAR/PATTERN}:在VAR变量中,查找能够被PATTERN匹配到的内容,将其中第一个匹配到的结果PATTERN删除;
${VAR/PATTERN}:在VAR变量中,查找能够被PATTERN匹配到的内容,将所有匹配到的结果PATTERN删除;
${VAR/#PATTERN}:在VAR变量中查找行首匹配PATTERN的内容,将匹配的内容删除;
${VAR/%PATTERN}:在VAR变量中查找行尾匹配PATTERN的内容,将匹配的内容删除;
5.字符串的大小写转换:
${VAR^^}:将变量中的小写字母转换为大写字母;
${VAR,}:将变量中的大写字母转换为小写字母:
6.变量赋值操作:
${VAR:-value}:如果VAR变量为空值或者变量为被定义,那么就直接返回value中的值;否则就返回VAR的值;
${VAR:+value}:如果VAR已被定义且不为空,则返回value的值;
${VAR:=value}:如果VAR变量为空值或者未被定义,那么直接返回value中的值并且将vvalue的值赋给变量VAR;否则返回变量VAR的值;
7.变量的间接引用:
如果第一变量的值恰好是第二个变量名,那么从第一变量引用第二个变量而方法,就称为变量的间接引用,也称为间接变量引用;
如:VAR1=VAR2,VAR2=HELLO6
bash提供了这样的间接变量引用的的方法:
eval MYVAR= \$$VAR1