初识shell——shell中常用的基本命令

shell理解

shell实质是一个解释器,我们所说的shell脚本就是运行在shell环境中能够按我们的意图去运行相应程序的一个文本记录,其中记录的是我们想让它做的事件,想做的事件可以用C、Python、Java等语言去开发,以下用的是Linux的命令去开发,让命令直接运行在shell中,即shell脚本

1.diff

基本用法:逐行对比不同
具体用法可用man diff查看

输出信息:
[num1,num2][a|c|d][num3,num4]
num1,num2 		#第一个文件中的行
a 				#添加
c 				#更改
d 				#删除 
< 				#第一个文件中的内容
> 				#第二个文件中的内容
num3,num4 		#第二个文件中的行

常用参数:
-b 				#忽略空格
-B 				#忽略空行
-i 				#忽略大小写
-c 				#显示文件所有内容并标识不同
-r 				#对比目录 
-u 				#合并输出

对比不同
法一:可以直接使用vimdiff命令,不同的地方会高亮显示出来,如下图:
在这里插入图片描述
在这里插入图片描述
法二:使用diff命令,如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-u:合并输出,常用来输出补丁文件,打补丁的时候,文件未变的部分是不会动的,只会更改变了的部分,能够提高文件更新的速度。
在这里插入图片描述

2.patch

patch 原文件 补丁文件
	-b 				#备份原文件

打补丁时需要先安装补丁软件,yum install patch
在这里插入图片描述

3.cut

主要用来截取数据

cut 
	-d : 	#指定:为分隔符
	-f 		#指定显示的列 5第五列| 3,5 3和5列|3-5 3到5列|5- 第五列以后|-5 到第五列
	-c 		#指定截取的字符(数字用法同-f) 
练习:
ifconfig 网卡 可以显示此网卡的信息
显示信息中包含此网卡使用的ip地址
请用命令过滤此ip并在输出时只显示ip,其他信息不显示
参考答案:
(1). ifconfig ens160 | head -n 2 | tail -n 1|cut -c 14-26
(2). ifconfig ens160 | head -n 2 | tail -n 1|cut -d ' ' -f 10
(3). ifconfig ens160 | awk '/inet\>/{print $2}'
前三种方法单纯的输出ip,没有考虑到不输网卡时的清况
(4). 脚本编写
vim  showip.sh
#!/bin/bash
[ -z "$1" ] && {
	echo "please enter interface name"
	exit
}
ifconfig $1 &> /dev/null || {
	echo "$1 is not found!"
	exit
}
ifconfig $1 | head -n 2 | tail -n 1 | cut -d " " -f 10

用法示例:
在这里插入图片描述
在这里插入图片描述
练习示例:
在这里插入图片描述

4.sort

sort
-n 		#纯数字排序
-r 		#倒叙
-u 		#去掉重复 
-o 		#输出到指定文件
-t 		#指定分隔符
-k 		#指定排序的列
练习:
ls -l 目录 可以显示目录中所有文件案的属性
请按照文件大小进行排序并找出最大的2个文件并显示其名称
参考答案:
(1). ls -l| sort -t  " " -k 5 -n|tail -n 2
(2). ls -S | head -n 2

在这里插入图片描述
在这里插入图片描述
练习:
在这里插入图片描述

5.uniq

-c 		#合并重复的并统计重复个数
-d 		#显示重复的行
-u		#显示唯一的行

在这里插入图片描述
在这里插入图片描述

6.tr

tr 'a-z' 'A-Z' 		#小写转大写
tr 'A-Z' 'a-z' 		#大写转小写

在这里插入图片描述

7.test

作用:对比

test = [] 		#[]就相当于test命令
"test $a = $b" = [ "$a" = "$b" ]

test数字对比
 =		#等于
!=		#不等于
-eq 	#等于
-ne 	#不等于
-le 	#小于等于
-lt 	#小于
-ge 	#大于等于
-gt 	#大于

test的条件关系 
-a 		#并且
-o 		#或者

test对空的判定
-n 		#nozero 判定内容不为空
-z 		#zero 判定内容为空
 
test对于文件的判定
-ef 	#文件节点号是否一致(硬链接),即是否是同一个文件
-nt 	#文件1是不是比文件2新 
-ot 	#文件1是不是比文件2老 
-d 		#类型是不是目录 
-S 		#套接字 
-L 		#文件软链接
-e 		#文件是否存在
-f 		#普通文件
-b 		#块设备
-c 		#字符设备

练习:
编写脚本完成以下条件
file_check.sh 在执行时
如果脚本后未指定检测文件报错“未指定检测文件,请指定”
如果脚本后指定文件不存在报错“此文件不存在”
当文件存在时请检测文件类型并显示到输出中
参考答案
(1).脚本一
注意该方法中,对于链接的判定必须放到对于文件的判定之前
#!/bin/bash
[ -z "$1" ] && {
	echo "please enter filename!"
	exit
}
[ -e "$1" ] || {
	echo "$1 is not exist !"
	exit
} 
[ -L "$1" ] && {
	echo "$1 is a link"
	exit
} 
[ -f "$1" ] && {
	echo "$1 is a common file!" 
	exit
}
[ -d "$1" ] && { 
	echo "$1 is a directory!"
	exit
}
(2).脚本二
注意该方法没有顺序要求,但是需要将后面判定条件都执行一遍,效率没有脚本一的高
#!/bin/bash
[ -z "$1" ] && {
	echo "please enter filename!"
	exit
}
[ -e "$1" ] || {
	echo "$1 is not exist !"
	exit
}
TYPE=$(ls -ld $1 | cut -c 1)
#echo $TYPE
[ "$TYPE" = "-" ] && echo $1 is a common file
[ "$TYPE" = "l" ] && echo $1 is a link
[ "$TYPE" = "s" ] && echo $1 is a socket
[ "$TYPE" = "d" ] && echo $1 is a directory
[ "$TYPE" = "c" ] && echo $1 is a char
[ "$TYPE" = "b" ] && echo $1 is a block

在这里插入图片描述
test数字对比:
在这里插入图片描述
test的条件关系:
在这里插入图片描述
test对空的判定:
在这里插入图片描述
test对文件的判定:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.&& 和 ||

&& 符合条件作动作
|| 不符合条件作动作

在这里插入图片描述
结束!!!

猜你喜欢

转载自blog.csdn.net/weixin_46138661/article/details/105336834