文章目录
一、 Vim 编辑器
1 . 介绍及使用
三种模式:
- 命令模式: 控制光标移动,可对文本进行复制,粘贴,删除和查找等工作。
- 输入模式: 正常对文本进行写入。
- 末行模式: 保存或者退出文档,以及设置编辑环境。
命令模式下的常用命令
| 命令 | 作用 |
|---|---|
| dd | 删除(剪切)光标所在的整行 |
| 5dd | 删除 (剪切) 贯标所处开始的 5 行 |
| yy | 复制光标所在的整行 |
| 5yy | 复制光标处的五行 |
| n | 显示搜索命令定位到下一个字符串 |
| N | 显示搜索命令定位到上一个字符串 |
| u | 撤销上一步操作 |
| p | 将之前删除 (dd) 或者复制(yy) 的数据粘贴过来 |
😒 😒 😒 😒 😒 😒 😒 😒 😒 😒 😒 😒 🐱 : 🐹
末行模式中常用的命令
| 项目 | Value |
|---|---|
| :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 |
| ?字符串 | 在文本中从下至上搜索该字符创 |
| /字符串 | 从文本中从上到下搜索该字符串 |
🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪🐪

二、 编写 Shell 脚本
1. 判断用户参数
按照测试对象来划分,条件测试语句分为 4 中:
- 文件测试语句;
- 逻辑测试语句
- 整数值比较语句
- 字符串比较语句
文件测试即使用指定条件来判断文件是否存在或者权限是否满足等情况的运算符。
| 项目 | 作用 |
|---|---|
| -d | 测试文件是否为目录类型 |
| -e | 测试文件是否存在 |
| -f | 判断是否为一般文件 |
| -r | 测试当前用户是否有权限读取 |
| -w | 测试当前用户是否有权限写入 |
| -x | 测试当前用户是否有权限执行 |
下面 使用文件测试判断 /etc/fstab 是否为一个目录类型的文件,然后通过 Shell 解释器的 内设 $? 变量来显示上一条命令执行后的 返回值。如果返回值是 0 ,则目录存在;如果是其他非零值,则意味着他不是目录,或者这个目录不存在。

-
&&为逻辑"与",只有当前面的语句执行成功之后,才会执行后面的语句 。 -
||为逻辑"或",只有当前语句执行失败之后,才会执行后面的语句。 -
**
!**为逻辑"非",代表对逻辑测试结果取反值;之前如果为正确的则会变成错误,若错误则变回正确。
栗子
[ $USER = root ] && echo "administrator"
[ ! $USER=root ] && echo "user" || echo "root"
可用的整数比较运算符
| 项目 | 作用 |
|---|---|
-eq | 是否 等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或者小于 |
-ge | 是否大于或等于 |
栗子:

字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。它经常用来判断某个变量是否被定义(即内容为空值),理解起来也比较简单。
常见字符串比较运算符
| 项目 | 作用 |
|---|---|
= | 比较字符串的内容是否相同 |
!= | 比较字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
[ -z $String ]
echo $LANG
[ ! $LAG="en.US" ] && echo "Not en.US"
😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊
2. 流程控制语句
if 条件测试语句:
if 条件语句的单分支结构由 if、then、fi 关键词组成,而且只有条件成立之后才会执行与设定的指令。
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host is On-line"
else
echo "Host is Off-lin"
fi
写在一行的时候需要 ; 进行间隔
#!/bin/bash
read -p "Enter your source (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
for 循环条件语句:
for 循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理。当要处理的数据有范围时,使用费 for 循环语句即可。
栗子:
#!/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 &> /dev/null
echo $PASSWD | passwd --stdin $UNAME &> /dev/null
echo "$UNAME Create success"
fi
done
while 条件循环语句:
while 条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,完全不同于 for 循环语句中有目标,有范围的使用场景。
栗子:
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
while true
do
read -p "please submit: " INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "$TIMRS,right"
exit
elif [ $INT -gt $PRICE ] ; then
echo "$TIMES,hight"
else
echo "$TIMES,lower"
fi
done
~
case 条件循环语句:
case 语句是在多个条件范围内匹配数据,若匹配成功则执行相关命令并且结束整个条件测试,如果数据不在所列出的范围内,则会执行(*) 中所定义的默认命令。
栗子:
#!/bin/bash
read -p "Enter the keys:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "zimu"
;;
[0-9])
echo "shuzi"
;;
*)
echo "other"
esac

3. 计划任务服务程序
计划任务分为两种:
- 一次性计划任务:任务只执行一次,一般用于临时性的需求 。
- 长期性计划任务:周期性的 ,有规律的去执行任务。
at 命令用于 一次性计划任务 ,只需要写成 at 时间 的形式即可,如果需要查看未执行的任务,使用 at -l 命令;要删除一个任务,使用 atrm 任务的序号。
at 命令中 的参数以及作用
| 参数 | 作用 |
|---|---|
| -f | 指定包含命令的任务文件 |
| -q | 指定新任务名称 |
| -l | 显示等待执行任务的列表 |
| -d | 删除指定的待执行任务 |
| -m | 任务执行后向用户发邮件 |

ctrl + d 结束命令输入 。
# 写入定时任务
echo "systemctl restart sshd" | at 20:58
# 查看待执行的定时任务列表
at -l
# 删除定时任务
atrm 2
上面的时间都是固定时间,如果我们要在脚本运行之后的两分钟之后执行该如何写:
# 两分钟之后执行该任务
at now +2 MINUTE
HOUR小时DAY日MONTH月
😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀
crond 服务用于执行长期计划任务。创建和编辑任务的命令为 crontab -e,查看命令为 crontab -l,删除命令为 crontab -r ,如果我们是以管理员的身份登录,可以使用 -u 参数编辑他人的计划任务。
| 参数 | 作用 |
|---|---|
| -e | 编辑计划任务 |
| -u | 指定用户名称 |
| -l | 列出任务列表 |
| -r | 删除任务 |
# 给用户添加任务
crontab -u linuxprobe -e
# 查看任务
crontab -u linuxprobe -l

注意:在 crond 服务的计划参数中,所有的命令一定要使用绝对路径来写。如果不知道绝对路径可以使用 whereis 命令来进行查询。
计划任务中的 分 字段不许有数值,绝对不能为空或者是 * 号,而 日 和 星期 字段不能同时使用,否则会发生冲突.










