Vim编辑器与Shell命令脚本
Posted myxxw2010
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vim编辑器与Shell命令脚本相关的知识,希望对你有一定的参考价值。
一、Vim文本编辑器
1、打起精神要牢记
Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数。
2、Vim编辑器的特点
- Vim全称为Vi Improved,是Vi编辑器的提升版本;
- 添加了代码着色功能(最大的改进);
- 某些编程场景下可自动修正错误代码。
3、Vim编辑器的3种模式
- 命令模式:控制光标,可对文本复制、粘贴、删除和查找等操作。
- 输入模式:文本录入。
- 末行模式:保存或退出,设置编辑环境,执行命令等。
4、Vim编辑器常用命令
1)命令模式常用命令
命令 | 作用 |
dd | 删除(剪切)光标所在整行 |
5dd | 删除(剪切)从光标处开始的5行 |
yy | 复制光标所在整行 |
5yy | 复制从光标处开始的5行 |
n | 显示搜索命令定位到的下一个字符串 |
N | 显示搜索命令定位到的上一个字符串 |
u | 撤销上一步的操作 |
p | 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 |
2)末行模式常用命令
命令 | 作用 |
: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 |
?字符串 | 在文本中从下至上搜索该字符串 |
/字符串 | 在文本中从上至下搜索该字符串 |
二、用Vim编辑器配置主机名称、网卡信息和软件仓库
1、配置主机名称
配置文件位置:/etc/hostname
查看主机名:hostname
如果没有生效需要reboot
2、配置网卡信息
配置文件:/etc/sysconfig/network-scripts/ifcfg-ens160
参数说明:
设备类型:TYPE=Ethernet
地址分配模式:BOOTPROTO=static
网卡名称:NAME=ens160
是否启动:ONBOOT=yes
IP地址:IPADDR=192.168.10.10
子网掩码:NETMASK=255.255.255.0
网关地址:GATEWAY=192.168.10.1
DNS地址:DNS1=192.168.10.1
配置完成后需要重启网络测试是否连通。
nmcli connection reload ens160
3、配置软件仓库
软件仓库是一种能进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。
Yum与DNF软件仓库的配置文件是通用的,填写好配置文件信息后,这两个软件仓库的命令都是可以正常使用。
配置步骤:
第1步:进入/etc/yum.repos.d/目录中(该目录存放软件仓库配置文件)
第2步:用Vim编辑器创建名为rhel8.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面的配置参数并保存退出。
仓库名称:唯一性的标识名称,不应与其他软件仓库发生冲突。
描述信息(name):介绍性的词,易于识别软件仓库的用处。
仓库位置(baseurl):软件包获取方式,可使用FTP或HTTP下载,也可是本地的文件(需要在后面添加file参数)。
是否启用(enabled):设置此源是否可用;1为可用,0为禁用。
是否校验(gpgcheck):设置此源是否校验文件;1为校验,0为不校验。
公钥位置(gpgkey):若上面的参数开启了校验功能,则此处为公钥文件位置。若没有开启,则省略不写。
root@linuxprobe ~]# cd /etc/yum.repos.d/
[root@linuxprobe yum.repos.d]# vim rhel8.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0
第3步:按配置参数中的仓库位置挂载光盘,并把挂载信息写入/etc/fstab文件中。
[root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom
[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /media/cdrom: WARNING: device write-protected, mounted read-only.
[root@linuxprobe yum.repos.d]# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0
第4步:使用“dnf install httpd -y”命令检查软件仓库是否已经可用。
[root@linuxprobe ~]# dnf install httpd -y
三、编辑Shell脚本(建议脚本文件使用.sh后缀)
1、Shell脚本的2种工作方式
交互式(Interactive) | 用户每输入一条命令就立即执行 |
批处理(Batch) | 编写Shell脚本,Shell一次性执行脚本中诸多的命令 |
2、Shell脚本的简单组成与执行
第1行 | #! | 告诉系统使用哪种Shell解释器来执行该脚本 | 必须存在 |
第2行 | # | 注释功能,对脚本作用进行补充说明 | 建议包含 |
第3行开始 | Linux命令 | 要Shell执行的一连串命令 | 必须包含 |
[root@linuxprobe ~]# vim example.sh
#!/bin/bash
#For Example BY linuxprobe.com
pwd
ls -al
3、执行Shell脚本的2种方式
Bash命令直接运行Shell脚本:bash 脚本名称.sh
,/ 后跟脚本的完整路径(需设置脚本文件权限):./脚本文件.sh
[root@linuxprobe ~]# ./example.sh
bash: ./Example.sh: Permission denied
[root@linuxprobe ~]# chmod u+x example.sh
[root@linuxprobe ~]# ./example.sh
4、Shell脚本支持的参数
$0 | 当前Shell脚本程序的名称 |
$# | 执行Shell脚本时共传入几个位置参数 |
$* | 列出所有的传入参数 |
$? | 上一次命令的执行返回值。(执行成功返回0,否则返回非0值) |
$1、$2、$3....... | 分别对应执行Shell脚本时传入的第1个、第2个、第3个、第N个位置参数 |
5、Shell脚本支持的条件表达式(条件测试语句)
1)条件表达式格式
条件表达式两边均应有一个空格,最外层由[]括起来
2)条件表达式分类
条件表达式 | 用途 | 作用 |
文件测试 | 判断文件是否存在或权限是否满足等 |
|
逻辑测试 | 判断条件表达式是否成立 |
|
整数值比较 | 仅与整数进行比较,不能与字符串、文件等内容一起操作,也不能使用“=”、“>”、"<“等来判断。因为等号与赋值命令符冲突,大于号和小于号分别与输出重定向命令符和输入重定向命令符冲突 |
|
字符串比较 | 判断测试字符串是否为空值,或两个字符串是否相同。常用来判断某个变量是否未被定义(即内容为空值)。 |
|
3)条件表达式的返回值
返回值 | 含义 |
0 | 条件成立(True) |
非零值 | 条件不成立(False) |
4)应用示例-判断当前空闲内存值是否不足
[root@linuxprobe ~]# free -m
total used free shared buff/cache available
Mem: 1966 1374 128 16 463 397
Swap: 2047 66 1981
[root@linuxprobe ~]# free -m | grep Mem:
Mem: 1966 1374 128 16 463 397
[root@linuxprobe ~]# free -m | grep Mem: | awk print $4
128
[root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk print $4`
[root@linuxprobe ~]# echo $FreeMem
128
[root@linuxprobe ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
Insufficient Memory
四、流程控制语句
1、if条件测试语句
0)if条件测试语句注意事项:
- if 与 fi必须成对出现
- if、fi、then、elif、else关键字前后必须用空格进行间隔
- 当then与if 同行时,if 与 then 间用;间隔
- else 是最后一种判断条件,其后不能再出现then关键字
1)单分支结构
2)双分支结构
3)多分支结构
4)应用示例——判断分数
#!/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
2、for循环
0)注意事项
for 与 in 搭配使用
for 与 do done 搭配使用(do与done成对出现)
1)for循环格式:
for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理。
2)应用示例——批量创建用户
- /dev/null是一个被称作Linux黑洞的文件,把输出信息重定向到这个文件等同于删除数据(类似于没有回收功能的垃圾箱),可以让用户的屏幕窗口保持简洁。
vim users.txt
andy
barry
carl
duke
eric
george
vim addusers.sh
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Already exists"
else
useradd $UNAME
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
echo "$UNAME , Create success"
fi
done
bash addusers.sh
Enter The Users Password : linuxprobe
andy , Create success
barry , Create success
carl , Create success
duke , Create success
eric , Create success
george , Create success
tail -6 /etc/passwd
andy:x:1001:1001::/home/andy:/bin/bash
barry:x:1002:1002::/home/barry:/bin/bash
carl:x:1003:1003::/home/carl:/bin/bash
duke:x:1004:1004::/home/duke:/bin/bash
eric:x:1005:1005::/home/eric:/bin/bash
george:x:1006:1006::/home/george:/bin/bash
3、while循环
1)while循环注意事项
- while循环通过判断条件的真假来决定是否继续执行命令,条件为真就继续执行,为假就结束循环。
- 根据条件重复执行命令
- 执行前并不确定最终执行的次数
- do与done成对出现
2)应用示例——猜数字
提示:
获得随机数字 :使用$RANDOM变量来调取出一个随机的数值(范围为0~32767),并将其对1000进行取余操作,同时使用expr命令取得其结果。
获取用户输入:通过read读取用户的键盘输入值。
vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
do
read -p "请输入您猜测的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是 $PRICE"
echo "您总共猜测了 $TIMES 次"
exit
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
4、case条件测试语句
1)case 注意事项
case语句是在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试;如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令。
2)应用示例——判断用户输入类型
vim Checkkeys.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
五、计划任务服务程序
1、计划任务分类
一次性计划任务:执行1次就结束。(如:今晚23:30重启网站服务。)
周期性计划任务:重复执行。(如:每周一凌晨3:25把/home/wwwroot目录备份为backup.tar.gz)
2、单次计划任务(at 时间)
1)注意事项
- 使用ctrl + d 键来结束计划任务的编辑
- 可使用atrm 计划任务编号 来删除某条计划任务
2) at命令的参数及其作用
参数 | 作用 |
-f | 指定包含命令的任务文件 |
-q | 指定新任务名称 |
-l | 显示待执行任务列表 |
-d | 删除指定待执行任务 |
-m | Vim编辑器与Shell命令脚本 |