4.1 Vim 文本编辑器
➢ 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
➢ 输入模式:正常的文本录入。
➢ 末行模式:保存或退出文档,以及设置编辑环境。
Vim编辑器模式的切换
Vim 中常用的命令
命令 作用
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的 5 行
yy 复制光标所在整行
5yy 复制从光标处开始的 5 行
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步的操作
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
Vim末行模式中命令
命令 作用
:w 保存
:q 退出
:q! 强制退出(放弃对文档的修改内容)
:wq! 强制保存退出
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 将当前光标所在行的第一个 one 替换成 two------>单个替换
:s/one/two/g 将当前光标所在行的所有 one 替换成 two--------->光标所在行全部替换
:%s/one/two/g 将全文中的所有 one 替换成 two---------------------->全文替换
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串
4.1.1 配置网卡信息
vim /etc/sysconfig/network-scripts/ifcfg-ens33
设备类型:TYPE=Ethernet
地址分配模式:BOOTPROTO=static
网卡名称:NAME=eno16777736
是否启动:ONBOOT=yes
IP 地址:IPADDR=192.168.10.10
子网掩码:NETMASK=255.255.255.0
网关地址:GATEWAY=192.168.10.1
DNS 地址:DNS1=192.168.10.1
4.1.2 配置yum软件仓库———–/etc/yum.repos.d/
本地yum源
1.mount 先查看本地的挂载情况
2.将本地的光盘镜像挂载到一个目录,常用的光盘挂载目录有:/mnt /media
3.使用命令 mount /dev/sr0 /mnt #将本地的光盘镜像挂载到/mnt 下
centos7一下版本光盘镜像的目录是 /dev/cdrom
4.编辑本地yum源的配置文件 将原有的删除 文件位置 vi /etc/yum.repos.d/a.repo
[123] #可以自定
name=c74 #可以自定义名称
baseurl=file:///mnt #将本地关盘镜像挂载的目录写在这里 注意是三个斜杠
gpgcheck=0 #0代表开机时不检测校验文件,1 为校验,0 为不校验
enabled=1 #开机挂载光盘镜像,1 为可用,0 为禁用
配置网络源
baseurl=http://mirrors.aliyun.com/centos/
releasever/os/
r
e
l
e
a
s
e
v
e
r
/
o
s
/
basearch/
mount //查看挂载情况
umount //卸载
使用“yum install httpd -y”命令检查 Yum 软件仓库是否已经可用
4.2 编写shell脚本
Shell 终端解释器可以当作人与计算机硬件之间的“翻译官”,它作为用户与 Linux 系统内部的通信媒介,除了能够支持各种变量与参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。Shell 脚本命令的工作方式有两种:交互式和批处理。
交互式(Interactive):用户每输入一条命令就立即执行。
批处理(Batch):由用户事先编写好一个完整的 Shell 脚本,Shell 会一次性执行脚本中诸多的命令
查看当前SHELL变量可以发现当前系统已经默认使用Bash作为命令行终端解释器:
[root@wen ~]# echo $SHELL
/bin/bash
编写SHELL脚本规则(通配符、管道、数据流重定向等语法规则)
vim example.sh
#!/bin/bash (#!)用来告诉系统使用哪种 Shell 解释器来执行该脚本
#For Example BY linuxprobe.com 第二行的注释信息(#)是对脚本功能和某些命令的
介绍信息,脚本的作用或一些警告信息
pwd
ls
chmod +x example.sh 加权限
./example.sh 执行脚本
4.2.2 接收用户参数
[root@wen ~]# vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第 1 个参数为$1,第 5 个为$5。"
[root@wen ~]# sh example.sh one two three four five six
当前脚本名称为 example.sh
总共有 6 个参数,分别是 one two three four five six。
第 1 个参数为 one,第 5 个为 five
4.2.3 判断用户的参数
Shell 脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。条件表达式两边均应有一个空格。
条件测试语句分为四种: 文件测试语句;逻辑测试语句;整数值比较语句;字符串比较语句
文件测试语句:使用指定条件来判断文件是否存在或权限是否满足等情况的运算符
运算符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
判断/etc/fstab 是否为一个目录类型的文件,然后通过 Shell 解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为 0,则目录存在;如果返回值为非零的值,则意味着目录不存在:
[root@wen ~]# [ -d /etc/fstab ]
[root@wen ~]# echo $? ----------------->$?表示输出上一条命令执行的返回值
1
判断/etc/fstab 是否为一般文件
[root@wen ~]# [ -f /etc/fstab ]
[root@wen ~]# echo $?
0
逻辑测试语句:
逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令
[root@linuxprobe ~]# [ -e /dev/cdrom ] && echo "Exist"
Exist
逻辑“或”的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令
逻辑语句是“非”的运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值。也就是说,如果原本测试的结果是正确的,则将其变成错误的;原本测试错误的结果则将其变成正确的。
整数值比较语句:
运算符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
[root@wen ~]# [ 10 -gt 10 ]
[root@wen ~]# echo $?
1
[root@wen ~]# [ 10 -eq 10 ]
[root@wen ~]# echo $?
0
字符串比较语句:字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同
运算符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
判断 String 变量是否为空值
[root@wen ~]# [ -z $String]
[root@wen ~]# echo $?
0
4.3 流程控制语句
4.3.1 if条件测试语句
单分支的if语句:if 条件测试操作——>then 命令序列——>fi
使用单分支的 if 条件语句判断/media/cdrom 文件是否存在,存在结束判断,不存在则创建
[root@wen ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
[root@wen ~]# chmod +x mkcdrom.sh | ./mkcdrom.sh | ls -d /media/cdrom
if双分支结构语句由 if、then、else、fi 关键词组成,它进行一次条件匹配判断,如果与条件匹配,则去执行相应的预设命令;反之则去执行不匹配时的预设命令
if 条件测试操作------>then 命令序列1------> else 命令序列2 ------> fi ####如果……那么……或者……那么……
if 多分支条件语句由 if、then、else、elif、fi 关键词组成,进行多次条件匹配判断,这多次判断中的任何一项在匹配成功后都会执行相应的预设命令,相当于口语的 “如果……那么……如果……那么……”。
if 条件测试操作1------>then 命令序列1------> elif 条件测试操作------>then命令序列2------> else 命令序列3 ------> fi
用户输入的分数大于等于 85 分且小于等于 100 分,输出 Excellent字样;若分数不满足该条件(即匹配不成功),则继续判断分数是否大于等于 70 分且小于等于 84分,如果是,则输出 Pass 字样;若两次都落空(即两次的匹配操作都失败了),则输出 Fail 字样
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ;
then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ;
then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi
[root@wen ~]# ./chkscore.sh
Enter your score(0-100):50
50 is Fail
4.3.2 for条件循语句
一次性读取多个信息,然后逐一进行操作。for 变量名 in 取值列表 ——> do 命令序列 ——>done
下面使用 for 循环语句从列表文件中读取多个用户名,然后为其逐一创建用户账户并设置密码。首先创建用户名称的列表文件 users.txt,每个用户名称单独一行:
[root@wen ~]# vim users.txt
andy
barry
carl
duke
eric
george
[root@wen ~]# vim Example.sh
#!/bin/bash
read -p “Enter The Users Password : ” PASSWD ## -p 参数向用户显示一段提示信息
for UNAME in cat users.txt
do
id UNAME &> /dev/null ##/dev/null 是一个被称作 Linux 黑洞的文件,把输出信息重定向到这个文件等同于删除数据(类似于没有回收功能的垃圾箱),
if [
UNAME &> /dev/null ##/dev/null 是一个被称作 Linux 黑洞的文件,把输出信息重定向到这个文件等同于删除数据(类似于没有回收功能的垃圾箱), if [
? -eq 0 ]
?判断命令是否执行成功,即判断该用户是否已经存在thenecho“Alreadyexists”elseuseradd
?
判
断
命
令
是
否
执
行
成
功
,
即
判
断
该
用
户
是
否
已
经
存
在
t
h
e
n
e
c
h
o
“
A
l
r
e
a
d
y
e
x
i
s
t
s
”
e
l
s
e
u
s
e
r
a
d
d
UNAME &> /dev/null
echo “
PASSWD"|passwd−−stdin
P
A
S
S
W
D
"
|
p
a
s
s
w
d
−
−
s
t
d
i
n
UNAME &> /dev/null
if [
?−eq0]thenecho“
?
−
e
q
0
]
t
h
e
n
e
c
h
o
“
UNAME , Create success”
else
echo “$UNAME , Create failure”
fi
fi
done
4.3.3 while 条件循环语句
while 条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,通过判断条件测试的真假来决定是否继续执行命令,若条件为真就继续执行,为假就结束循环。 while 条件测试操作——>do 命令序列 ——>done
4.3.4 case条件测试语句
case 条件测试语句和 switch 语句的功能非常相似!case 语句是在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试;而如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令。
[root@wen ~]# vim Checkkeys.sh
#!/bin/bash
read -p “请输入一个字符,并按 Enter 键确认:” KEY
case “$KEY” in
[a-z]|[A-Z])
echo “您输入的是 字母。”
;;
[0-9])
echo “您输入的是 数字。”
;;
*)
echo “您输入的是 空格、功能键或其他控制字符。”
esac
[root@wen ~]# bash Checkkeys.sh
请输入一个字符,并按 Enter 键确认:6
您输入的是 数字。
4.4 计划任务服务程序
crond服务设置任务参数格式:
时间周期设置:分钟、小时、日、月、星期
任务内容设置:run_command
分 取值为 0~59 的整数
时 取值为 0~23 的任意整数
日 取值为 1~31 的任意整数
月 取值为 1~12 的任意整数
星期 取值为 0~7 的任意整数,其中 0 与 7 均为星期日
命令 要执行的命令或程序脚本
说明:除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示 8 月、9 月和 12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的 12~15 日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔 2 分钟执行一次任务)。
复习题:
1.Vim 编辑器的三种模式分别是什么?
答:末行模式、编辑模式(也叫输入模式或插入模式)、命令模式
2.怎么从输入模式切换到末行模式?
答:回到命令模式(Esc)——>(:)
3.一个完整的 Shell 脚本应该哪些内容?
答:脚本声明、注释信息、可执行命令
4.分别解释 Shell 脚本中
0与
0
与
3 变量的作用。
答:
0:是脚本名称
0
:
是
脚
本
名
称
3:是脚本执行时接收的第三个参数
5.if 条件测试语句有几种结构,最灵活且最复杂的是哪种结构?
答:三种。if单分支、if双分支、if多分支条件测试语句;
其中最灵活的并且最复杂的是if多分支条件测试语句。
6.for 条件循环语句的循环结构是什么样子的?
答:for 变量名 in 取值列表 ——> do 命令序列 ——>done
7.若在 while 条件循环语句中使用 true 作为循环条件,那么会发生什么事情?
答:因条件测试值永久为 true,因此脚本中循环部分会无限地重复执行下去,直到碰到 exit命令才会结束。
8.如果需要依据用户的输入参数执行不同的操作,最方便的条件测试语句是什么?
答:case条件语句
9.Linux 系统的长期计划任务所使用的服务是什么,其参数格式是什么?
答:crond服务程序;
参数格式:时间周期设置:分钟、小时、日、月、星期
任务内容设置:run_command