笔记
字符处理
1.排序命令sort(通常不用参数)
[root@localhost ~]# sort [选项] 文件名
选项:
-f: 忽略大小写
-n: 以数值型进行排序,默认使用字符串型排序
-r: 反向排序
-t: 指定分隔符,默认是分隔符是制表符
-k n[,m]: 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
[root@localhost ~]# sort /etc/passwd
#直接使用默认排序
[root@localhost ~]# sort -r /etc/passwd
#反向排序
[root@localhost ~]# sort -t ":" -k 3,3 /etc/passwd(字符型)
#指定分隔符是“:”,用第三字段开头,第三字段结尾排序,就是只用第三字段排序
[root@localhost ~]# sort -n -t ":" -k 3,3 /etc/passwd(数值型)
#以数值型排序指定分隔符是“:”,用第三字段开头,第三字段结尾排序,就是只用第三字段排序
2.统计命令wc
[root@localhost ~]# wc [选项] 文件名
选项:
-l: 只统计行数
-w: 只统计单词数
-m: 只统计字符数
[root@localhost ~]# wc /etc/passwd
22 45 1101 /etc/passwd
#默认:行数22 单词数45 字符数1101
条件判断
1.按照文件类型判断
-b 文件 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)
-c文件 判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真)
-d 文件 判断该文件是否存在,并且是否为目录文件(是目录为真)
-e 文件 判断该文件是否存在(存在为真)
-f 文件 判断该文件是否存在,并且是否为普通文件(是普通文件为真)
-L 文件 判断该文件是否存在,并且是否为符号链接文件(是符号链接文件为真)
-p 文件 判断该文件是否存在,并且是否为管道文件(是管道文件为真)
-s 文件 判断该文件是否存在,并且是否为非空(非空为真)
-S 文件 判断该文件是否存在,并且是否为套接字文件(是套接字文件为真)
格式:
[root@localhost ~]# test -e /root/insall.log
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -e /root/install.log ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -d /etc ] && echo "yes" || echo "no"
yes
#第一个判断命令如果正确执行,则打印“yes”,否则打印“no”
2.按照文件权限判断
-r 文件 判断该文件是否存在,并且是否该文件拥有读权限(有读权限为真)
-w文件 判断该文件是否存在,并且是否该文件拥有写权限(有写权限为真)
-x 文件 判断该文件是否存在,并且是否该文件拥有执行权限(有执行权限为真)
-u 文件 判断该文件是否存在,并且是否该文件拥有SUID权限(有SUID权限为真)
-g 文件 判断该文件是否存在,并且是否该文件拥有SGID权限(有SGID权限为真)
-k 文件 判断该文件是否存在,并且是否该文件拥有SBit权限(有SBit权限为真)
[root@localhost ~]# [ -w student.txt ] && echo "yes" || echo "no"
yes
#判断文件是拥有写权限的
3.两个文件之间比较
文件1 -nt 文件2 判断文件1的修改时间是否比文件2的新(如果新则为真)
文件1 -ot 文件2 判断文件1的修改时间是否比文件2的旧(如果旧则为真)
文件1 -ef 文件2 判断文件1是否和文件2的Inode号一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法
[root@localhost ~]# ln /root/student.txt /tmp/stu.txt
[root@localhost ~]# ll -i student.txt
33974916 -rw-r--r--. 2 root root 63 5月 8 12:14 student.txt
[root@localhost ~]# ll -i /tmp/stu.txt
33974916 -rw-r--r--. 2 root root 63 5月 8 12:14 /tmp/stu.txt
[root@localhost ~]# [ /root/student.txt -ef /tmp/stu.txt ] && echo "yes" || echo "no"
yes
4.两个整数之间比较
整数1 -eq 整数2 判断整数1是否和整数2相等(相等为真)
整数1 -ne 整数2 判断整数1是否和整数2不相等(不相等位置)
整数1 -gt 整数2 判断整数1是否大于整数2(大于为真)
整数1 -lt 整数2 判断整数1是否小于整数2(小于位置)
整数1 -ge 整数2 判断整数1是否大于等于整数2(大于等于为真)
整数1 -le 整数2 判断整数1是否小于等于整数2(小于等于为真)
[root@localhost ~]# [ 23 -ge 22 ] && echo "yes" || echo "no"
yes
[root@localhost ~]# [ 23 -le 22 ] && echo "yes" || echo "no"
no
5.字符串判断
-z 字符串 判断字符串是否为空(为空返回真)
-n 字符串 判断字符串是否为非空(非空返回真)
字串1 ==字串2 判断字符串1是否和字符串2相等(相等返回真)
字串1 != 字串2 判断字符串1是否和字符串2不相等(不相等返回真)
[root@localhost ~]# name=sc
[root@localhost ~]# [ -z "$name" ] && echo "yes" || echo "no"
no
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# [ "$aa" == "bb" ] && echo "yes" || echo "no"
no
6.多重条件判断
判断1 -a 判断2 逻辑与,判断1和判断2都成立,最终的结果才为真
判断1 -o 判断2 逻辑或,判断1和判断2有一个成立,最终的结果就为真
!判断 逻辑非,使原始的判断式取反
[root@localhost ~]# [ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"
no
[root@localhost ~]# [ -n "$aa" -a "$aa" -gt 10 ] && echo "yes" || echo "no"
yes
#判断变量aa是否有值,同时判断变量aa的是否大于23,因为变量aa的值不大于23,所以虽然第一个判断值为真,返回的结果也是假