Day-03-Vim文本编辑器与Shell命令脚本

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 ] ?thenechoAlreadyexistselseuseradd ? 判 断 命 令 是 否 执 行 成 功 , 即 判 断 该 用 户 是 否 已 经 存 在 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"|passwdstdin 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值