《linux就该这么学——笔记》第4章

本文介绍如何使用Vim编辑器进行文档编辑,并通过配置主机名、网卡及Yum仓库参数文件实验,结合Linux命令与Shell脚本流程控制,实现自动化工作脚本。涵盖Vim基本操作、Shell脚本编写、条件测试与流程控制等内容。
摘要由CSDN通过智能技术生成

vim编辑器与Shell命令脚本

本章讲解如何使用Vim编辑器来编写、修改文档,然后通过逐个配置主机名称、系统网卡以及Yum软件仓库参数文件实验。
结合前面章节的Linux命令、命令语法与Shell脚本中各种流程控制,实现最终自动化工作的脚本文件。

4.1 Vim文本编辑器

与vi相比增加了着色功能,可以避免错误参数的产生。
在这里插入图片描述

4.1.1编写简单文档

默认:命令模式
ESC在命令模式与其它模式间切换
aio进入 输入模式=插入模式=编辑模式
进入末行模式

a和i只是光标位置不同,都直接开始编辑。—insert—
o是从下一行开始编辑
wq:保存退出
wq!:强制保存退出
命令模式下:

命令作用
yy复制光标所在行
5yy复制从光标处开始的5行
p粘贴到光标所在行
dd删除(剪切)光标所在整行
5dd删除(剪切)从光标处开始的5行
u撤销上一步的操作
:wq!w写入,q退出,!强制

4.1.2 配置主机名

vim /etc/hostname
linuxprobe.com

4.1.3 配置网卡信息

