shell的常用基础命令
一、diff 文件比较
1、基本用法:
diff [options] files/directorys
输出信息:
[num1,num2][a|c|d][num3,num4]
num1,num2 | 第一个文件中的行 |
---|---|
a | 添加 |
c | 更改 |
d | 删除 |
< | 第一个文件中的内容 |
> | 第二个文件中的内容 |
举例1:
ck1内容
ck2内容
比较显示
据例2:
ck1内容
ck2
注意:<后代表第一个文件的内容,>后代表第二个文件的内容
2、高级用法参数
常用参数:
-b | 忽略空格 |
---|---|
-B | 忽略空行 |
-i | 忽略大小写 |
-c | 显示文件所有内容并标示不同 |
-r | 对比目录 |
-u | 合并输出 |
举例1:
ck1
ck2
忽略大小写测试:
举例2:
二、patch
1、安装包
dnf install patch -y
2、基本使用方法
patch | 原文件 补丁文件 |
---|---|
patch -b | 原文件 补丁文件 #获得备份原文件 |
三、cut
1、基本使用
cut | 解释 |
---|---|
-d : | 指定:为分隔符 |
-f | 指定显示的列 5第五列。 3,5 3和5列。3-5 3到5列。5- 第五列以后。-5 到第五列 |
-c | 指定截取的字符(数字用法同-f) |
举例
将/etc/passwd文件的前10行导入到文本hhh里面,内容如下
以冒号为分割符号,显示前面的第1列
以冒号为分割符号,显示第1,第3,第5列
以冒号为分割符号,显示第1到第5列
显示1到4个字符
2、例题:
1、ifconfig 网卡 可以显示此网卡的信息
2、显示信息中包含此网卡使用的ip地址
3、请用命令过滤此ip并在输出时只显示ip其他信息不显示
ifconfig enpls0 |head -n 2|tail -n 1|awk '{print $2}' ##awk '{print $2}'以空格为分割符输出第2列的数据
4、sort
1、基本使用方法
sort | 解释说明 |
---|---|
-n | 纯数字排序 |
-r | 倒叙 |
-u | 去掉重复 |
-o | 输出到指定文件 |
-t | 指定分隔符 |
-k | 指定排序的列 |
新建一个文件,里面每行写数字
此时直接使用sort对文件进行排序,得到的是以首个字符为排序准则的排序结果,这是不对的。
需要使用-n参数对文件进行纯数字排序
2、例题
找出能登陆系统用户中UID最大的用户,并显示其名称
cat /etc/passwd|grep bash |sort -t : -k 3 -rn|tail -n 1|cut -d : -f 1 ##对纯数字排序时要加-n或者-rn。
5.uniq
1、基本说明
uniq | 解释 |
---|---|
-c | 合并重复并统计重复个数 |
-d | 显示重复的行 |
-u | 显示唯一的行 |
采用上一个实验文件,进行测试
分别合并重复并统计重复个数,显示重复的行,显示唯一的行
2、例题
统计下列此数值出现最多的,并输出次数
6、tr
1、基本用法
tr | 解释 |
---|---|
tr “a-z“ ”A-Z“ | 小写转大写 |
tr “A-Z’“ ”a-z” | 大写转小写 |
2、例题
将下列内容的全部换为大写
7、test
1、 test数字对比
test = [ ] | [ ]和test的意思一样 |
---|---|
!= | 表示否定 |
-eq | 等于 |
-ne | 不等于 |
-le | 小于等于 |
-lt | 小于 |
-ge | 大于等于 |
-gt | 大于 |
举例
注意在判断时变量前要加$符并用“”引起来(如果是数字只需要用“”引起来)
test "$a" = "$b" 和[ "$a"= "$b" ] 是相同的含义
[root@service ~] a=1
[root@service ~] b=2
[root@service ~]# test "$a" = "$b" && echo yes || echo no
no
[root@service ~]# [ "$a" = "$b" ] && echo yes || echo no
no
[root@service ~]# [ "$a" != "$b" ] && echo yes || echo no
yes
[root@service ~]# [ "$a" -ne "$b" ] && echo yes || echo no
yes
[root@service ~]# [ "$a" -le "$b" ] && echo yes || echo no
yes
[root@service ~]# [ "$a" -ge "$b" ] && echo yes || echo no
no
[root@service ~]# [ "$a" -gt "$b" ] && echo yes || echo no
no
记得取消a和b的数值
unset a
unset b
2、test对空的判定
-n | nozero 判定内容不为空 |
---|---|
-z | zero 判定内容为空 |
3、test的条件关系
-a | 并且 |
---|---|
-o | 或者 |
举例
1、判定a的值为空时输出yes
[root@service ~]# unset a 取消a的赋值
[root@service ~]# test -z $a && echo yes || echo no
yes
2、当a的值为为空,且b的值等于1时输出yes
4、test对于文件的判定
ef | 文件节点号是否一致(硬链) |
---|---|
-nt | 文件1是不是比文件2新 |
-ot | 文件1是不是比文件2老 |
-d | 目录 |
-S | 套结字 |
-L | 软连接 |
-e | 存在 |
-f | 普通文件 |
-b | 快设备 |
-c | 字符设备 |
[root@service ~] [ fileold -ef filenew ] && echo yes || echo no
no
[root@service ~] [ fileold -ot filenew ] && echo yes || echo no
yes
[root@service ~] [ fileold -nt filenew ] && echo yes || echo no
no
[root@service ~] [ -d filenew ] && echo yes || echo no
no
[root@service ~] [ -S filenew ] && echo yes || echo no
no
[root@service ~] [ -L filenew ] && echo yes || echo no
no
[root@service ~] [ -e filenew ] && echo yes || echo no
yes
[root@service ~] [ -f filenew ] && echo yes || echo no
yes
[root@service ~] [ -b filenew ] && echo yes || echo no
no
5、例题:
编写脚本,判断文件的类型。
1,如果后面没有文件名字输出“please input check file !!“
2,如果文件不存在输出“文件 is not exit !!"
3,其他情况则输出文件的类型
注意先后顺序,软连接也是目录,因此的先判定软连接。除此之外如果是文件的,那么判定总是在最后,效率较低,后面会选择case语句进行优化
8、&& ||
&&
符合条件做动作
||
不符合条件作动作
[root@service ~] id westos &> /etc/null && echo yes || echo no 系统会自动判断操作成功与否
yes
例题:
编写一个脚本,使ping的时候,能联通显示“IP is up",不能联通的时显示”IP is down"。