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



不成立则执行循环,直到

在执行的同时进行编译,但是效率 要慢

怎么建立编程思想:多练

Linux从入门到精通5相关推荐

  1. Linux从入门到精通系列之PPTP

    Linux从入门到精通系列之PPTP 今天我们来说下怎么在linux环境下如何搭建PPTP-×××,PPTP(Point to Point Tunneling Protocol),即点对点隧道协议.该 ...

  2. Kali Linux 从入门到精通(十一)–提权

    Kali Linux 从入门到精通(十一)–提权 本地提权 已实现本地低权限账号登录 远程溢出 直接获得账号密码 希望获取更高权限 实现对目标进一步控制 系统之间权限隔离 操作系统安全的基础 用户空间 ...

  3. Kali Linux 从入门到精通(十)-漏洞挖掘之缓冲区溢出

    Kali Linux 从入门到精通(十)-漏洞挖掘之缓冲区溢出 程序漏洞从哪里来? 罪恶的根源:变量 数据与代码边界不清(注入攻击) 最简漏洞原理-shell 脚本漏洞(本质:输入数据本身,程序本身没 ...

  4. Kali Linux 从入门到精通(八)-主动信息收集

    Kali Linux 从入门到精通(八)-主动信息收集 基本介绍 直接与目标系统交互通信 无法避免留下访问的痕迹 使用受控的第三方电脑进行探测 使用代理或已经被控制的主机 做好被封杀的准本 使用噪声迷 ...

  5. Kali Linux 从入门到精通(五)-测试环境准备

    Kali Linux 从入门到精通(五)-测试环境准备 准备实验环境 渗透非系统授权的弊端 搭建自己的实验环境 安装虚拟机 微软最新软件 http://msdn.microst.com/en-ca/s ...

  6. Kali Linux 从入门到精通(三)-入侵系统定制

    Kali Linux 从入门到精通(三)-入侵系统定制 定制 网络配置 临时IP地址 dhclient eth0 ifconfig eth0 192.168.11/24 route add defau ...

  7. Kali Linux 从入门到精通(二)-安装

    Kali Linux 从入门到精通(二)-安装 Kail Linux 安装 持久加密USB安装-1 LUSK:Linux Unified Key Setup 磁盘分区加密规范 不依赖与操作系统的磁盘级 ...

  8. linux学生入门,Linux入门之《Linux从入门到精通》

    Linux是目前增长最迅速的操作系统.<Linux从入门到精通>由浅入深.循序渐进地向读者介绍Linux的基本使用和系统管理.全书内容包括 Linux概述.Linux安装.Linux基本配 ...

  9. ubuntu php入门教程,《Ubuntu Linux从入门到精通》PDF 下载_IT教程网

    资源名称:<Ubuntu Linux从入门到精通>PDF 下载 内容简介: <Ubuntu Linux从入门到精通>详细介绍Ubuntu Linux操作系统,<Ubunt ...

  10. Linux从入门到精通

    Linux从入门到精通 分区方案: 实验环境 原则:想怎么分,就怎么分 方案一:最简(如果你生命只有最后一天) ==Windows : c ==Linux:/(根) 方案二:相对规范 媳妇 /(根) ...

最新文章

  1. anaconda的python使用教程-Python,Anaconda简介安装使用教程
  2. elementui ts vant冲突_如何解决vue多个ui框架css冲突?
  3. eclipse.jsp文件放哪_来自小师弟的灵魂拷问之数据泵导出丢失的那些数据量去哪了?...
  4. 使用命名空间别名限定符 ::
  5. Deep Q-learning
  6. 450g吐司烘烤温度_这不可能是吐司!不,是的
  7. 心语收集12:我以为要是唱的用心良苦,你就会对我多点在乎
  8. 1121. Damn Single (25)-PAT甲级真题
  9. 学习Unix下C编程的实例
  10. 多元统计分析教材推荐
  11. 教你几招提高自媒体文章原创度
  12. NVIDIA GPU简史、命名规则及基础知识
  13. 最终幻想8 Mac版|适用于macOS 10.15系统的最终幻想8 Final Fantasy VIII
  14. echarts折线图曲线,每个值上面添加小圆点或者小圆圈
  15. first集合及follow集合
  16. php fileinfo 作用,PHP Fileinfo函数 详解
  17. 如何解决数据关联查询
  18. 【SQL】神奇的DUAL表
  19. I2C+E2PROM再回顾ing~
  20. 基于docker 搭建mysql8.0主从复制

热门文章

  1. 【马克思主义基本原理概论】
  2. 为什么PDF文件无法编辑?
  3. 浅谈软件工程中的“原型开发”
  4. 计算机里找不到读卡器、,读卡器不显示怎么办解决教程
  5. 腾讯云TCA运维考试题
  6. 数字图像与机器视觉基础补充(2)--颜色转换+分割车牌
  7. 致得E6协同文档管理软件 推出4.0免费版
  8. java number比较大小_JAVA Number与Math类
  9. hpet 定时器中断 8259 linux,[OSDEV]编程高精度定时器(HPET)
  10. JAVA删除pdf空白页_【Spire.PDF教程】添加或删除 PDF 页面,调整页面顺序-word删除空白页...