[root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/
[root@linuxprobe network-scripts]# ls
ifcfg-eno16777728  ifdown-ppp       ifup-eth     ifup-sit
ifcfg-lo           ifdown-routes    ifup-ippp    ifup-Team
ifdown             ifdown-sit       ifup-ipv6    ifup-TeamPort
ifdown-bnep        ifdown-Team      ifup-isdn    ifup-tunnel
ifdown-eth         ifdown-TeamPort  ifup-plip    ifup-wireless
ifdown-ippp        ifdown-tunnel    ifup-plusb   init.ipv6-global
ifdown-ipv6        ifup             ifup-post    network-functions
ifdown-isdn        ifup-aliases     ifup-ppp     network-functions-ipv6
ifdown-post        ifup-bnep        ifup-routes
[root@linuxprobe network-scripts]# vim ifcfg-eno16777728
WADDR=00:0C:29:39:74:BE
TYPE=Ethernet
BOOTPROTO=static
NAME=eno16777728
ONBOOT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=192.168.10.1
~                    
[root@linuxprobe network-scripts]# systemctl restart network
[root@linuxprobe network-scripts]# ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.069 ms
64 bytes from 192.168.10.10: icmp_seq=4 ttl=64 time=0.050 ms
64 bytes from 192.168.10.10: icmp_seq=5 ttl=64 time=0.086 ms
^C
--- 192.168.10.10 ping statistics ---

4.14 配置Yum软件仓库

后续再详细学习

[xiaonao]  #唯一标识符
mame=xiaonao  #仓库名称
baseurl=file:///media/cdrom #挂载目录
enabled=1 #设置此源可用
gpgcheck=0 #0为不校验,1为校验
[root@linuxprobe network-scripts]# vim /etc/yum.repos.d/xiaonao.repo
[xiaonao]  #唯一标识符
mame=xiaonao  #仓库名称
baseurl=file:///media/cdrom #挂载目录
enabled=1 #设置此源可用
gpgcheck=0 #0为不校验,1为校验
[root@linuxprobe network-scripts]# mkdir -p /media/cdrom
[root@linuxprobe network-scripts]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
[root@linuxprobe network-scripts]# vim /etc/fstab
[root@linuxprobe network-scripts]# yum install httpd
yum install httpd
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Repository 'xiaonao' is missing name in configuration, using id
xiaonao                                                                                                                                                                                    | 4.1 kB  00:00:00     
(1/2): xiaonao/group_gz                                                                                                                                                                    | 134 kB  00:00:00     
(2/2): xiaonao/primary_db                                                                                                                                                                  | 3.4 MB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-17.el7 will be installed
--> Processing Dependency: httpd-tools = 2.4.6-17.el7 for package: httpd-2.4.6-17.el7.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-17.el7.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-17.el7.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-17.el7.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-3.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-17.el7 will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==================================================================================================================================================================================================================
 Package                                             Arch                                           Version                                                 Repository                                       Size
==================================================================================================================================================================================================================
Installing:
 httpd                                               x86_64                                         2.4.6-17.el7                                            xiaonao                                         1.2 M
Installing for dependencies:
 apr                                                 x86_64                                         1.4.8-3.el7                                             xiaonao                                         103 k
 apr-util                                            x86_64                                         1.5.2-6.el7                                             xiaonao                                          92 k
 httpd-tools                                         x86_64                                         2.4.6-17.el7                                            xiaonao                                          77 k
 mailcap                                             noarch                                         2.1.41-2.el7                                            xiaonao                                          31 k

Transaction Summary
==================================================================================================================================================================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 1.5 M
Installed size: 4.3 M
Is this ok [y/d/N]: y
Downloading packages:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                             5.9 MB/s | 1.5 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : apr-1.4.8-3.el7.x86_64                                                                                                                                                                         1/5 
  Installing : apr-util-1.5.2-6.el7.x86_64                                                                                                                                                                    2/5 
  Installing : httpd-tools-2.4.6-17.el7.x86_64                                                                                                                                                                3/5 
  Installing : mailcap-2.1.41-2.el7.noarch                                                                                                                                                                    4/5 
  Installing : httpd-2.4.6-17.el7.x86_64                                                                                                                                                                      5/5 
xiaonao/productid                                                                                                                                                                          | 1.6 kB  00:00:00     
  Verifying  : mailcap-2.1.41-2.el7.noarch                                                                                                                                                                    1/5 
  Verifying  : httpd-tools-2.4.6-17.el7.x86_64                                                                                                                                                                2/5 
  Verifying  : apr-1.4.8-3.el7.x86_64                                                                                                                                                                         3/5 
  Verifying  : apr-util-1.5.2-6.el7.x86_64                                                                                                                                                                    4/5 
  Verifying  : httpd-2.4.6-17.el7.x86_64                                                                                                                                                                      5/5 

Installed:
  httpd.x86_64 0:2.4.6-17.el7                                                                                                                                                                                     

Dependency Installed:
  apr.x86_64 0:1.4.8-3.el7                       apr-util.x86_64 0:1.5.2-6.el7                       httpd-tools.x86_64 0:2.4.6-17.el7                       mailcap.noarch 0:2.1.41-2.el7                      

Complete!
[root@linuxprobe network-scripts]# 

4.2 编写Shell脚本

工作方式:
交互式:输入一条命令就立即执行
批处理:事先编好一个完整的Shell脚本,Shell一次性执行多条命令

4.2.1 编写简单的脚本

#!/bin/bash #脚本声明,指明解释器的名字
#For Example #注释
命令1
命令2

脚本文件通常以.sh为后缀
脚本执行方式:
1、bash 文件名.sh
2、路径+文件名.sh(这里要求x权限)

4.2.2 接收用户的参数

Shell内部参数

参数表述
$0脚本名称参数
$n接收到的第n个参数的值
$#接收到的参数数量
$?显示上一次命令的执行返回值
$*所有位置的参数值
[root@linuxprobe network-scripts]# vim example.sh
in/bash
#shiyanwenjian,yonglai liaojie jiaoben neizhi bianliang
echo "dangqianjiaobenmingcheng $0"
echo "zonggongyou $# gecanshu"
echo "first $1,fifth $5"

[root@linuxprobe network-scripts]# sh example.sh 1 2 3 4 5 6
dangqianjiaobenmingcheng example.sh
zonggongyou 6 gecanshu
first 1,fifth 5
[root@linuxprobe network-scripts]# 

4.2.3 判断用户的参数

Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值。
测试语句格式:[ 条件表达式 ]
按照测试对象来划分为四种:
文件测试语句;
逻辑测试语句;
整数值比较语句;
字符串比较语句;

文件测试语句:使用指定条件来判断文件是否存在或权限是否满足等情况的运算符。
运算符作用
-d测试文件是否为目录类型
-e测试文件是否存在
-f测试是否为一般文件
-r、-w、-x测试文件权限
逻辑测试语句:对测试结果进行逻辑分析,根据测试结果可实现不同的效果。
运算符作用
&&逻辑与,前面成功,后面继续执行
ll逻辑或,前面失败,后面继续执行
逻辑非,先取反,再执行。[ ! 测试条件 ]
整数值比较语句 仅仅对数字进行比较,不能使用数学符号。
运算符作用
-eq=号
-gt>号
-lt<号
-le<=号
-ge>=号
-ne不等于
字符串比较语句:判断测试字符串是否为空值,或两个字符串是否相同。
运算符作用
-z判断字符串内容是否为空,用来查看某个变量是否存在
=比较字符串内容是否相同
!=比较字符串内容是否不相同

例子:判断内存使用情况,设定两个变量
HAHA:取出内存查看命令中,Mem行的第四列(当前内存空闲量)
NC:判断内存空闲量是否小于1024MB,若为真则提示“ERROR”,若为假则提示“Enought”

[root@linuxprobe ~]# HAHA=free -m | grep Mem: | awk '{print $4}'
[root@linuxprobe ~]# NC=`[ $HAHA -lt 1024 ] && echo "ERROR" || echo "Enought"`
[root@linuxprobe ~]# echo $NC
Enought
[root@linuxprobe ~]# 

4.3 流程控制语句

Linux命令、管道符、重定向、条件测试语句虽能编辑简单的Shell脚本执行一些任务,但还有两个很大的不足,不能根据具体的工作来调整执行命令,不能按条件实现自动循环执行。
所以我们必须学习if、for、while、case这四种流程控制语言

4.3.1 if条件测试语句

让脚本根据实际情况自动执行相应的命令。
分为三种:单分支、双分支、多分支

if 单分支语句:if、then、fi

格式:
if 条件测试操作(真)
then 命令序列
fi

若…(成立)…则…(执行…)
例子:

#!/bin/bash
#if text
if [ ! -e /media/haha ] #判断haha这个目录是否不存在
then
mkdir -p /media/haha   #若不存在,则新建haha目录
fi  #兜底结束符
if 双分支语句:if、then、else、fi

格式:
if 条件测试
then 命令序列1--------为0
else 命令序列2--------非0
fi
若…则…否…则…

#!/bin/bash
#double if test
ping -c 3 -i 0.2 -w 3 $1 &> /dev/null #ping一个输入的IP地址
if [ $? -eq 0 ];then  #判断变量返回值是否为0
echo "$1 is On-line"  #若为0,则显示在线
else
echo "$1 is Off-line"  #若非0,则显示不在线
fi
[root@linuxprobe ~]# bash xiaoguo.sh 192.168.10.10
192.168.10.10 is On-line
[root@linuxprobe ~]# bash xiaoguo.sh 192.168.1.1
192.168.1.1 is Off-line
if 多分支语句:if、then、else、elif、fi

实际工作中最常用的一种复杂而灵活的判断结构。
这是电脑工作原理的精华,无非就是0/1,对与错。
格式:
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi

4.3.2 for 条件循环语句

当要处理的数据有范围时使用。
一次性读取,多个信息,逐一对信息进行处理。
格式:
for 变量名 in 取值列表
do
命令序列
done
练习:
先创建一个用户名文本文件

vim user.txt
zhang3
li4
wang5
zhao6
qian7
sun8
zhou9
wu10

创建shell脚本

#!/bin/bash
#test
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done

一次性创建多个用户

[root@linuxprobe ~]# bash usr.sh
Enter The Users Password : ×××
zhang3 , Create success
li4 , Create success
wang5 , Create success
zhao6 , Create success
qian7 , Create success
sun8 , Create success
zhou9 , Create success
wu10 , Create success

4.3.3 while 条件循环语句

按指定的条件 重复执行

4.3.4 case 条件测试语句

在多个范围内匹配数据,

4.4 计划任务服务程序

设置服务器的计划任务服务,把周期性、规律性的工作交给系统自动完成。
一次性任务:
at 时间,
以交互式方式设置任务,并用ctrl+D来终止对话。
重启后失效
长期性计划任务:
crond 服务名称
crontab 配置工具
crontab -e 创建编辑任务
crontab -l 查看任务
crontab -r 删除任务
注意:绝对路径+命令,必有命令的路径。可以使用whereis查找命令所在目录。
格式:
分 时 日 月 星 路径+命令

样式说明
30 * * * *每30分钟执行一次
30 2 * * *每天2:30分执行一次
30 2 8 5 *每年的5月8号2:30执行一次
30 2 * 5 35月份的每个周三执行一次
30 2-4 * * *每天2:30、3:30、4:30各执行一次
30 */2 * * *每隔2小时的半点执行一次
15,30,50 2 * * *每天2:15 2:30 2:50各执行一次
15,30 2 * * 6每周六的2:15 2:30各执行一次

注意
1、命令必须加上绝对路径
2、“分”字段必须有值,不能为空或为*号
3、“日”和“星期”不能同时使用,否则会发生冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值