bash的算术运算和条件测试语句

前端之家收集整理的这篇文章主要介绍了bash的算术运算和条件测试语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


bash的算术运算和条件测试语句

1.wc:

2.cut命令:

cut - 在文件的每一行中提取片断

注意:能够被cut命令修剪的文件或数据内容,一般是具有某种特定格式会或结构文本文件或数据内容

格式:cut [OPTION]... [FILE]...

常用选项:

-d,--delimiter=DELIM:指定在实施修剪操作时使用的字段分隔符号,默认是TAB

(空白字符);

-f,--fields=LIST:根据指定的字段分隔符号来指定要保留的字段编号的列表;


LIST称为字段列表,地址定界,书写方法

1. NUM:选择被指定的单个数字所表示的字段,该字段将被保留;

2. NUM1,NUM2,NUM3,....:离散的多个被指定的字段的数字的列表,所有数值所代表的字段都被保留;

3. NUM1-NUM2:连续的多个被指定的字段的数字列表,所有数值代表的字段均被保留;

4. NUM1-:从NUM1开始直到行尾的所有字段;

5. -NUM2:从行首第一个字段到NUM2字段结束的所有字段;

--output-delimiter=STRING:指定输出数据时的字段分割符号;

例:

[root@localhost ~]# cut -d":" -f 1 /etc/passwd

root

bin

daemon

adm

lp

[root@localhost ~]# df | tr -s ' '| cut -d " " -f 2-4

1K-块 已用 可用

9754624 3512660 6241964

485168 0 485168

499860 0 499860

499860 7332 492528

191140 138508 52632

99972 4 99968

99972 24 99948

99972 0 99972




3.awk:

gawk - pattern scanning and processing language

常用选项:

-F fs--field-separator fs:指定字段分割符,默认空白字符;

对于awk,根据字符分割符切分出来的名字段,分别使用$1,$2,$3,...$NF来进行识别,$1是awk的内部变量;

格式:awk|gawk [Options]... '/PATTERN/{print $1,$2}'


例:

[root@localhost ~]# df | awk '{print $1,$2}'

文件系统 1K-块

/dev/sda3 9754624

devtmpfs 485168

tmpfs 499860

/dev/sda1 191140

tmpfs 99972

tmpfs 99972


4.sort:

sort - sort lines of text files

对于指定文件中的行,按照ASCII编码表中的字符顺序进行排序输出

格式:

sort [OPTION]... [FILE]...

常用选项:

-n:以数字的数值大小作为排序依据进行排序;

-r:倒序显示排序结果;

-R:随机排序,简陋,不适合复杂环境的排序要求;

-u:重复出现的行只出现一次,去重:连续且相同的行为重复行;

-t:指定字段分隔符;

-k:指定根据哪个关键字字段进行排序,一般和-t同时使用;

例:

[root@localhost ~]# sort -n -t " " -k 1 /etc/passwd|head -2

abrt:x:173:173::/etc/abrt:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin


例:选出12 13 14的最大值和最小值

[root@localhost ~]# vim 1

12 13 14

[root@localhost ~]# cat 1 | tr ' ' '\n'|sort -r | head -1

14

[root@localhost ~]# cat 1 | tr ' ' '\n'|sort -r | head -3 | tail -1

12



5.uniq

uniq - 删除排序文件中的重复行

注意:uniq命令本身不具有排序功能

格式:

uniq [OPTION]... [INPUT [OUTPUT]]

常用选项:

-c,--count:计算重复行的重复次数

-d,-repeated:显示重复行,只显示一行;

-u,--unique:仅显示无重复行;

例:

[root@localhost ~]# vim 1

[root@localhost ~]# cat 1

12 13 14

1

[root@localhost ~]# cat 1 | uniq -c -d

2 12 13 14

2 1



6.diff

diff - 找出两个文件的不同点(逐行比较两个文件内容

格式:

diff [option] 源文件 目标文件

制作patch文件

# diff file1 file2 > patch_file

注意:patch_file中记录的是file1和file2文件相比有哪些不同;使用patch_file时,

应该向file1打补丁;


例:

[root@localhost ~]# vim 0

[root@localhost ~]# cat 0

12 13 14 15

22 33 44 55

123456789

[root@localhost ~]# diff 0 1

1,3c1,3

< 12 13 14 15

< 22 33 44 55

< 123456789

---

> 12 13 14

> 123456789




7.patch

patch - apply changes to files

格式:

patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]

[-o outfile][-p num][-r rejectfile][file]

常用选项:

-i patchfile or --input=patchfile:用于指明patch文件的路径;





条件测试命令:

