Linux系统中的shell脚本一 (常见的命令操作)

Linux系统中的shell

一.shell的介绍

1.什么是shell?

shell是linux的一外壳,它包在linux内核的外面,为用户和内核之间的交互提供了一个接口,当用户下达指令给操作系统的时候,实际上是把指令告诉shell,经过shell解释,处理后让内核做出相应的动作系统的回应和输出的信息也由shell处理,然后显示在用户的屏幕上。
2.什么是shell脚本?

简单的说,当命令或者程序不在命令行执行,而是通过一个程序文件来执行,这个程序就被称为shell脚本也就是在shell脚本里内置了多条命令,语句,循环控制,然后将这些命令一次性执行完毕,这种通过文件执行命令的方式称为非交互式。

 3.为什么使用shell脚本? 

适合处理操作系统底层的业务,有众多系统命令为其做支撑(还有文本处理三兄弟grep,sed,awk)适合处理纯文本文件,linux中许多服务配置文件,启动脚本,都是纯文本(httpd,nfs,mysql,nginx,lvs),linux系统脚本用shell开发更简单。


二.用shell脚本来全自动化的在虚拟加上安装系统

问题引入:当kickstart自动安装脚本存在,网络资源存在,dhcp存在,我们在安装虚拟机是仍然需要重复选择才能进入安装界面。如何去避免这些重复的操作,此时需要写一个脚本避免这些操作。

1.指定分区

添加一块大小为50个G的硬盘

fdisk /dev/sdb 

将50个G分配给一个盘

mkfs.xfs   /dev/sdb1 

mount    /dev/sdb1    /var/lib/libvirt/images

2.配置Apache服务器

配置Apache服务器的目的是为了网络共享 安装资源

具体操作如下:

dnf  install httpd    -y     

systemctl enable --now  httpd  

mkdir  /var/www/html/rhel8  

mount  /run/media/root/RHEL-8-0-0-BaseOS-x86_64     /var/www/html/rhel8   --bind 

Linux系统中的shell脚本一 (常见的命令操作)

3.配置dhcp服务 

dnf   install  dhcp-server  -y

Linux系统中的shell脚本一 (常见的命令操作)

vim   /etc/dhcp/djcpd.conf 

Linux系统中的shell脚本一 (常见的命令操作)

4.kickstart自动化脚本的制作

cp anaconda-ks.cfg  /var/www/html/ks.cfg 

vim   /var/www/html/ks.cfg 

Linux系统中的shell脚本一 (常见的命令操作)

4.在虚拟机上的virtual machine manager·上安装系统  

(1)首先安装虚拟化的三个插件

(2)配置桥接模式 

vim  /etc/sysconfig/network-scripts/ifcfg-br0

vim  /etc/sysconfig/network-scripts/ifcfg-westos

nmcli connection reload 

nmcli connection down  westos 

nmcli connection up westos 

nmcli connection up br0

Linux系统中的shell脚本一 (常见的命令操作)

 5.编写shell脚本

vim  virt-install.sh 

sh    virt-install.sh    运行脚本

进入自动化安装界面,耐心等待。

Linux系统中的shell脚本一 (常见的命令操作)

三.shell中的一些基本语句 

1.diff 

diff  file1  file2   比较两个文件

[num1,num2]     第一个文件中的行

a    添加         c    更改         d    删除         <   第一个文件中的内容         >    第二个文件中的内容  

[num3,num4]          第二个文件中的行 

常用参数:

Linux系统中的shell脚本一 (常见的命令操作)Linux系统中的shell脚本一 (常见的命令操作)

2.patch   

patch   源文件    补丁文件      

-b 备份源文件

Linux系统中的shell脚本一 (常见的命令操作)Linux系统中的shell脚本一 (常见的命令操作)

3.cut   用于抓取信息   

cut  

-b  显示字节

-d  :    指定: 为分隔符

-f        指定显示的列      5  第五列    3,5第三和第五列    3-5 3到第5列     -5  第五列之前     5-   第五列之后 

-c     指定截取的字符   (数字用法同  -f)

--complement    反选  

--output-delimiter=分隔符         指定输出的分隔符

Linux系统中的shell脚本一 (常见的命令操作)

例题:

Linux系统中的shell脚本一 (常见的命令操作)

ifconfig ens160 | grep "inet " |cut -c 14-28

Linux系统中的shell脚本一 (常见的命令操作)

4.sort  

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

练习:

Linux系统中的shell脚本一 (常见的命令操作)

Linux系统中的shell脚本一 (常见的命令操作)

5.uniq  

Linux系统中的shell脚本一 (常见的命令操作)

练习:检测apache服务器被谁访问的次数最多,显示访问者ip并显示访问次数

cat /etc/httpd/logs/access_log | cut -d " " -f 1 | uniq -c | grep `cat /etc/httpd/logs/access_log | cut -d " " -f 1 | uniq -c | sort -nr | head -n 1`

6.test  

test = []     [] 就相当于test命令

“test  $a=$b”   =  [ $a=$b ]

Linux系统中的shell脚本一 (常见的命令操作)

Linux系统中的shell脚本一 (常见的命令操作)

Linux系统中的shell脚本一 (常见的命令操作)

测试题:当/使用量超过80%发送警告邮件到root用户的邮箱中

Linux系统中的shell脚本一 (常见的命令操作)

7.tr  大小写之间的转换

tr ‘a-z’ ‘A-Z’ 小写转大写
tr ‘A-Z’ ‘a-z’ 大写转小写

Linux系统中的shell脚本一 (常见的命令操作)

课后练习题:

如果脚本后未指定检测文件报错“未指定检测文件,请指定”
如果脚本后指定文件不存在报错“此文件不存在”
当文件存在时请检测文件类型并显示到输出

Linux系统中的shell脚本一 (常见的命令操作)

Linux系统中的shell脚本一 (常见的命令操作)