LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令可以由字母 数字 下划线组成 不能以数字开头 不能是关键字 见名知意

大家好,欢迎来到IT知识分享网。

文章目录

前言

一、shell基础知识

1、shell概念

2、Shell的功能

接收:用户命令

调用:相应的应用程序

解释并交给:内核去处理

返还:内核处理结果

3、Shell种类(了解)

3.1、MS-DOS

3.2、Windows的Shell

3.3、UNIX的Shell

sh(Bourne Shell)

bash(Bourne Again Shell)

4、Shell调用命令

4.1、查看shell命令

1)chsh -l命令:查看系统可用的Shell

2)cat 命令:查看系统自带的shells文件

2)echo $SHELL命令:查看当前用户使用的Shell

4.2、chsh -s命令:永久更改用户登录的Shell

4.3、调用shell执行命令

1)bash -c命令:调用bash

2)sh -c命令:调用sh命令

4.4、【#!】:Shell命令行解释器,声明该脚本是Shell脚本

4.5、Shell脚本的基本写法

1)创建后缀名为sh的文件

2)脚本编写

第一步:【#!】声明该脚本用什么解释器来执行

第二步:对脚本的基本信息的描述(通常简写,无强制规定)

第三步:脚本的具体内容(Linux基本命令,脚本需要执行的命令)

3)脚本运行

脚本运行的两种情况:

直接通过命令解释器就无需添加执行权限共享父进程执行法:source test02.sh  或者 .test02.sh

独立子进程执行法: bash test.sh       或者   sh test.sh

需要添加执行权限(x)才能进行脚本运行相对路径绝对路径

4)shell脚本中的引号

双引号

单引号

5、Shell变量

5.1、概念(了解)

5.2、变量类型

举例:

1)环境变量的相关命令

env命令:查看当前用户的环境变量

set命令:查询当前用户的所有变量(临时变量与环境变量)

export命令:将当前变量变成环境变量

2)内置变量的相关符号

3)用户环境变量配置文件

5.3、定义变量规则

1)命名规则

2)定义方式

5.4、set命令:查看变量

5.5、unset命令:删除变量

5.6、特殊变量(数组变量)

1)概念

2)定义数组

3)查看数组中某个元素值

4)数组的遍历

5)查看数组中全部元素的下标以及数组中元素的总个数

6)添加元素

7)unset命令:删除数组元素

二、Shell辅助命令 

1、标准输入输出及重定向

1.1、标准输入输出概念

1.2、echo命令:将指定内容输出到屏幕(标准输出)

常用选项举例

其他选项:修改输出字体颜色

1.3、标准输出重定向

1)概念

2)分类

3)符号>和>>、&

>符号表示覆盖式重定向

>>表示追加式重定向

&符号表示1和2

4)应用场景

1.4、标准输入重定向

1)概念

2)符号<和<<

<符号表示覆盖式重定向

<<符号表示追加式重定向

1.5、管道符| 与 xargs命令

1)管道符|

2)xargs命令

作用

举例

2、grep命令和正则的使用

2.1、grep命令

1)功能

2)语法

3)选项

2.2、正则表达式

1)bash通配符

2)基本正则元字符(常用)

3)扩展正则元字符(常用)

4)实用案例

1、打印过滤掉注释行和空白行后的内容

2、打印过滤出的IP地址

3、查看过滤出系统中所有uid大于等于1000的普通用户的信息

4、查找本地yum源中以pcre开头的软件包

5、查找本机安装的所有以a开头的软件

6、查找安全日志secure中关于failed和error的失败和错误的信息

7、过滤出行首单词

8、过滤出行尾单词

$匹配行尾

9、过滤任意个字符

一个点代表一个字符​编辑

10、过滤磁盘空间

3、shell辅助命令

3.1、sort命令:排序

命令选项

3.2、uniq命令:去重

1)作用

2)命令选项

3.3、wc命令:统计

1)作用

2)命令选项

3.4、cut命令:对文件切割

1)功能

2)语法

3)常用选项

扩展:top命令:查看系统信息​编辑

3.5、tr命令:替换命令

1)功能

2)语法

3)常用选项

3.6、tee命令:类似于重定向

1)功能

2)语法

3)常用选项

3.7、watch命令:监控输出结果

1)功能

2)语法

3)常用选项

查看文件有没有在变化

3.8、sleep命令

1)功能

2)举例

3.9、wait命令

1)功能

2)举例

3.10、read命令

1)功能

2)常用选项

3.11、timeout命令

1)功能

2)语法

3)常用选项

3.12、dirname命令

1)功能

2)语法

3.13、basename命令

1)功能

2)语法

三、Shell流程控制语句

1、shell的算数计算方法

 1.1、算数运算符

1)基础运算符

2)shell脚本常用的运算符

1.2、整数计算

1.3、bc命令:小数计算

交互式bc命令

非交互式bc命令

2、shell的条件判断使用方法

test命令:用于判断表达式是否成立,成立返回0,不成立则返回其他数字。

1)文件判断

格式:[ 操作符  文件或目录 ]

常用的测试操作符

2)判断数值大小

格式2:[ 整数1 操作符  整数2 ]

常用的测试操作符

3)判断字符串

格式:【 字符串1 操作符  字符串2】 或者 :【 操作符  字符串 】

常用的测试操作符

4)逻辑操作(多条件判断)和命令连接符(;号和 && 和 || )

格式:[ 条件表达式1 逻辑操作符  条件表达式2 ] 或者 :[ 逻辑操作符  条件表达式 ]

命令连接符(;号和 && 和 || )

3、shell的流程控制语句

3.1、if语句

1)单分支语句

概念

语法格式

举例

2)双分支语句

概念

语法格式

举例

3)多分支语句

概念

语法格式

案例

判断分数

3.2、case语句

1)概念

2)工作流程

3)语法格式

案例

访问apache网站

 3.3、if和case的区别

四、Shell循环语句

1、shell循环语句

1.1、for循环语句

1)流程图

2)语法格式

格式一:

格式二:

 

小应用:批量创建用户​编辑

变形语句举例:

1.2、while循环语句

语法格式​编辑

举例

1.3、unit循环语句

语法格式

举例

1.4、循环控制语句

1)exit命令

