shell常用命令之自动调用、diff、cut、sort、uniq、test、tr

描述性语言:C、Java,调用底层main函数
解释性语言:需要一个解释器翻译,shell
脚本和 C、Java 等描述性语言的区别

脚本是解释性语言(命令用解释器解释),运行效率低;开发过程较为简单;
C、Java等描述性语言是将动作描述给系统,运行速率较高;具有创造性,需要开发软件去编译,编译是一个将描述性语言翻译成机器可以读懂的语言过程;

shell

shell也是操作系统中的一个软件 它包在linux内核的外面,为用户和内核之间的交互提供了一个接口
系统中的命令用shell去解释shell接收系统回应的输出并显示其到屏幕中
bash = GNU Bourne - Again Shell

在这里插入图片描述

什么是shell脚本
脚本是一种解释性语言
用脚本判定命令的执行条件
用脚本来实现动作的批量执行

如何创建新的shell脚本

vim script.sh    ##用vim编写脚本
#!/bin/bash      ##脚本使用的解释器,通常用幻数“#!”指定
#Author          ##脚本作者
#Date            ##脚本创作时间
#Mail            ##作者联系方式
#Version         ##脚本的版本

执行脚本的方式

chmod +x file.sh
source file.sh
 ./file.sh      绝对路径
 sh file.sh     直接执行

source 不会打开一个新的shell,使用当前运行环境
脚本的调试

vim script.sh      ##shell脚本必须有x权限
sh -x scropt.sh    ##使用于所有shell脚本

#!/bin/bash
运行环境(幻数)
没有执行权限时
掠过幻数

实验一:
将/etc/下以.conf结尾的文件备份到/mnt/backup下,并将其后缀文件名改为当天时间
菜鸟版本:

vim test.sh      ##编辑脚本
sh test.sh      ##运行脚本
ls /mnt/backup

在这里插入图片描述
进阶版本
在这里插入图片描述
实验二:
如何自动调用

vim /etc/vimrc

在这里插入图片描述
编辑map到endfunction的内容
在这里插入图片描述
编辑一个新的file.sh测试
按F5直接调用

在这里插入图片描述
当新建.sh 、.script结尾的文件时,自动调用
先注释掉67行手动添加,编辑68行

ButNewFile *.sh,*.script exec ":call WESTOS()"

在这里插入图片描述

在这里插入图片描述

diff命令

1.diff命令是用来比较两个文件或目录的不同
2.diff在比较文件过程中结果读取方式

[num1,nm2][a|c|d][num3,num4], 
nmu1,num2表示在第一个文件中的行数,num3,num4表示第二个文件中的行数

diff中常用的参数

-b或--ignore-space-change  不检查空格字符的不同
-B或--ignore-blank-lines   不检查空白行
-c                         显示全部内文,并标出不同之处
-i或--ignore-case          不检查大小写的不同
-p                          若比较的文件为C语言的程序码文件时,显示差异所在的函数名称;
-q或--brief                 仅显示有无差异,不显示详细的信息
-r或--recursive             比较子目录中的文件
-u                          以合并的方式来显示文件内容的不同

diff命令的使用

   [num1,num2][a | c | d][num3,num4]
    num1,num2 表示在第一个文件中的行数;
    a 表示 添加 ——add;
    c 表示 更改 ——change;
    d 表示 删除 ——delete;
    < 表示 第一个文件中的内容
    > 表示 第二个文件中的内容
    num3,num4表示在第二个文件中的行数

打补丁

yum install patch -y
cat test                        ##test=hello
cat test1                       ##test1=hello world
diff test test1                 比较两个文件的不同
diff -u test test1 > test.path  把第一文件与第二个文件的不同生成补丁导入test.path
patch test test1.path           打补丁,使test与test1相同

注意:如果想要保留原文件内容,执行命令:
patch -b test test.path
生成.orig文件,即原来文件内容

cut命令多用与字符截取

cut -d                       指定分隔符
cut -f  1,7|1-7              指定截取的列
cut -c  1,4|1-4              指定截取的字符位置
cut -d : -f 1 /etc/passwd    截取passwd的第一列(以:为分隔符)
cut -d : -f 1,7 /etc/passwd  截取passwd的第一列和第七列
cut -d : -f 1-3 /etc/passwd  截取passwd的第一列到第三列

实验:编写脚本显示本机ip:
方法一:
在这里插入图片描述
方法二:
在这里插入图片描述

实验:显示本机用户名
在这里插入图片描述

sort
多用于字符排序

 sort -n        纯数字排序
 sort -r        倒序
 sort -u        去掉重复数字
 sort -o        输出到指定文件中
 sort -t        指定分隔符
 sort -k        指定要排序的列

在这里插入图片描述

uniq
对重复字符做相应的处理

uniq -u     显示唯一的行
uniq -d     显示重复的行
uniq -c     每行显示一次并统计重复次数

test
test命令和[ ]等同

test “A"=="b"等同与 [ "A"=="B” ]  ##中括号两头有空格

(1)A=B

eq仅限数字,=应用万物

 [ "$A" = "$B" ]
 [ "$A" -eq "$B" ]
 [ "$a" = "$b"] && echo yes || echo no
 test "$a" = "$b" && echo yes || echo no

在这里插入图片描述

(2)A!=B

 [ "$A" != "$B" ]           
 [ "$A" -ne "$B" ]

(3)A<=B

 [ "$A" -le "$B" ]   

(4)A<B

 [ "$A" -lt "$B" ]

A>=B

 [ "$A" -ge "$B" ]

(6)A>B

 [ "$A" -gt "$B" ]  

A!=B且A>B

 [ "$A" -ne "$B" -a "$A" -gt "$B" ]

(8)A!=B或A>B

 [ "$A" -ne "$B" -o "$A" -gt "$B" ]

9)判断A是为空

 [ -z "$A" ]   

实验:判断数字是否在10以内
在这里插入图片描述
测试
在这里插入图片描述

(10)判断A是不为空

  [ -n "$A" ]  

(11)判断两个文件为硬链接

  [ "file1" -ef "file2" ]       
  [ "/mnt/file" -ef "/mnt/file1" ]&&echo yes ||echo no

12)判断file1比file2时间迟

[ "file1" -ot "file2" ] 
[ "/mnt/file" -ot "/mnt/file1" ]&& echo yes || echo no 

(13)判断file1比file2时间早

[ "file1" -nt "file2" ] 
[ "/mnt/file" -nt "/mnt/file1" ]&& echo yes || echo no

一个节点对应两个数据区域
inode节点相同

14)判断文件是否存在

  [ -e "file" ]  

(15)判断该文件是否是普通文件

  [ -f "file" ]

(16)判断该文件是否是套接字

  [ -S "file" ]

(17)判断该文件是否是块设备

  [ -b "file" ]

(18)判断该文件是否是目录

  [ -d "file" ]

(19)判断该文件是否是字符设备

  [ -c "file" ]

20 软链接

  [ -L "file" ]

实验:检测输入的名称类型
在这里插入图片描述
测试
在这里插入图片描述
tr
大小写字母转换

在脚本中不区分大小写时使用

tr ‘A-Z’ ‘a-z’ ##将大写字母转换成小写字母

{ } 表示其中的内容属于某个程序
( ) 表示其中的内容属于一个整体

实验:连接其他主机,接通显示up,不通显示down
-c1表示连接次数为1次
-w表示连接延迟时间1秒
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44416500/article/details/87929307