2021-09-12 linux学习-基础操作(四)之vim、shell、计划任务

Vim文本编辑器

命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。

命令模式中最常用的一些命令

命令	作用
dd	    删除(剪切)光标所在整行
5dd	    删除(剪切)从光标处开始的5行
yy	    复制光标所在整行
5yy	    复制从光标处开始的5行
n	    显示搜索命令定位到的下一个字符串
N	    显示搜索命令定位到的上一个字符串
u	    撤销上一步的操作
p	    将之前删除(dd)或复制(yy)过的数据粘贴到光标后面

a键   在光标后一位进入输入模式
i键   在光标当前位进入输入模式
o键   在光标下一行创建空行进入输入模式

输入模式:正常的文本录入。

ESC 进入末行模式

末行模式:保存或退出文档,以及设置编辑环境。

末行模式中最常用的一些命令

命令	        作用
: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脚本

Shell脚本命令的工作方式有下面两种

交互式(Interactive):用户每输入一条命令就立即执行。

批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。

编写简单的脚本

直接输入一些命令即可

接收用户的参数

例子

vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"

bash example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six。
第1个参数为one,第5个为five。

判断用户的参数

条件测试语句格式

【 条件表达式 】

按照测试对象来划分,条件测试语句可以分为4种

1 逻辑测试语句

2 文件测试语句

3 整数值比较语句

4 字符串比较语句

逻辑测试语句

&& 是逻辑“与”,只有当前面的语句执行成功的时候才会执行后面的语句。
|| 是逻辑“或”,只有当前面的语句执行失败的时候才会执行后面的语句。
!  是逻辑“非”,代表对逻辑测试结果取反值;之前若为正确则变成错误,若为错误则变成正确。

文件测试所用的参数

操作符	作用
-d	    测试文件是否为目录类型
-e	    测试文件是否存在
-f	    判断是否为一般文件
-r	    测试当前用户是否有权限读取
-w	    测试当前用户是否有权限写入
-x	    测试当前用户是否有权限执行

 可用的整数比较运算符

操作符	作用
-eq	    是否等于
-ne	    是否不等于
-gt	    是否大于
-lt    	是否小于
-le	    是否等于或小于
-ge	    是否大于或等于

常见的字符串比较运算符

操作符	作用
=	    比较字符串内容是否相同
!=	    比较字符串内容是否不同
-z	    判断字符串内容是否为空

流程控制语句

if条件测试语句

if条件测试语句可以让脚本根据实际情况自动执行相应的命令

单分支

if 条件测试操作
then    
        命令序列
fi 

双分支

if 条件测试操作
then
        命令序列1
else
        命令序列2
fi

多分支

if 条件测试操作1 ; then
        命令序列1
elif 条件测试操作2 ; then
        命令序列2
else
        命令序列3 
fi

for条件循环语句

for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理。当要处理的数据有范围时,使用for循环语句就再适合不过了

for 变量名 in `取值列表`
do
        命令序列
done

while条件循环语句

while条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,完全不同于for循环语句中有目标、有范围的使用场景。while循环语句通过判断条件测试的真假来决定是否继续执行命令,若条件为真就继续执行,为假就结束循环。

while 条件测试操作
do
        命令序列
done

case条件测试语句

case语句是在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试;如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令

case "变量值" in
        模式1)
                命令序列1
                ;;
        模式2)
                命令序列2
                ;;
        *)
                默认命令序列
esac

计划任务服务程序

一次性计划任务

 at命令的参数及其作用

参数	作用
-f	    指定包含命令的任务文件
-q	    指定新任务名称
-l	    显示待执行任务列表
-d	    删除指定待执行任务
-m	    任务执行后给用户发邮件

删除任务

atrm 序号

特殊场景

at now +2 MINUTE

长期性计划任务

crontab命令的参数及其作用

参数	作用
-e	    编辑计划任务
-u	    指定用户名称
-l	    列出任务列表
-r	    删除计划任务

使用crond设置任务的参数字段说明

字段	说明
分钟	取值为0~59的整数
小时	取值为0~23的任意整数
日期	取值为1~31的任意整数
月份	取值为1~12的任意整数
星期	取值为0~7的任意整数,其中0与7均为星期日
命令	要执行的命令或程序脚本

格式一

* * * * * *
| | | | | | 
| | | | | +-- Year              (range: 1900-3000)
| | | | +---- Day of the Week   (range: 1-7, 1 standing for Monday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month  (range: 1-31)
| +---------- Hour              (range: 0-23)
+------------ Minute            (range: 0-59)

格式二

@reboot    :    Run once after reboot.               重启时执行一次
@yearly    :    Run once a year, ie.  "0 0 1 1 *".   一年执行一次,1月1号0点0分执行
@annually  :    Run once a year, ie.  "0 0 1 1 *".   一年执行一次,1月1号0点0分执行
@monthly   :    Run once a month, ie. "0 0 1 * *".   一月执行一次,每月1号0点0分执行
@weekly    :    Run once a week, ie.  "0 0 * * 0".   一周执行一次
@daily     :    Run once a day, ie.   "0 0 * * *".   一天执行一次
@hourly    :    Run once an hour, ie. "0 * * * *".   一小时执行一次

上一篇:Linux修改MAC地址方法


下一篇:Three.js的DEM建模【数字高程模型】