举例

2)break命令

举例

3)continue命令

举例

1.5、随机数$RANDOM

举例

实例1:获取随机电话号码

实例2:随机抽奖

2、嵌套循环语句与函数

2.1、嵌套循环

举例1

举例2

 举例3 九九乘法表

 举例4 达到要求的全部文件重命名添加后缀名

2.2、shell函数

函数定义的语法

语法一和语法二

举例

3、案例练习

案例1 ping网段

案例2:整数求和

五、文本处理sed与awk命令

1、sed命令的使用

1.1、sed简介

1.2、sed和vi的区别

1.3、sed和awk的区别

1.4、sed工作原理图

1.5、sed的工作原理简介

1.6、sed的优点

(1)Sed不会导致内存不足

(2)Sed是一个<非交互式>的<字符流编辑器> 

(3)Sed不是在源输入上直接进行处理的。

1.7、sed的基本语法

(1)sed的语法结构

(2)sed的常用选项

(3)地址定位(模式匹配)

1)空模式

2)用行号进行地址地位

输出单独行

输出范围行

输出间隔行

3)以正则地址定位

(4)sed常用指令(子命令动作)

(6)使用示例

2、awd命令的使用

2.1、awk命令概述

2.2、awk与sed、grep的比较

2.3、awk工作流程

2.4、awk语法格式

1)组成结构

2)语法:

3)常用选项

4)工作模式

5)awk内部变量

实操

2.5、awk命令

1)输出指定行(类似sed命令的p指令)

2)输出指定字符(列)

3)awk的操作符

4)BEGIN和END的使用

3、综合案例

案例1操作获取inet中ip地址

方法一 cut命令:对文件切割​编辑

 方法二:使用awk命令 此方法比方法一简洁

 案例2 监控多台服务器的磁盘使用情况…….

案例3  查看日志…… wtmp里面是有所有登录过服务器的IP

案例4 猜数字游戏

总结


前言

本章介绍LinuxShell知识点,以及Shell命令操作使用,学习LinuxShell编程前需要掌握Linux的基础命令。


提示:以下是本篇文章正文内容,下面案例可供参考

一、shell基础知识

1、shell概念

Shell的英文单词是外壳,Shell是一类用C语言编写的命令行解释器程序的统称,同时也是一个脚本编程语言,俗称Sell编程。

它是用户与内核交互的桥梁,Shell对操作者屏蔽了内核的处理。

简单来说Shell就相当于是一个翻译官,我们编写的代码,内核看不懂需要Shell进行翻译才能看懂,同理,内核发送给我们的信息我们用户也看不懂,是Shell翻译管在中间给翻译成了我们可以看懂的代码。

LinuxShell编程1———shell基础命令

2、Shell的功能

  • 接收:用户命令

  • 调用:相应的应用程序

  • 解释并交给:内核去处理

  • 返还:内核处理结果

3、Shell种类(了解)

3.1、MS-DOS

本身就是一个Shell

3.2、Windows的Shell

Windows Explorer(图形化)、cmd(命令行)

3.3、UNIX的Shell

sh、bash、ksh等等(平时我们所说的Shell,多指UNIX的Shell)

  • sh(Bourne Shell)

    sh是一个遵循Unix POSIX标准的Shell程序。 sh是所有其他Unix Shel的基础。 sh的可移植性最高。

  • bash(Bourne Again Shell)

    bash是sh的增强版,是用来替代sh的,它兼容sh,同时也融入了ksh和csh的有用功能,bash是大多数Linux系统的默认Shell。

shell种类
类别说明实例(使用ll命令查看)

/bin/sh

是bash shell的一个快捷方式

LinuxShell编程1———shell基础命令

/bin/bash

bash shell是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能。

LinuxShell编程1———shell基础命令

/sbin/nologin

表示非交互,该用户不能登录操作系统。

LinuxShell编程1———shell基础命令

/bin/dash

小巧,高效,功能相比少一些。

我这的系统没有该shell种类

/bin/tcsh

是csh的增强版,完全兼容csh。

LinuxShell编程1———shell基础命令

/bin/csh

具有C语言风格的一种shell,具有许多特性,但也有一些缺陷。

LinuxShell编程1———shell基础命令

4、Shell调用命令

4.1、查看shell命令

1)chsh -l命令:查看系统可用的Shell

LinuxShell编程1———shell基础命令

2)cat 命令:查看系统自带的shells文件

LinuxShell编程1———shell基础命令

2)echo $SHELL命令:查看当前用户使用的Shell

LinuxShell编程1———shell基础命令

4.2、chsh -s命令:永久更改用户登录的Shell

注意:要更改的Shell类型必须是系统Shell文件里面有的Shell类型。

LinuxShell编程1———shell基础命令

4.3、调用shell执行命令

1)bash -c命令:调用bash
2)sh -c命令:调用sh命令

LinuxShell编程1———shell基础命令

4.4、【#!】:Shell命令行解释器,声明该脚本是Shell脚本

#!/bin/bash

声明:在<本Shell脚本>中,针对【#!行】之后的<行>,开始使用/bin/bash命令行解释器。

【#!】用于声明本脚本需要采用的命令行解释器

LinuxShell编程1———shell基础命令

4.5、Shell脚本的基本写法

1)创建后缀名为sh的文件

#vim test.sh

LinuxShell编程1———shell基础命令

2)脚本编写
第一步:【#!】声明该脚本用什么解释器来执行
第二步:对脚本的基本信息的描述(通常简写,无强制规定)
第三步:脚本的具体内容(Linux基本命令,脚本需要执行的命令)

LinuxShell编程1———shell基础命令

3)脚本运行
脚本运行的两种情况:
  • 直接通过命令解释器就无需添加执行权限
    共享父进程执行法:source test02.sh  或者 .test02.sh
  • 独立子进程执行法: bash test.sh       或者   sh test.sh

LinuxShell编程1———shell基础命令

  • 需要添加执行权限(x)才能进行脚本运行
    相对路径
    绝对路径

在下面内置变量的相关符号举例图5中可以看到在添加执行权限,在绝对路径下使用共享父进程执行法执行脚本。

4)shell脚本中的引号
  • 双引号
    • LinuxShell编程1———shell基础命令

    “”是<部分引用>,可以识别<特殊符号>
    可以识别${…}变量引用符号

  • 单引号
    • 单引号:中间值当成字符串进行输出LinuxShell编程1———shell基础命令

    ‘’是<完全引用>,不能识别<特殊符号>

5、Shell变量

5.1、概念(了解)

一个进程中用于存储数据的内存实体,它对应着一个内存存储空间。

man帮助手册用于描述命令的帮助信息。例如#man bash

5.2、变量类型

变量类型
类型 概念 作用域 定义方法

环境变量

当前进程有效,并且能够被子进程调用。

当前进程及子进程生效,传子不传父,所有子进程均可继承 export var01=值

环境变量和本地变量都是要在当前进程(当前终端)中才能生效,如果换了另一个终端就它们是无效的。

本地变量

当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。

当前进程生效,不可继承 var01=值

内置变量

系统变量,shell本身已经固定好了它的名字和作用。

/

/

/

举例:

环境变量

定义环境变量操作

本地变量

LinuxShell编程1———shell基础命令

1)环境变量的相关命令
  • env命令:查看当前用户的环境变量
  • set命令:查询当前用户的所有变量(临时变量与环境变量)
  • export命令:将当前变量变成环境变量

    永久生效
    /etc/profile是系统文件,对所有用户生效,在系统启动的时候会执行/etc/profile里面所有的变量。/etc/profile里面都是脚本
    #vim /etc/profile
    进入此文件里面添加变量
    export name=xq



LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

2)内置变量的相关符号
内置变量的相关符号
符号 说明 举例

$?

上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错。

#echo $?
(通过$?来进行一个判断,判断上一条命令的执行状态正确执行还是错误执行。)

图1

$$

图2

$!

后台运行的最后一个进程号(当前终端)。

!$

调用最后一条命令历史中的参数。

图3

!!

调用最后一条历史命令。

图4

$#

脚本后面接的参数的个数。

图5
图5

$*

脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开。

$@

脚本后面所有参数,参数是独立的,也是全部输出。

$0

当前执行是进程/程序名 echo $0

$1~$9

位置参数变量

$(10)~$(n)

扩展位置参数变量 第10个位置变量必须用{}大括号括起来。

3)用户环境变量配置文件

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

5.3、定义变量规则

1)命名规则

可以由字母、数字、下划线组成, 不能以数字开头, 不能是关键字,见名知意。

2)定义方式
  • 调用(提取)变量:
    $变量名 或
    ${变量名}

LinuxShell编程1———shell基础命令

5.4、set命令:查看变量

LinuxShell编程1———shell基础命令

5.5、unset命令:删除变量

LinuxShell编程1———shell基础命令

5.6、特殊变量(数组变量)

1)概念

LinuxShell编程1———shell基础命令

2)定义数组

Shell数组用括号来表示,元素用空格分割开,
语法格式:
              array_name=(value1 value2 … valuen)

定义数组 :

数组名=(值1 值2 … 值n) 

LinuxShell编程1———shell基础命令

3)查看数组中某个元素值

LinuxShell编程1———shell基础命令

4)数组的遍历

遍历数组全部元素

*和@符号数组遍历:通过数组名遍历出所有元素的值

LinuxShell编程1———shell基础命令

5)查看数组中全部元素的下标以及数组中元素的总个数

LinuxShell编程1———shell基础命令

6)添加元素

LinuxShell编程1———shell基础命令

7)unset命令:删除数组元素

LinuxShell编程1———shell基础命令


二、Shell辅助命令 

1、标准输入输出及重定向

1.1、标准输入输出概念

stdin标准输入:打开终端在键盘上输入的内容就是标准输入。

stdout标准输出:就是在终端显示出来的内容就是标准输出。

1.2、echo命令:将指定内容输出到屏幕(标准输出)

常用选项 说明

-n

输出结果后面没有换行符,也就是不换行

-e

启用转义符\(需要输出特殊符号的时候:\n \t)

\n

换行

\t

横向制表符,有一个type键的长度,一个type键就相当于四个空格

其他选项我们就查手册#man echo或查帮助,查帮助前要先确定echo是内部命令还是外部命令,用type命令查看, 是内部命令我们就用和help echo命令。

LinuxShell编程1———shell基础命令

常用选项举例

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

其他选项:修改输出字体颜色

LinuxShell编程1———shell基础命令

1.3、标准输出重定向

1)概念

是指把本应该输出到屏幕的内容重新导向其他地方,比如导入文件中。 标准输出又分为标准输出和标准错误输出。

2)分类

stdout标准输出:一个命令执行之后的正确结果输出,在输出重定向是用数字1表示,也可以省略不写。

stderr标准错误输出:一个命令执行之后的报错信息输出,在输出重定向是用数字2表示。

3)符号>和>>、&
  • >符号表示覆盖式重定向

覆盖式重定向,把原本输出到终端的内容覆盖到指定文件的文件内容。 该文件可以存在也可以不存在。存在的话直接覆盖内容,不存在的话就会创建文件加覆盖文件内容。

正确输出

LinuxShell编程1———shell基础命令

错误输出: 也就是说命令里面加了2,错误输出命令的错误提示会覆盖文件的内容, 相反正确输出的命令反而不会覆盖文件的内容,因为加了2,就算是正确的输出命令也被认定为错误的输出命令,该命令就不会被执行。

LinuxShell编程1———shell基础命令

  • >>表示追加式重定向

正确输出

LinuxShell编程1———shell基础命令

错误输出: 错误命令会显示在文件内容中,正确的不会显示在文件内容中。

LinuxShell编程1———shell基础命令

  • &符号表示1和2

会将标准输出和标准错误输出的信息,全部重定向输入到指定文件

LinuxShell编程1———shell基础命令

4)应用场景

做MySQL数据监控的时候,不想看到错误的提示消息就会用到输出重定向,把错误输出把它过滤掉只留下正确输出。

1.4、标准输入重定向

1)概念

输入重定向是指把本应该从键盘输入的来源换成从文件或屏幕中的内容进行输入。

2)符号<和<<
  • <符号表示覆盖式重定向

LinuxShell编程1———shell基础命令

  • <<符号表示追加式重定向

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

1.5、管道符| 与 xargs命令

1)管道符|

作用: 将前一个命令的标准输出,作为后一个命令的标准输入。(Linux基础命令知识点有讲过)

LinuxShell编程1———shell基础命令

2)xargs命令
作用

部分命令不支持通过管道符传入的标准输入,可以使用xargs来强制使用管道符传递输入(比如rm,kill等)

举例

rm是不能直接接收管道符前面的标准输入,我们就使用xargs命令

LinuxShell编程1———shell基础命令

2、grep命令和正则的使用

2.1、grep命令

1)功能

筛选过滤出包含<匹配字符串>的<整行>

例如:筛选出以#开头的打印出来LinuxShell编程1———shell基础命令

2)语法

grep [选项]   PATTERN  [FILE….]

PATTERN:就是正则表达式,默认情况下,grep命令使用基本正则

3)选项

-i

表示忽略大小写

LinuxShell编程1———shell基础命令

-E

表示启用<扩展正则>,将模式 PATTERN 作为一个扩展的正则表达式来解释

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

-o

LinuxShell编程1———shell基础命令

-v

表示仅输出<不匹配的数据行> 注意是<不匹配的行>,也就是取反

^和$代表空行LinuxShell编程1———shell基础命令

-B

打印出匹配的行之前的上文 NUM 行。
在相邻的匹配组之间将会打印内容是 — 的一行。
LinuxShell编程1———shell基础命令

-A

 打印出紧随匹配的行之后的下文NUM行。
在相邻的匹配组之间将会打印内容是 — 的一行。
LinuxShell编程1———shell基础命令

-c

显示匹配的<数据行>的<行总数>

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

2.2、正则表达式

1)bash通配符

Bash通配符是Bash Shell自带的

* 表示匹配任意的一个或多个字符

?表示匹配任意的一个字符

[] 表示匹配[xyx]列表中的任意的一个字符

2)基本正则元字符(常用)
^ 匹配:行首
$ 匹配:行尾
. 匹配:任意单个字符
* 匹配:前一个字符出现0次或多次
[] 匹配:括号里的内容任意一字符           例: [a]、[b]
[-] 匹配:括号范围中的任意一个字符       例:[0-9]、[a-Z]
[^] 匹配:括号内以外的内容                      例: [^0-9]、[^a-d]
\{\} 匹配:定义正则分组       例:\(hello\)\(word\)
\{n\] 匹配:前一个字符出现的n次     例:go\{1\}d   ==> good
\{n,\} 匹配:前一个字符最少出现n次      例:ab\{2,\}c   ==>abbbc、abbbbc、abb…c
\{n,m\} 匹配:前一个字符最少出现n次,最多出现m次   例::ab\{1,2\}c   ==>abbc、abbbc
\<或\b 匹配:词首定位符       例:\<he    ==>开头为 he 后面任意的单词
\>或\b 匹配:词尾定位符       例:od\>    ==> 结尾为 od 前任意的单词
\s 匹配:单个空白字符,包含:水平 垂直制表符    例:^\s ==>空白开头
\t 匹配:水平制表符(一个 tab 键的长度)
\ 匹配:转义符,恢复元字符的原义        例:\.      \;
3)扩展正则元字符(常用)

多了?和+,(),个别不同与基本正则元字符,其他一样。

^ 匹配:行首
$ 匹配:行尾
. 匹配:任意单个字符
匹配:前一个字符出现0次或1次
+ 匹配:前一个字符出现1次或多次
* 匹配:前一个字符出现0次或多次
[] 匹配:括号里的内容任意一字符           例: [a]、[b]
[-] 匹配:括号范围中的任意一个字符       例:[0-9]、[a-Z]
[^] 匹配:括号内以外的内容                      例: [^0-9]、[^a-d]
( ) 匹配:定义正则分组        例:(hello)(word)
{n] 匹配:前一个字符出现的n次     例:go{1}d   ==> good
{n,} 匹配:前一个字符最少出现n次      例:ab{2,}c   ==>abbbc、abbbbc、abb…c
{n,m} 匹配:前一个字符最少出现n次,最多出现m次   例::ab{1,2}c   ==>abbc、abbbc
\<或\b 匹配:词首定位符       例:\<he    ==>开头为 he 后面任意的单词
\>或\b 匹配:词尾定位符       例:od\>    ==> 结尾为 od 前任意的单词
\s 匹配:单个空白字符,包含:水平  垂直制表符    例:^\s ==>空白开头
4)实用案例
1、打印过滤掉注释行和空白行后的内容

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

2、打印过滤出的IP地址

LinuxShell编程1———shell基础命令

3、查看过滤出系统中所有uid大于等于1000的普通用户的信息

LinuxShell编程1———shell基础命令

4、查找本地yum源中以pcre开头的软件包

-E代表启用扩展正则

LinuxShell编程1———shell基础命令

5、查找本机安装的所有以a开头的软件

-E代表启用扩展正则

LinuxShell编程1———shell基础命令

6、查找安全日志secure中关于failed和error的失败和错误的信息

LinuxShell编程1———shell基础命令

7、过滤出行首单词

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

8、过滤出行尾单词
$匹配行尾
LinuxShell编程1———shell基础命令
9、过滤任意个字符
一个点代表一个字符LinuxShell编程1———shell基础命令
10、过滤磁盘空间

df -h命令:查看磁盘空间LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

3、shell辅助命令

3.1、sort命令:排序

命令选项

-g

按照通常的数字值顺序排序,暗含-b

-n

按照字符串的数值顺序排序,暗含-b

-r

逆序/降序排序(没有-r默认是:升序)

-f

忽略<字母大小写>

-b

忽略排序字段或关键字中开头的空格

-t

指定分割符 一般和-k结合使用

-k

使用分隔符分隔的第几列

-u

-o

将<排序结果>回写入<原文件>,例如:cat 1.text

LinuxShell编程1———shell基础命令

3.2、uniq命令:去重

1)作用
2)命令选项
-c 统计,在输出行前面加上每行在输入文件中出现的次数。
-d  仅显示重复行。
-u

仅显示不重复的行。

注意:只能对连续的行去重,因此去重前一般需要先排序。

LinuxShell编程1———shell基础命令

3.3、wc命令:统计

wc命令在Linux基础命令中也有过详细介绍。

1)作用

统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

2)命令选项
-c 统计字节数。
-l 统计行数。
-w  统计字数,单词数。

举例:

LinuxShell编程1———shell基础命令

3.4、cut命令:对文件切割

1)功能

将每个文件中每一行的匹配部分(按指定规则截取)打印到标准输出。

2)语法

cut OPTION… [FILE]…

3)常用选项

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

扩展:top命令:查看系统信息LinuxShell编程1———shell基础命令

3.5、tr命令:替换命令

1)功能

tr 命令可以对来自标准输入的字符进行替换、压缩和删除。

2)语法

tr [选项]  字符集1 字符集2

字符集1:指定要转换或者删除的原字符集.。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”。

3)常用选项
-s 替换连续出现的字符
-d 删除字符

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

3.6、tee命令:类似于重定向

1)功能

把 标准输入 的 数据 复制到 每一个 文件 FILE, 同时 送往 标准输出。

2)语法

tee【OFFION】… 【FILE】…

3)常用选项

-a,–append        内容追加到给定的文件,而非覆盖

与重定向的区别: 重定向命令执行后不会在终端上显示内容信息, 而tee命令执行后会在终端上显示内容信息

LinuxShell编程1———shell基础命令

3.7、watch命令:监控输出结果

1)功能

watch命令可以实时全屏监控当前命令执行的动态变化结果。

2)语法

watch  [options]  comman

3)常用选项
-n 每隔几秒刷新一次结果(默认是每隔2秒刷新一次)
-d 高亮显示命令执行结果的变化
-t 隐藏全屏顶端的时间间隔,命令信息

LinuxShell编程1———shell基础命令

查看文件有没有在变化

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

3.8、sleep命令

1)功能

暂停一段时间,时间单位可以是s m h d,默认是s(秒)

2)举例

sleep 10s

3.9、wait命令

1)功能

wait命令是用来阻塞当前进程的执行,直到当前进程的指定子进程或者当前进程的所有子进程返回状态为0,执行结束之后,方才继续执行。

使用wait命令可以在bash脚本的多进程执行模式下,起到一些特殊控制的作用。

2)举例

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

3.10、read命令

1)功能

用于脚本与用户的交互,可以将用户输入的值存入变量。

2)常用选项
-p 设置提示信息
-e 用户输入的时候允许回退
-s 不显示输入的内容(密码输入的时候使用)
-t timeout设置超时时限,单位:秒

LinuxShell编程1———shell基础命令

举例

LinuxShell编程1———shell基础命令

3.11、timeout命令

1)功能

控制命令的执行时长

2)语法

timeout  [OPTION]   N[s|m|d]   command  [参数]…

 N[s|m|d] 设置命令的执行时长为N,默认单位为s秒,还可以是m分钟、h小时、d天

3)常用选项

-s,–signal=SIGNAL

                  TERM/15

                   SIGKILL/9

设置终止命令进程的信号名,默认为TERM信号

        优雅的终止命令的进程(留有时间,非立即,非强制)

         强制的终止命令进程(不留时间,立即执行,只能由管理员发出)

-k,–lill-after =N  设置当第一个终止信号发出N时长之后,如果命令进程仍在运行,则执行SIGKILL强制终止。

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

3.12、dirname命令

1)功能

指令去除文件名中的非目录部分,删除最后一个“\”后面的路径,显示父目录。dirname返回文件所在目录路径,而basename则相反,去掉路径返回最后的文件名。

2)语法

dirname   [选项]   参数

3.13、basename命令

1)功能

指令用于打印文件的基本名称,显示最后的文件名。

2)语法

basename   [选项]  参数

LinuxShell编程1———shell基础命令


三、Shell流程控制语句

1、shell的算数计算方法

 1.1、算数运算符

1)基础运算符
加:+ 减:- 乘:* 除:/
2)shell脚本常用的运算符
&:取余
自增自减
id ++,id–  #变量后增量,变量后减量
LinuxShell编程1———shell基础命令
自增自减
++id,–id   #变量预增量,变量预减量
LinuxShell编程1———shell基础命令

1.2、整数计算

let命令 变量赋值 LinuxShell编程1———shell基础命令
expr命令

expr命令也支持算术运算功能,虽然它的功能不止于此,但是此处我们只使用它进行算术运算,expr命令与let命令相似,也只能进行整数运算。

使用expr命令进行算术运算时,需要注意以下两点:

  • 数值与运算符之间需要用空格隔开,否者无法进行算术运算。
  • 使用expr命令进行乘法运算时,需要将“乘号”转义,否则会报错。

LinuxShell编程1———shell基础命令

使用算数语法$((算数表达式))LinuxShell编程1———shell基础命令
使用算数语法$[算数表达式]LinuxShell编程1———shell基础命令

1.3、bc命令:小数计算

交互式bc命令

LinuxShell编程1———shell基础命令

非交互式bc命令

LinuxShell编程1———shell基础命令

2、shell的条件判断使用方法

test命令:用于判断表达式是否成立,成立返回0,不成立则返回其他数字。

1)文件判断
格式:[ 操作符  文件或目录 ]
常用的测试操作符
常用的测试操作符 说明 举例
-d 用于测试是否是目录 LinuxShell编程1———shell基础命令
-e 测试目录或文件是否存在 LinuxShell编程1———shell基础命令
-f 测试文件是否存在且为普通文件 LinuxShell编程1———shell基础命令
-r 测试当前的用户是否有读的权限 LinuxShell编程1———shell基础命令
-w 测试当前的用户是否有写的权限 LinuxShell编程1———shell基础命令
-x 测试当前的用户是否具有可执行的权限 LinuxShell编程1———shell基础命令
-L 测试是否为链接文件 [ -L  文件或目录 ]
-b 测试是否为块设备文件 [ -b 文件或目录 ]
-c 测试是否为字符型特殊文件 [ -c  文件或目录 ]

有关什么是块设备文件和字符型特殊文件,请看此博主的文章有解释到。关于字符设备文件和块设备文件的区别_块设备文件和字符设备文件-CSDN博客

2)判断数值大小

格式1:test条件表达式

格式2:[ 整数1 操作符  整数2 ]
常用的测试操作符
-eq 等于=
-ne 不等于
-gt 大于>
-lt 小于<
-le

小于等于<=

-ge 大于等于>=

           LinuxShell编程1———shell基础命令

3)判断字符串
格式:【 字符串1 操作符  字符串2】 或者 :【 操作符  字符串 】
常用的测试操作符
-z STRING

#判断:字符串是否为空

LinuxShell编程1———shell基础命令
-n STRING

#判断:字符串是否为非空

LinuxShell编程1———shell基础命令
STRING1  =  STRING2 #判断:两个字符串内容是否相同 LinuxShell编程1———shell基础命令
STRING1 ! =  STRING2 #判断:两个字符串内容是否不同 LinuxShell编程1———shell基础命令
4)逻辑操作(多条件判断)和命令连接符(;号和 && 和 || )
格式:[ 条件表达式1 逻辑操作符  条件表达式2 ] 或者 :[ 逻辑操作符  条件表达式 ]
常用的测试操作符
!EXPR #执行:逻辑取反 LinuxShell编程1———shell基础命令
EXPR1  -a  EXPR2 #执行:逻辑取与 LinuxShell编程1———shell基础命令
EXPR1  -o  EXPR2 #执行:逻辑取或 LinuxShell编程1———shell基础命令

a和o不支持多条件判断,会报错

LinuxShell编程1———shell基础命令

解决方法: && || 逻辑与和逻辑或的多条件写法

LinuxShell编程1———shell基础命令

命令连接符(;号和 && 和 || )

用于连接多条命令,并通过前面命令的执行结果,判断后面命令的执行

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

3、shell的流程控制语句

3.1、if语句

1)单分支语句
  • 概念

单分支if条件语句最为简单,就只有 一个判断条件,如果符合条件则执行某个程序,否则什么事情都不做。

  • 语法格式

LinuxShell编程1———shell基础命令

  • 举例

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

2)双分支语句
  • 概念

在双分支if条件语句中,当条件判断式成立时,则执行某个命令块;当条件判断式不成立时,则执行另一个命令块。

  • 语法格式

LinuxShell编程1———shell基础命令

  • 举例

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

如果不想看到id xq查询用户信息的命令,我们可以把它直接丢进黑洞里面

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

灵活设置,随意查看任何用户是否存在

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

3)多分支语句
  • 概念

在多分支if条件语句中,允许执行多次判断。也就是当条件判断式1成立时,执行命令块1;当条件判断式2成立时,执行命令块2;依次类推,当所有条件不成立时,执行最后的程序。

  • 语法格式

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

  • 案例
判断分数

LinuxShell编程1———shell基础命令

执行脚本

LinuxShell编程1———shell基础命令

如果脚本命令有什么地方写错了,我们检查命令,就用sh -x 来检查脚本执行过程

LinuxShell编程1———shell基础命令

3.2、case语句

1)概念

case语句主要适用于某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列的情况(写脚本服务/工具箱)。它和if语句十分相似,只不过if语句是需要判断多个不同的条件,而case语句只是判断一个变量的不同取值

2)工作流程

首先使用“变量值”与模式1进行比较,若取得相同则执行模式1后的命令序列,直到遇到双分号“;;”后调至esac,表示结束分支。

若与模式1不匹配,则继续与模式2进行比较,若取值相同则执行模式2后的命令序列,直到遇到双分号“;;”后调至esac,表示结束分支。

后面的以此类推…….

若找不到任何匹配的值,则执行默认模式“*)”后的命令序列,直到遇到esac后结束分支。

3)语法格式

LinuxShell编程1———shell基础命令

  • 案例

因为我们后面要用到httpd所以先进行安装

访问apache网站

安装httpd

LinuxShell编程1———shell基础命令

查看安装LinuxShell编程1———shell基础命令

脚本编写

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

查看apache网址LinuxShell编程1———shell基础命令

网页访问LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

 3.3、if和case的区别

LinuxShell编程1———shell基础命令


四、Shell循环语句

1、shell循环语句

1.1、for循环语句

1)流程图

LinuxShell编程1———shell基础命令

2)语法格式
格式一:

算数条件判断for循环(c风格)

()形式

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

格式二:

遍历单词序列for循环

for i in

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令有不知道命令是什么作用的就查man手册。

LinuxShell编程1———shell基础命令
小应用:批量创建用户LinuxShell编程1———shell基础命令
变形语句举例:LinuxShell编程1———shell基础命令
LinuxShell编程1———shell基础命令
LinuxShell编程1———shell基础命令
LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

1.2、while循环语句

重复测试某个条件,主动条件成立则反复执行,相对于for,需要知道循环次数
如果我们只知道停止条件,不知道次数,就需要使用while,直到循环条件不满足。

语法格式
LinuxShell编程1———shell基础命令
举例

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

用if循环语句添加结束语

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

另一种方式结束语 echo

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

死循环方式

LinuxShell编程1———shell基础命令

1.3、unit循环语句

重复测试某个条件,主要条件不成立则反复执行,基本上与while用法和使用场景相同。

语法格式

LinuxShell编程1———shell基础命令

举例

LinuxShell编程1———shell基础命令

while和until都是要先定义变量

LinuxShell编程1———shell基础命令

1.4、循环控制语句

有时我们在脚本中执行循环的过程中,我们需要根据特定的条件来及时的退出循环去执行其他的任务,所以我们要能够对循环进行条件上的控制,shell中exit命令break命令continue命令能帮我们控制循环内部的情况。

1)exit命令

不管出现在循环语句中,还是脚本的其他位置都会直接退出整个脚本,exit命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是0

举例

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

执行脚本,满足退出条件直接退出脚本,包括循环体以外的命令仍然没有执行

LinuxShell编程1———shell基础命令

另一种写法,定义状态码1

LinuxShell编程1———shell基础命令

后面我们可以通过状态码值1来进行判断

LinuxShell编程1———shell基础命令

2)break命令

break命令是退出循环的一个简单方法,可以用break命令来退出任意类型的循环,包括while和until循环。

在shell执行break命令时,它会尝试跳出当前正在执行的循环。如果在内部循环,但需要停止外部循环,break命令接受单个命令行参数值,break n 其中n指定了要跳出的循环层级默认情况下,n为1,表示跳出的是当前的循环。如果你将n设为2,break命令就会停止下一级外部循环。

举例

LinuxShell编程1———shell基础命令

3)continue命令

continue命令可以提前中止某次循环中的命令,但并不会完全终止整个循环。比如提前终止本次循环,进入下一次循环。

举例

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

1.5、随机数$RANDOM

在Linux Shell中,生成随机数是一个常见的需求。无论是在写shell脚本中还是在命令行中,生成随机数都可以帮助我们解决很多问题。在bash shell中,还有一个环境变量$RANDOM,它会在每次访问时生成一个随机数,随机数范围0-32767。
应用:生成指定范围的随机数(取余的方式

举例

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

实例1:获取随机电话号码

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

随机抽取:把文件内容定义数组 定义变量,变量值是获取到的元素个数,索引产生随机的下标,通过随机下标获取一个随机的电话号码

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

实例2:随机抽奖

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

2、嵌套循环语句与函数

2.1、嵌套循环

嵌套循环就是循环语句里面包含其他的循环语句,每次外部循环都会触发内部循环,直至内部循环完成,才接着执行下一次的外部循环。for循环、while循环和until循环可以相互嵌套。

举例1

执行完内循环再执行1次外循环,可以用-x来观察脚本执行过程

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

举例2

内循环执行5次执行一次外循环,内循环做完再做外循环,一共循环5次。

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

 举例3 九九乘法表

在echo里面直接进行计算,两种方式执行结果都是一样的。

LinuxShell编程1———shell基础命令

定义一个result变量来进行计算

LinuxShell编程1———shell基础命令
 举例4 达到要求的全部文件重命名添加后缀名

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

2.2、shell函数

shell函数:将命令序列按格式写在一起,可方便重复使用命令序列。

函数相当于是一段封装的代码,实现某项功能,重复使用代码,简洁代码量

函数定义的语法
语法一和语法二

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

举例

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

$@内置变量,脚本外输的变量值,我们就调用这个函数进行判断。返回值0是服务开启,非0是未开启。

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

修改颜色

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

添加时间

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

3、案例练习

案例1 ping网段

提示用户输入网段(如:192.168.100),然后测试该网络有哪些主机可以ping通,并记录这些主机地址。

window键加r键

LinuxShell编程1———shell基础命令

查看本地的网段ip

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

在编写脚本的时候ping接试试能否ping通

LinuxShell编程1———shell基础命令

执行脚本

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

案例2:整数求和

写脚本用来1加到100的整数求和

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

1到4的整数求和

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

求偶数和

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

求奇数和,就是条件不等于0就可以了。


五、文本处理sed与awk命令

1、sed命令的使用

1.1、sed简介

sed是一个用于:过滤并转换文本行的流编辑器

1.2、sed和vi的区别

sed是非交互式的文本流编辑器,接受input输入字符流,然后过滤并转换,最后输出output输出字符流。

vi算术交互式的文本编辑器。

1.3、sed和awk的区别

sed是一个基于行字符流,执行整行处理的文本处理工具。

awk是一个基于行字符流,精细到列处理的文本处理工具。

1.4、sed工作原理图

一行一行进行匹配处理

LinuxShell编程1———shell基础命令

1.5、sed的工作原理简介

(2)然后:返回到<第(1)步>,继续读取处理<下一行>

(3)直到<所有行>均<读取处理>完毕之后,结束<sed命令>!

1.6、sed的优点

(1)Sed不会导致内存不足

Sed只会缓存<一行的内容>在<模式空间>,这样的好处是:

  • sed可以缓存<大文件>,而不会有任何问题
  • 不像一些编辑器,因为要一次性载入<文件的一大块内容>到<缓存>中,从而导致<内存不足>
(2)Sed是一个<非交互式>的<字符流编辑器> 
(3)Sed不是在源输入上直接进行处理的。

sed 不是在源输入上直接进行处理的,而是先将读入的行放到缓冲区中,对缓冲区中的内容进行处理,处理完毕后,直接将处理结果标准输出到屏幕上,而不会写回<源文件>。除非用sed -i命令将输出重定向到源文件。

1.7、sed的基本语法

(1)sed的语法结构

LinuxShell编程1———shell基础命令

(2)sed的常用选项

LinuxShell编程1———shell基础命令

(3)地址定位(模式匹配)

地址用于决定对哪些行进行编辑。地址形式可以是“数字”、“正则表达式”或“二者结合”。如果没有指定地址,sed将处理输入文件中的所有行。

1)空模式

表示所有的行都执行(以p为指令为例,该指令用于输出)

LinuxShell编程1———shell基础命令

2)用行号进行地址地位
输出单独行

LinuxShell编程1———shell基础命令

输出范围行

LinuxShell编程1———shell基础命令

输出间隔行

LinuxShell编程1———shell基础命令

3)以正则地址定位

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

(4)sed常用指令(子命令动作)

所有的子命令操作默认都不会修改源文件,如果需要修改源文件,则添加-i选项

LinuxShell编程1———shell基础命令

举例:

LinuxShell编程1———shell基础命令

d指令:删除

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

i指令:插入行

a指令:追加行

c指令:替换行

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

注释掉配置文件指定的信息

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

通过-e多条指令进行匹配

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

追加内容 

LinuxShell编程1———shell基础命令

全部内容被替换 

LinuxShell编程1———shell基础命令

(6)使用示例

LinuxShell编程1———shell基础命令

修改selinux状态

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

修改网卡配置文件

在查看网卡配置文件中,我们会发现网卡中没有IP,那是因为我还没有配置。一般来说网卡默认是dhcp获取的IP地址,所以默认是没有IP的。

LinuxShell编程1———shell基础命令

需要配置网卡IP,进入系统配置网卡文件进行配置。

LinuxShell编程1———shell基础命令

后续补充,暂且放一下。😅

2、awd命令的使用

2.1、awk命令概述

AWK是一种解释执行的编程语言,它非常的强大,被设计用来专门处理文本数据。

AWK的名称是由它们设计者的名字缩写而来 ——Afred Aho,Peter Weinberger与Brian Kernighan。

2.2、awk与sed、grep的比较

shell三剑客:sed、awk、grep 必须得掌握

