Vim编辑器与Shell命令脚本
Vim文本编辑器
- 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
- 输入模式:正常的文本录入。
- 末行模式:保存或退出文档,以及设置编辑环境。
- dd 删除当前行
- 5dd 删除光标处开始5行
- yy复制当前行
- 5yy复制光标处开始5行
- n搜索定位到下一个字符串
- N搜索定位上一个字符串
- u 撤销上一步操作
- p 将之前删除(dd)或复制(yy)过得数据粘贴到光标后面
- :w 保存
- :q 退出
- :q! 强制退出
- :wq! 强制保存退出
- :set nu 显示行号
- :set nonu 不显示行号
- :命令 执行该命令
- :整数 跳转到该行
- 😒/one/two 当前所在行第一个one替换成two
- 😒/one/two/g 当前所在行所有one替换成two
- :%s/one/two/g 全文所有one替换成two
- ?字符串 从下至上搜索该字符串
- /字符串 从上值下搜索该字符串
- 配置Yum软件仓库
第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。
cd /etc/yum.repos.d
vim rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并保存退出
[rhel-media]:Yum软件仓库唯一标识符,避免与其他仓库冲突。
name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处。
baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)。
enabled=1:设置此源是否可用;1为可用,0为禁用。
gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验。
gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。
第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。
mkdir -p /media/cdrom
mount /dev/cdrom /media/cdrom
vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 default 0 0
第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。
yum install httpd
编写Shell脚本
- 申明使用的bash
#! /bin/bash
- 执行bash脚本
bash testbash.sh
chmod u+x testbash.sh
./ testbash.sh
chmod u+x testbash.sh
sh testbash.sh
- 接受参数
$0对应的是当前Shell脚本程序的名称
$
$*对应的是所有位置的参数值
$?对应的是显示上一次命令的执行返回值
$1、$2、$3……则分别对应着第N个位置的参数值
- 判断用户的参数
Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值。
[ 条件表达式 ]
文件测试语句;
文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符
逻辑测试语句;
整数值比较语句;
字符串比较语句。
- Shell终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令
- Shell终端中逻辑“或”的运算符号是||,表示当前面的命令执行失败后才会执行它后面的命令
- 逻辑语句是“非”,在Linux系统中的运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值
- 数字比较符
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
- 获取剩余内存量
free -m | grep Mem: | awk '{print $4}'
- 字符串比较
= 是否相同
!= 是否不同
-z 是否为空
流程控制语句
- if
if 条件
then
fi
DIR="/media/cdrom"
if [ ! -e $DIR]
then
mkdir -p $DIR
fi
- if else
if 条件
then
else
fi
ping需要通过-c参数来规定尝试的次数,并使用-i参数定义每个数据包的发送间隔,以及使用-W参数定义等待超时时间
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line"
else
echo "Host $1 is Off-line"
fi
- if then elif then else fi
#! /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 85 ] && [ $GRADE -le 100 ];
then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi
- for···in··· do done
#! /bin/bash
HLIST=$(cat ~/ipadds.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line"
else
echo "Host $1 is Off-line"
fi
done
- while ··· do done
TIMES=0
while [ TIMES -le 10 ]
do
let TIMES++
echo $TIMES
done
- case ··· in
#! /bin/bash
read KEY
case "$KEY" in
[a-z]|[A-Z])
echo "字母";;
[0-9])
echo "数字";;
*)
echo "特殊字符"
esac
计划任务服务程序
- 一次性任务
at time
创建任务
at 23:30
at > systemctl restart httpd
at > Ctrl + D结束编写任务
echo "systemctl restart httpd" | at 23:30
查看任务列表
at -l
删除任务
atrm 任务序号
- 周期性任务
crontab
创建任务
crontab -e
查看任务
crontab -l
删除任务
crontab -r
50 3 2 1 * commond
分 时 日 月 星期 命令
分 0~59
时 0~23
日 1~31
月 1~12
星期 0~7 ,0与7均为星期日
命令
每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“/2”表示每隔2分钟执行一次任务)之外。
注意事项
在crond服务的配置参数中,可以像Shell脚本那样以
计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。
参考书目
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理