test命令==[ 命令,bash的内置命令;

格式:

test expression

[ expression ]

[[:bash的关键字,一般仅用于某些特定结构或格式之中;

` expression `


注意:此类条件测试命令一般没有执行结果,仅有执行状态返回值,如果其执行状态返回值为0,表示ture,为1,则表示false;




条件测试命令共有的三类条件测试表达式:


1.数值测试:双目操作;

测试操作符:

-eq:测试两个数值是否相等,相等为真,不等为假;

-ne:测试两个数值是否不等,不等为真,相等为假;

-lt:小于,测试左边数值是否小于右边数值,小于为真,不小于为假;

-gt:大于,测试左边数值是否大于右边数值,大于为真,不大于为假;

-lt:小于等于,测试左边数值是否不大于右边数值,不大于为真,大于为假;

-ge:大于等于,测试左边数值是否不小于右边数值,不小于为真,小于为假;


注意:bash仅支持整数,不支持浮点数;


2.字符串测试

1)双目测试

==|=:测试两个字符串是否为相同的字符串;相同为真,不同为假;

!=: 测试两个字符串是否为不同的字符串,不同为真,相同为假;

>: 测试左边的字符串所对应的ASSCII编码是否比右边的字符串对应的ASCII编码大,大于为真,小于为假;

<: 测试左边的字符串所对应的ASSCII编码是否比右边的字符串对应的ASCII编码小,小于为真,大于为假;

STRING =~:测试左侧的字符串能否被右边的PATTERN匹配,能匹配为真,不能为假;


注意:>,<,=~这三类测试操作符只能用在` expression `测试语句中



2)单目测试:

-z:‘STRING’:测试STRING是否为空串,空串为真,不空为假;

-n:‘TSTRING’:测试STRING是否为非空串,非空为真,空串为假;


  注意:

    1.通常情况下,字符串需要用引号引用,单引号或双引号都可以,只有在特定的情况下,只能选择单引号或双引号之一;

2. []和[[]]在某些情况下,意义不完全相同,要区分对待;

3. 如果使用[]或[[]]进行条件判断,在表达式的两端都留有空白字符,以区分命令和参数之间的关系;

4. 所有的双目测试操作符和参数之间也要留有空白字符;




3.文件测试

1)单目测试:

-a|-e FILE:测试文件是否存在,存在为真,不存在为假;

-b FILE:测试文件是否存在且为块设备文件,存在且为块设备文件为真,否则为假;

-c FILE:测试文件是否存在且为字符设备文件,存在且为字符设备文件为真,否则为假;

-d FILE: 测试文件是否存在且为目录文件,存在且为目录文件为真,否则为假;

-f FILE:测试文件是否存在且为普通文件,存在且为普通文件为真,否则为假;

-h|-L FILE:测试文件是否存在且为符号链接文件,存在且为符号链接文件为真,否则为假;

-s FILE: 测试文件是否存在且其大小大于0,存在且其大小大于0为真,否则为假;

-S FILE: 测试文件是否存在且为套接文件,存在且为套接文件为真,否则为假;

-t FD: 测试文件描述符是否在终端上被打开,在终端上被打开为真,否则为假;

-r FILE: 测试文件是否存在且当前用户是否被授予读权限,存在且授权为真,否则为假;

-w FILE: 测试文件是否存在且当前用户是否被授予写权限,存在且授权为真,否则为假;

-x FILE: 测试文件是否存在且当前用户是否被授予执行或搜索权限,存在且授权为真,

否则为假;



文件特殊权限标识测试:

-u FILE: 测试文件是否存在且设置了SUID,存在且设置为真,否则为假;

-g FILE: 测试文件是否存在且设置了SGID,存在且设置为真,否则为假;

-k FILE: 测试文件是否存在且设置了STICKY,存在且设置为真,否则为假;



文件的所有权测试

-o FILE:测试文件是否存在且其属主这为当前有效用户,存在且属主为当前有效用户为真,

否则为假;

-G FILE:测试文件是否存在且其属主这为当前有效用户,存在且属主为当前有效用户为真,

否则为假;




2)双目测试:

FILE1 -ef FILE2:测试两个文件是否拥有相同的Inode编号,即两个文件是否互为硬链接


测试语句中添加逻辑运算符号;

1.利用bash的逻辑运算符号;

[ expression1 ] && [expression2]

[ expression1 ] || [expression2]

! [ expression ]


2.利用条件测试命令本身的逻辑运算符号;

[ expression1 -a expression2 ]

[ expression1 -o expression2 ]

[ ! expression ]




命令的执行结果:

1.命令的正常输出结果;

2.命令的执行状态返回值;

0-255

0:表示命令执行成功或条判断为真;

1-255:表示命令执行失败或条件判断为假;

1,2,127:系统默认保留的;

3-126,128-255:用户自定义的命令执行状态返回值;




exit命令:

exit - exit the shell

格式:exit[n]

退出shell时可以使用n作为状态返回值,如果没有指定n,

则默认的状态返回值为最后一条命令的状态返回值;


注意:

当shell脚本运行时,一旦遇到exit命令,将立即结束运行次脚本的shell进程,

同时此脚本的运行也会停止,其后续所有命令都不会在被解释执行,因此,

包含了exit命令的脚本,不要使用source命令来执行;





bash的颜色显示规则:

调用了ASCII编码对于颜色的设置方案;


Ctrl键:\033

[:控制字符和颜色代码之间的分隔符;

所有的颜色代码都应该使用m结尾;


颜色代码

0:关闭颜色显示属性,恢复为黑白色;

1:加粗显示文本字符;

4:为文本字符添加下划线;

5:文本字符闪烁;

7:将文本字符的背景颜色和前景颜色交换;

8:将文本字符的背景颜色设置为与前景颜色相同;

30-39:设置文本字符的前景色,38,39为保留,暂时未被使用;

40-49:设置文本字符的背景色,48,49为保留,暂时未被使用;

例:


注意:此类控制字符和颜色代码必须防止echo -e模式中显示

猜你在找的Bash相关文章