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键: 33 [:控制字符和颜色代码之间的分隔符; 所有的颜色代码都应该使用m结尾; 颜色代码: 0:关闭颜色显示属性,恢复为黑白色; 1:加粗显示文本字符; 4:为文本字符添加下划线; 5:文本字符闪烁; 7:将文本字符的背景颜色和前景颜色交换; 8:将文本字符的背景颜色设置为与前景颜色相同; 30-39:设置文本字符的前景色,38,39为保留,暂时未被使用; 40-49:设置文本字符的背景色,48,49为保留,暂时未被使用;
例:
注意:此类控制字符和颜色代码必须防止echo -e模式中显示; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |