Linux从入门到精通5

10shell基础编程1

10.1 Shell基础-概述

在这里插入图片描述
在这里插入图片描述
把我们的操作命令,翻译成内核可以识别的0101语言,然后内核会把操作结果返回给shell,经解释返回给我们
widows也有shell,图形交互界面就是它的shell
让我有个地方可以输命令
在这里插入图片描述
除了作为接受用户的命令 ,也可以作为一种编程语言
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Bash Shell
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后一列是用户的登陆后的权限

10.2 Shell基础-脚本执行方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基本上程序必须用路径来执行,有的命令不需要其实是一种简化操作
方式二:直接用bash命令,连权限都不用赋
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个脚本文件是在window中编辑成功的
所以要把脚本从windows格式转化为linux格式
在这里插入图片描述

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

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

10.3.1 Shell基础-Bash基本功能-历史命令与补全

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

10.3.2 Shell基础-Bash基本功能-别名与快捷键

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所有的命令其实都是靠路径来执行的
ls可以不打路径,是因为4
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
cd是bash自带的,根本没有路径
用命令行定义的别名重启会失效
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.3.3 Shell基础-Bash基本功能-输入输出重定向

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
date覆盖了ls
在这里插入图片描述
追加上了
在这里插入图片描述
在这里插入图片描述
2和<<没有空格
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
执行但不输出,即把输出扔到垃圾桶
在这里插入图片描述
在这里插入图片描述
执行操作的命令本来应该通过键盘写入,但是现在 通过文件来
在这里插入图片描述
ctrl+d
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.3.4 Shell基础-Bash基本功能-多命令顺序执行与管道符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
就算中间有报错,也不会影响后面的命令的执行
在这里插入图片描述
我们就可以知道执行一个命令传100M需要用多长时间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

10.3.5 Shell基础-Bash基本功能-通配符和其他特殊符号

在这里插入图片描述
在这里插入图片描述
2:删除当前目录下的所有文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通配符用来匹配文件名
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单引号和双引号的区别。单引号是原样输出、双引号才是代表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
反引号和$()的区别
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
$失去作用

通配符:匹配内容
单引号和双引号:单引号括起来的内容没有特殊符号,双引号括起来的内容会有特殊符号
反引号和$():括起来的是系统变量

10.4.1 Shell基础-Bash变量-用户自定义变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
set可以查看到系统中所有的变量

10.4.2 Shell基础-Bash变量-环境变量

从上到下,限制的越来越严格
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
年龄和性别在子shell中还在,但是名字不在了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
执行命令要想运行,要用路径
但是系统路径并没有写路径,就能运行
在这里插入图片描述
敲入一个命令后,就在path中去找
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
小写w显示出了完整的路径
在这里插入图片描述
第8条命令
可以按照自己的习惯来该提示符
但是还是默认的比较习惯

10.4.3 Shell基础-Bash变量-位置参数变量

在这里插入图片描述
位置参数变量的变量名称和作用是固定的
在这里插入图片描述
在这里插入图片描述
输出后面参数的结果
在这里插入图片描述
在这里插入图片描述
带上参数后就能将参数输出了
$用来接收参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
脚本中没有提示让用户输入两个参数才能运行,没有输入参数的话怎么办呢?
把命令行中的参数传递到脚本中
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
还要设定执行权限哟
在这里插入图片描述
*所有的参数看成一个整体
@区分对待
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
第一个循环把所有的参数当成一个整体
第二个参数把每个参数当成一个独立的参数
可以在命令执行的同时写入参数

10.4.4 Shell基础-Bash变量-预定义变量

在这里插入图片描述
在这里插入图片描述
命令找不到时报错设定为127
在这里插入图片描述
文件找不到报错为2
在这里插入图片描述
&代表后台执行
最小化其实就是放入后台,
显示当前进程的id,显示后台进程的id
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.5.1 Shell基础-Bash变量-数值运算与运算符

在这里插入图片描述
这是因为默认的类型是字符串类型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
两个小括号代表要用数值运算
在这里插入图片描述
在这里插入图片描述
越靠上优先级越高
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.5.2 Shell基础-Bash变量-变量测试与内容替换

在这里插入图片描述
通过判断x的值,来判断y是否有值。
y不存在,x就等于一个新值。
y存在但为空,x也为空。
y有值,x就等于y。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
减号
冒号
加号
减号
等号:不光给x赋值,还要给y
问号:值不存在时,输出 给用户看

在这里插入图片描述

10.6.1 Shell基础-环境变量配置文件-简介

环境变量:在一系列的shell中生效,还有默认环境变量。
环境变量的配置文件:专门用来放环境变量的文件
在这里插入图片描述
如果修改了配置文件,source让强制生效
在这里插入图片描述
path:命令的路径
histsize:历史命令保存条数
psi:提示符
hostname:主机名
在这里插入图片描述
临时生效
在这里插入图片描述
etc:对所有登陆系统的用户都有效
~:家目录,只对当前用户有效,这两个是隐藏文件用.开头

10.6.2 Shell基础-环境变量配置文件-作用

在这里插入图片描述
用户登录后首先调用etc/profile etc/profile/*.sh
在这里插入图片描述

/etc/profile

:用户输入用户名和密码后,第一步读取了/etc/profile文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
判断出管理员,所以让它读那几个
在这里插入图片描述
默认的权限
umask
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最主要的是读取定义语言的这个脚本
在这里插入图片描述
在这里插入图片描述
中文编码环境

XXX/.bash_profile

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个文件如果存在就调用,然后给path中追加一个自己本身用户的bin
在这里插入图片描述

XXX/.bashrc

在这里插入图片描述
在这里插入图片描述
定义了系统别名,调用下一个文件

/etc/bashre

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

在这里插入图片描述

在这里插入图片描述
很多都重复了,比如说umask等等。只要是重复的值,都是定义的不需要输入用户名和密码的那种情况生效。

10.6.3 Shell基础-环境变量配置文件-其他配置文件和登录信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之前讲过查历史命令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
欢迎信息,
在这里插入图片描述

加一个/l
在这里插入图片描述
在这里插入图片描述
因为linux本地支持6个终端,用alt+Fn来切换,加上\l可以知道当前是哪个。但这只对本地linux有效
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这下欢迎信息出现了,但不支持
在这里插入图片描述
这是登陆后的欢迎信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本地终端必须安装中文插件才能支持中文,cch,con等等

11shell基础编程2

11.1 Shell编程-正则表达式

在这里插入图片描述
通配符:* ? []。匹配文件名,因为一些命令不支持正则表达式。完全匹配
正则:在文件中匹配字符串,一些命令支持正则表达式。包含匹配
在这里插入图片描述
在这里插入图片描述
完全匹配
在这里插入图片描述
只要含有size就会列出 ,包含匹配
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
匹配包含a的所有字符,即a出现0次或者任意多次。即列出了整个文档
在这里插入图片描述
aa匹配有一个连续的a出现
在这里插入图片描述
aaa匹配有两个连续的a出现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
相当于通配符中的?
在这里插入图片描述
.*匹配任意字符,任意个数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
匹配空白行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只要有字符结尾
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最少一个a最多两个a

11.2.1 Shell编程-字符截取命令-cut命令

在这里插入图片描述
grep是提取行 cut是提取列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
中间的是制表符而不是空格
在这里插入图片描述
在这里插入图片描述
默认分隔符是制表符
冒号作为分隔符
在这里插入图片描述
在这里插入图片描述
结合使用grep和cut
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只有普通用户有/bin/bash
管理员是/sbin/nologin
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
写一个脚本,如果使用率大于80%报警
在这里插入图片描述
在这里插入图片描述
完全没有作用,是因为这个分隔符是多空格不是制表符
用-d指定分隔符是空格也不行,它制定了一个空格的分隔符,它认为第五列是空格
在这里插入图片描述
以为用awk命令来实现

11.2.2 Shell编程-字符截取命令-printf命令

cut提取字符段
标准输出格式,用来支持awk命令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只有第一个%s起了作用,需要用’'把%s们括起来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
printf不能直接输出文件名中的内容
在这里插入图片描述
因为awk里面不能使用cat等显示,必须得用printf
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.2.3 Shell编程-字符截取命令-awk命令

cat vi等都不用我们手动调整格式
cat不能截取以空格作为分隔符的输出结果
在这里插入图片描述
而awk可以
awk命令很复杂,不仅可以进行字符截取,还可以编程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第2列 制表符 第6列 换行
在这里插入图片描述
cat命令不能处理df这样的结果,是因为里面是空格符
在这里插入图片描述
而awk可以
在这里插入图片描述
超过80%就报警
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在执行之前打印出
在这里插入图片描述
在这里插入图片描述
指定分隔符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是第一行没有处理,是因为awk是读完第一行之后才开始执行处理
在这里插入图片描述
这表示在我读取第一行命令之前,就把分隔符写进去
在这里插入图片描述
在所有的命令都执行完后执行的一条命令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
awk命令比较复杂

11.2.4 Shell编程-字符截取命令-sed命令

cut、printf、awk都是进行字段提取的
printf是进行行提取
cut和awk是进行列提取
sed命令时用来进行流编辑器
在这里插入图片描述
vi只可以修改文档 sed不光可以修改文件,可以从管道符接收数据来修改,可以直接修改命令的结果
sed在写shell脚本时很重要
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其实系统命令也支持/,它会认为你这个命令没有输完,等待你执行接下来的命令。
进行数据替换时也可以用/。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
p是输出,2p就是输出第二行
在这里插入图片描述
它不光把第二行输出了,还把所有的内容都给输出了一遍,即第二行输出了两遍
如果只想看第二行,而不想得到全部的内容,那么就需要加-n选项。
在这里插入图片描述
所以一般用p选项打印的话,都要加上-n。
注意,只要不加-i,所有的操作都不影响文件本身,只影响了屏幕输出。
我们来看看除了操作文件本身,它还可以来干什么。
在这里插入图片描述
放到管道符之后,它还可以接收命令的结果。
在这里插入图片描述
在这里插入图片描述
这个文件就只有4行,我删掉2~4行,那么就只剩下第一行的数据了,直接输出剩余的结果。
在这里插入图片描述
但是并没有把文件的内容真正的给删除掉,只要不加-i。
在这里插入图片描述
在这里插入图片描述
a代表追加 i代表插入
/表示一行还没输完,还要接着输入
在这里插入图片描述
在第二行的前面插入了。
\允许多行的输入。追加、替换、插入都允许多行输入。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
要想保存在文件中,加-i,这时候没有输出,但是cat文件,输出了结果。
在这里插入图片描述
-e是允许多个命令同时执行,用;分开

11.3 Shell编程-字符处理命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
允许手工指定分隔符,还是排序,但是不是按照整个文件行首的字母排序了,而是手工指定以:作为分隔符,然后用第三个字段开始到第三个字段结束排序,其实就是使用第三个字段来排序,
在这里插入图片描述
这时候就会发现会从用户的uid来排序
没把整个uid当成是字符串,而是按首字符来排序的,所以前面是1 10 11而2 3都在后面。
为了能够让它识别这些数字的大小,需要加-n。意思是把提取出来的字符串当做数值型的来计算。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
依次是行数、单词数、字符数
在这里插入图片描述
还可以统计命令的输出

11.4 Shell编程-条件判断

测试一个条件是否成立
在这里插入图片描述
块设备文件、字符设备文件、管道文件、套接字文件都是一些特殊的文件类型
常用的就是目录文件、普通文件、文件是否存在
在这里插入图片描述
在这里插入图片描述
怎么没有输出结果呀,可以通过echo来判断上一条命令是否执行正确,0是正确1是错误。
在这里插入图片描述
在这里插入图片描述
test和[]都可以,[]更为常用。
为什么需要这种方式来判断在不在?因为ls是给用户看,而test这种是给程序来看。
在这里插入图片描述
双&&符是逻辑与,这样可以不用再手动输出执行结果
在这里插入图片描述
在这里插入图片描述
root是存在,但它不是普通文件,而是目录文件。
在这里插入图片描述
读写执行
在这里插入图片描述
不管是所有者、所属组、其他人,只要有一个有w权限,就会说它有写权限
在这里插入图片描述
在这里插入图片描述
硬链接:文件1,2做了硬链接,文件名可以随便改,只有inode号可以判断他们是否是同一个文件
软链接:会有箭头表明它的源文件
在这里插入图片描述
把它们做为硬链接。
在这里插入图片描述
只要一个方法,看他们的inode号。这是需要人为肉眼,要想让程序要判断。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
判断是否为空,是yes否no
在这里插入图片描述
eq来判断是判断数值,==适用于字符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.5.1 Shell编程-流程控制-if语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果分区超过了80%,那么就警告
在这里插入图片描述
把这个数值提出来
在这里插入图片描述
grep提取行
在这里插入图片描述
awk提取列
在这里插入图片描述
截取字符串,以百分号作为分隔符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
备份就是从原始位置赋值一份到别的位置
在这里插入图片描述
如果这个目录存在
把当前的日期输出到一个临时文件中,覆盖。将文件大小追加到临时文件中
进入这个备份的位置,将刚刚那个临时文件进行压缩
如果目录不存在,手动创建这个目录,然后一样
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
每隔15分钟执行一次,如果服务器down了,就会主动告诉你并且帮你重启服务器
如何判断一个服务是运行的
在这里插入图片描述
在这里插入图片描述
用ps命令查看现在的进程
在这里插入图片描述
提取有没有apacher的进程
我们现在把apche装上
在这里插入图片描述
在这里插入图片描述
装完启动一下
在这里插入图片描述
启动完查,证明运行了
有些情况下虽然有进程但是死机了,用ps判断不一定准,别的方法
在这里插入图片描述
还有一种方法是判断端口,只要看到80端口,就说明apache启动了,但是也不准

最有效的方法是通过nmap命令,远程扫描命令,如果它能连接上apche则会返回状态
我们来安装nmap
在这里插入图片描述
-sT扫描指定服务器上开启的TCP端口
在这里插入图片描述
现在要做的是,截取这个命令的输出
排除干扰项
在这里插入图片描述
只提取包含TCP的行
在这里插入图片描述
然后再提取包含服务器的行
在这里插入图片描述
截取第二段
然后把这个执行的结果赋给变量,写语句
如果关着,把输出结果丢到垃圾箱,然后重启
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
现在启动了,所以现在正确的访问日志有了
在这里插入图片描述
停掉apche
在这里插入图片描述
在这里插入图片描述
接下来的任务就是定时让它运行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-e是文件为真,!取反
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.5.2 Shell编程-流程控制-case语句

多分支判断语句
在这里插入图片描述
case:只能有一种判断关系
在这里插入图片描述
在这里插入图片描述
打印选择列表的情况
在这里插入图片描述
在这里插入图片描述
*不用打双引号!去掉
这个变量是否是这个值还是那个值

11.5.3 Shell编程-流程控制-for循环

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把所有的包放在了lamp目录中,把所有后缀名为压缩包的都放到ls.log这个文件中
在这里插入图片描述
循环执行,解压,把执行结果信息输出到垃圾站中
在这里插入图片描述
在这里插入图片描述
这种for循环的好处:不需要事先执行循环的个数
在这里插入图片描述
用双小括号括起来才允许进行加减乘除运算
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
事先知道要添加多少个用户,用到第二种循环
用户名、个数、初始密码
先要判断输入的名字、个数、初始命令不为空,才能往下执行
还要判断输入的num是数字,sed是正则表达式,包含匹配。如果是数字替换为空,如果y为空,则证明为数字
循环num次,添加用户st1 st2 …
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
脚本没有执行

11.5.4 Shell编程-流程控制-while循环与until循环

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
少加了个100
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不成立则执行循环,直到
在这里插入图片描述
在执行的同时进行编译,但是效率 要慢

怎么建立编程思想:多练

猜你喜欢

转载自blog.csdn.net/AthlenaA/article/details/83385393