2.3、awk工作流程

AWK执行的流程非常简单:读(read)、执行(Execute)与重复(Repeat) AWK的工作流程图。

LinuxShell编程1———shell基础命令

2.4、awk语法格式

1)组成结构
2)语法:
3)常用选项
-F 定义字段分割符号,默认的分隔符是空格
-v 定义变量并赋值
4)工作模式
  • 行工作模式,读入一行文件,存在”$0″里
  • 使用内置变量FS(字段分隔符)分割一行,存在$1-$100
  • 输出时也是用内置变量OFS,输出该行

OFS默认换行

5)awk内部变量
$0 当前处理行的所有记录
$n 文件中每行以间隔符号分割的不同字段
NF 当前记录的字段数(列数)
$NF 最后一列         $(NF-1)表示倒数第二列
FNR/NR 行号
FS  定义间隔符
OFS 定义输出字段分隔符,默认空格’BEGIN{OFS=“\t”};print $1,$3}’
RS 输入记录分割符,默认换行,一般不更改
ORS 输出记录分割符,默认换行,一般不更改
FILENAME 当前输入的文件名
实操

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

精确到列进行处理

LinuxShell编程1———shell基础命令

NF 记录当前的字段数(列数)

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

以:作为分隔符打印字段数,每一行都是7LinuxShell编程1———shell基础命令

指定列打印

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

NR打印行号

LinuxShell编程1———shell基础命令

FS指定分隔符,默认是空格作为分隔符

LinuxShell编程1———shell基础命令

OFS定义输出字段分隔符,默认空格作为分隔符

LinuxShell编程1———shell基础命令

2.5、awk命令

1)输出指定(类似sed命令的p指令)
  • 全文输出

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

  • 使用行号NR匹配

LinuxShell编程1———shell基础命令

  • 使用正则匹配

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

  • 使用关系运算符

LinuxShell编程1———shell基础命令

使用关系运算符 ,以:作为分隔符,第3个字符等于0的打印出来LinuxShell编程1———shell基础命令

2)输出指定字符(列)
  • 输出单列

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

  • 输出多列

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

  • 输出自定义信息

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

3)awk的操作符
  • 算术运算符

awk支持多种算术运算,常见的如:+、-、*、/、%等LinuxShell编程1———shell基础命令

为什么会打印这么多行呢?因为1.txt文件中有这么多行的内容。

LinuxShell编程1———shell基础命令

不想看到这么多行,只打印一行的话就用END或者BEGIN

LinuxShell编程1———shell基础命令

为什么计算结果会是0呢?那是因为这个命令是需要调用 1.txt 文件的第234字段进行求和计算,如果你1.txt文件中没有内容,就计算不了。

LinuxShell编程1———shell基础命令

  • 关系运算符 

LinuxShell编程1———shell基础命令

  • 逻辑运算符

举例:

LinuxShell编程1———shell基础命令

逻辑与&&   和 取反!

LinuxShell编程1———shell基础命令

逻辑或||

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

4)BEGIN和END的使用

LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

实操LinuxShell编程1———shell基础命令

3、综合案例

LinuxShell编程1———shell基础命令

案例1操作获取inet中ip地址

方法一 cut命令:对文件切割LinuxShell编程1———shell基础命令
 方法二:使用awk命令 此方法比方法一简洁

LinuxShell编程1———shell基础命令

 案例2 监控多台服务器的磁盘使用情况…….

LinuxShell编程1———shell基础命令

在alert.sh脚本编辑执行

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

我们先在终端执行一下代码是否正确 

LinuxShell编程1———shell基础命令

再在脚本上编写LinuxShell编程1———shell基础命令将命令定义变量,方便我们后面用if循环语句进行条件判断LinuxShell编程1———shell基础命令执行脚本命令LinuxShell编程1———shell基础命令修改条件值执行脚本LinuxShell编程1———shell基础命令如果没有接受到可能邮箱设置SMTP服务未开启LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

设置白名单

main

LinuxShell编程1———shell基础命令

开启服务和添加白名单之后我们再执行一下脚本 

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

实时检测:计划任务crontab

LinuxShell编程1———shell基础命令

设置每隔一分钟执行下脚本命令,如果磁盘不满足磁盘空间就发送邮箱提醒LinuxShell编程1———shell基础命令

LinuxShell编程1———shell基础命令

查看计划任务

LinuxShell编程1———shell基础命令

优化代码

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

这是之前的执行结果LinuxShell编程1———shell基础命令

案例3  查看日志…… wtmp里面是有所有登录过服务器的IP

who
/
var
/
log
/
wtmp
这个命令从
/
var
/
log
/
wtmp
文件中读取登录记录。
/
var
/
log
/
wtmp
文件记录了所有登录
和注销的信息
awk
‘{print $5}’
这个
awk
命令从
who
命令的输出中提取第五列,即登录的主机名或
IP
地址。
awk
-F
“[()]” ‘{print $2}’
这个
awk
命令使用圆括号
()
作为字段分隔符,提取包含在圆括号内的内容,即实际的
IP
地址

LinuxShell编程1———shell基础命令

uniq命令:去重

uniq

c
统计每个唯一
IP
地址的出现次数,并输出结果

LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令

who /var/log/wtmp |awk '{print $5}' |awk -F "[(|)]" '{print $2}' |grep -v "^$" |uniq -c

用脚本编写封掉ip地址 ,把ip作为变量LinuxShell编程1———shell基础命令

根据规则设置防火墙

sort
将提取的
IP
地址进行排序,这一步是为了让
uniq

c
能够正确统计每个
IP
地址的出现次
数。

LinuxShell编程1———shell基础命令

查帮助

LinuxShell编程1———shell基础命令

# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.50.1 accept'

LinuxShell编程1———shell基础命令

案例4 猜数字游戏

输入一个100以内的数字让其他人去猜,猜小猜大会给出对应的提示,猜对则游戏结束,最多10次机会。LinuxShell编程1———shell基础命令LinuxShell编程1———shell基础命令


总结

以上就是本章节要讲的内容,本文介绍了LinuxShell编程命令及操作。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/134615.html

(0)
上一篇 2025-07-10 22:10
下一篇 2025-07-10 22:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信