linux专题(三)Vim编辑器与Shell命令脚本

简介
本文主要用于学习Vim编辑器及Shell脚本,本文的目录结构与参考目录大致相同,但是会包含一些实践

主要参考 《Linux就该这么学》

及命令大全https://www.linuxcool.com/

Vim文本编辑器
vim三种模式:

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

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

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

image

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

命令 作用
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
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串
编写简单文档
[root@iZ2ze9fp041k3gtah0ztnmZ test]# vim zhao56.txt
如下创建了临时文件

image

输入a/i的时候进入到如下的输入模式

image

输入o的时候进入输入模式,但是会在光标下方创建一个空行

image

输入内容hello zhao56!,编辑完成想要保存或退出时,必须点击Esc 返回命令模式,输入:wq 切换到末行模式保存

image

查看文档

[root@iZ2ze9fp041k3gtah0ztnmZ test]# cat zhao56.txt
hello zhao56!
再次编辑输入hello tomorrow点击Esc 输入:q 会提示如下

image

因为此时修改了内容,退出但是不保存的时候是不允许的只能强制退出或者保存退出,此时选择输入:q!强制退出

此时文件内容未保存

[root@iZ2ze9fp041k3gtah0ztnmZ test]# cat zhao56.txt
hello zhao56!
配置主机名称
为了更好的在集群环境中区分主机,需要对主机配置一个主机名,linux系统中主机名大多保存在/etc/hostname中,接下来将主机名修改为zhao56

修改/etc/hostname主机名称文件

删除原始主机名并修改为zhao56 之后保存、退出

使用hostname验证是否修改成功

[root@iZ2ze9fp041k3gtah0ztnmZ ~]# cd /etc/
[root@iZ2ze9fp041k3gtah0ztnmZ etc]# ls

省略######

hostname

省略######

[root@iZ2ze9fp041k3gtah0ztnmZ etc]# cat hostname
iZ2ze9fp041k3gtah0ztnmZ
[root@iZ2ze9fp041k3gtah0ztnmZ etc]# vim hostname

有事主机名称改变不会立即同步到系统中,需要重启后在查看

[root@iZ2ze9fp041k3gtah0ztnmZ etc]# hostname
iZ2ze9fp041k3gtah0ztnmZ

忘记重启命令了双击Tab提示

[root@iZ2ze9fp041k3gtah0ztnmZ etc]# re
read reboot repodiff reset
readarray recode-sr-latin repo-graph resize2fs
readelf red repomanage resizecons
readlink redhat_lsb_trigger.x86_64 repoquery resizepart
readonly rename repo-rss restorecon
readprofile renice reposync return
realpath repoclosure repotrack rev

重启

[root@iZ2ze9fp041k3gtah0ztnmZ etc]# reboot

如下为修改hostname

image

如下为重启后连接,此处发现已经修改成功,命令验证一下

image

[root@zhao56 ~]# hostname
zhao56
配置网卡信息
现在有一个名称为ifcfg-ens160的网卡设备,将其配置为开机自启动,并且IP地址、子网、网关等信息由人工指定,其步骤应该如下所示

切换到/etc/sysconfig/network-scripts/目录下

[root@zhao56 ~]# cd /etc/sysconfig/network-scripts/
[root@zhao56 network-scripts]# ls
ifcfg-eth0 ifdown-ippp ifdown-routes ifup ifup-ipv6 ifup-ppp ifup-tunnel
ifcfg-lo ifdown-ipv6 ifdown-sit ifup-aliases ifup-isdn ifup-routes
我们的网卡是ifcfg-eth0 备份这个文件

[root@zhao56 network-scripts]# cp ifcfg-eth0 ifcfg-eth0.kb
[root@zhao56 network-scripts]# ls
ifcfg-eth0 ifdown-ippp ifdown-sit ifup-bnep ifup-plusb ifup-TeamPort
ifcfg-eth0.kb ifdown-ipv6 ifdown-Team ifup-eth ifup-post ifup-tunnel
修改ifcfg-eth0文件写入/修改如下参数,根据自己情况修改

修改网络配置

[root@zhao56 network-scripts]# vim ifcfg-eth0
BOOTPROTO=dhcp
DEVICE=eth0
ONBOOT=yes
STARTMODE=auto
TYPE=Ethernet
USERCTL=no

"ifcfg-eth0" 10L, 338C 1,1 All

设备类型:TYPE=Ethernet

地址分配模式:BOOTPROTO=static

网卡名称:NAME=eth0

是否启动:ONBOOT=yes

IP地址:IPADDR=xxx.xxx.xx.xx

子网掩码:NETMASK=255.255.255.0

网关地址:GATEWAY=xxx.xxx.xx.xx

DNS地址:DNS1=xxx.xxx.xx.x

重启网络测试是否连通

重启网络

[root@zhao56 ~]# service network restart
Restarting network (via systemctl): [ OK ]

ping 百度可以ping通

[root@zhao56 ~]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=50 time=16.8 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=50 time=16.8 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=3 ttl=50 time=16.8 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 16.829/16.839/16.850/0.150 ms
编写shell脚本
Shell支持各种变量与参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。Shell脚本命令的工作方式有两种:交互式和批处理

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

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

编写简单的脚本
将Linux命令按照顺序写入一个文件中,就是一个简单的脚本

如下 查看当前所在工作路径并列出当前目录下所有的文件及属性信息

[root@zhao56 test]# vim zhao56demo.sh
[root@zhao56 test]# cat zhao56demo.sh

这是一个测试例子

pwd
ls -aq
Shell脚本名称可以任务指定,但是一般以.sh后缀结尾,表示是一个脚本文件,文件中可以用#来注释该脚本的内容,接下来执行

[root@zhao56 test]# bash zhao56demo.sh
/usr/local/test
. .. zhao56demo.sh

上述脚本除了用bash直接永兴以外可以通过全路径执行

[root@zhao56 test]# /usr/local/test/zhao56demo.sh
-bash: /usr/local/test/zhao56demo.sh: Permission denied

权限不足,给文件授权

[root@zhao56 test]# chmod u+x zhao56demo.sh
[root@zhao56 test]# /usr/local/test/zhao56demo.sh
/usr/local/test
. .. zhao56demo.sh
接收用户的参数
为了更好满足用户实时需求,以便更灵活的工作,可以向命令执行时那样,接收用户输入的参数

Shell脚本已经内置了接口参数的变量,变量之间使用空格间隔,如$0对应当前脚本的名称,$#对应的是总共有几个参数,$*对应所有位置的参数值,$?对应 上个命令的退出状态,或函数的返回值 ,$1、$2、$3、$4...对应第N个位置的参数值

修改之前的脚本

[root@zhao56 test]# vim zhao56demo.sh
[root@zhao56 test]# cat zhao56demo.sh

这是一个测试例子

pwd
ls -aq
echo "上次执行结果是$?"
echo "当前脚本名称为$0"
echo "当前总共有$#个参数,分别是$*"
echo "第一个参数为$1,第三个参数为$3"
[root@zhao56 test]# bash zhao56demo.sh
/usr/local/test
. .. zhao56demo.sh
上次执行结果是0
当前脚本名称为zhao56demo.sh
当前总共有0个参数,分别是
第一个参数为,第三个参数为
[root@zhao56 test]# bash zhao56demo.sh h1 h2
/usr/local/test
. .. zhao56demo.sh
上次执行结果是0
当前脚本名称为zhao56demo.sh
当前总共有2个参数,分别是h1 h2
第一个参数为h1,第三个参数为
[root@zhao56 test]# bash zhao56demo.sh h1 h2 h3
/usr/local/test
. .. zhao56demo.sh
上次执行结果是0
当前脚本名称为zhao56demo.sh
当前总共有3个参数,分别是h1 h2 h3
第一个参数为h1,第三个参数为h3
判断用户的参数
Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回非零值

格式:[ 条件表达式 ]

注:条件表达式的两边都有一个空格

按照测试对象划分,条件测试语句分为如下几种

文件测试语句

逻辑测试语句

整数值比较语句

字符串比较语句

文件测试
即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符

文件测试所用的参数:

操作符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
如下测试/etc/fstab是否是一个目录类型的文件,返回0为目录存在,返回非0值则目录不存在/不是目录:

[root@zhao56 local]# [ -d /etc/fstab ]
[root@zhao56 local]# echo $?
1
[root@zhao56 local]# cd /etc/

查看文件类型

[root@zhao56 etc]# file fstab
fstab: ASCII text
[root@zhao56 etc]# cd /usr/local/test/
[root@zhao56 test]# ls
zhao56demo.sh
[root@zhao56 test]# file zhao56demo.sh
zhao56demo.sh: UTF-8 Unicode text
[root@zhao56 test]# [ -d /usr/local/test/zhao56demo.sh ]
[root@zhao56 test]# echo $?
1
[root@zhao56 test]# [ -d /usr/local/test ]
[root@zhao56 test]# echo $?
0
[root@zhao56 test]# cd ..
[root@zhao56 local]# file test/
test/: directory
判断文件是否存在

[root@zhao56 test]# [ -f zhao56demo.sh ]
[root@zhao56 test]# echo $?
0
[root@zhao56 test]# [ -f zhao56demo.sh1 ]
[root@zhao56 test]# echo $?
1
逻辑测试
与操作前面返回0则后面执行

如果为一般文件则输出EXIST否则无返回

[root@zhao56 test]# [ -e zhao56demo.sh1 ] && echo "EXIST"
[root@zhao56 test]# [ -e zhao56demo.sh ] && echo "EXIST"
EXIST
或操作前面返回非0则后面执行

[root@zhao56 test]# echo $USER
root
[root@zhao56 test]# [ $USER = root ] || echo "user"
[root@zhao56 test]# [ $USER = root1 ] || echo "user"
user
非操作表示取反,前面判断返回0表示成功,加上!表示不成功

注:!前后一定要有空格

[root@zhao56 test]# [ ! $USER = root1 ] || echo "user"
[root@zhao56 test]# [ ! $USER = root ] || echo "user"
user
进阶,判断当前用户是user还是root

[root@zhao56 test]# [ ! $USER = root1 ] && echo "user" || echo "root"
user
[root@zhao56 test]# [ ! $USER = root ] && echo "user" || echo "root"
root
整数比较
仅是对数字的操作

可用的整数比较运算符:

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

是否大于

[root@zhao56 test]# [ 10 -gt 10 ]
[root@zhao56 test]# echo $?
1
[root@zhao56 test]# [ 10 -gt 11 ]
[root@zhao56 test]# echo $?
1
[root@zhao56 test]# [ 10 -gt 9 ]
[root@zhao56 test]# echo $?
0

是否等于

[root@zhao56 test]# [ 10 -eq 9 ]
[root@zhao56 test]# echo $?
1
[root@zhao56 test]# [ 10 -eq 10 ]
[root@zhao56 test]# echo $?
0
进阶:

判断

查看内存使用量情况

[root@zhao56 test]# free -m
total used free shared buff/cache available
Mem: 1837 114 1478 0 244 1582
Swap: 0 0 0

过滤Mem

[root@zhao56 test]# free -m | grep Mem:
Mem: 1837 114 1477 0 244 1582

保留第四列

[root@zhao56 test]# free -m | grep Mem: | awk '{print $4}'
1477

赋值变量

[root@zhao56 test]# FreeMem=free -m | grep Mem: | awk '{print $4}'
[root@zhao56 test]# echo $FreeMem
1477

判断

[root@zhao56 test]# [ $FreeMem -lt 1024 ] && echo "内存不足" || echo "内存溢出"
内存溢出
字符串比较
用于判断测试字符串是否为空值,或两个字符串是否相同 。 它经常用来判断某个变量是否未被定义(即内容为空值)

常见的字符串比较运算符:

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

判断是否为空

[root@zhao56 test]# [ -z $String ]
[root@zhao56 test]# echo $?
0
[root@zhao56 test]# [ -z $FreeMem ]
[root@zhao56 test]# echo $?
1
判断当前语言是否为en.US

判断当前语言是否为en.US

[root@zhao56 test]# echo $LANG
en_US.UTF-8
[root@zhao56 test]# [ ! $LANG = "en.US" ] && echo "Not en.US"
Not en.US
流程控制语句
尽管可以通过使用Linux命令、管道符、重定向以及条件测试语句来编写最基本的Shell脚本,但是这种脚本并不适用于生产环境。原因是它不能根据真实的工作需求来调整具体的执行命令,也不能根据某些条件实现自动循环执行,通俗来讲——不能根据实际情况做出调整

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

if语句分为单分支结构、双分支结构、多分支结构

单分支结构
由if、then、fi关键词组成

还来修改我们的zhao56demo.sh文件

/usr/local/test/
[root@zhao56 test]# cd /usr/local/test/
[root@zhao56 test]# ls
zhao56demo.sh
[root@zhao56 test]# tree
.
└── zhao56demo.sh
[root@zhao56 test]# vim zhao56demo.sh
[root@zhao56 test]# cat zhao56demo.sh

这是一个测试例子

DIR="/usr/local/test/ahha"
if [ ! -d $DIR ]
then
mkdir -p $DIR
fi
,新建了ahha这个文件夹

执行脚本,新建了ahha这个文件夹

[root@zhao56 test]# bash zhao56demo.sh
[root@zhao56 test]# tree
.
├── ahha
└── zhao56demo.sh

1 directory, 1 file
双分支结构
由if、then、else、fi关键词组成

还来修改我们的zhao56demo.sh文件

/usr/local/test/null
[root@zhao56 test]# vim zhao56demo.sh

判断一个主机是否在线,-c指定重试次数,-i指定数据包的发送间隔,-W等待超时时间

[root@zhao56 test]# cat zhao56demo.sh

这是一个测试例子

ping -c 3 -i 0.2 -W 3 $1 &> /usr/local/test/null
if [ $? -eq 0 ]
then
echo "Host $1 is on_line."
else
echo "Host $1 is off-line"
fi
执行脚本,如果ping -c 3 -i 0.2 -W 3 $1 &> /usr/local/test/null返回0则表示执行成功,则$?会为0

ping一个存在的ip

[root@zhao56 test]# bash zhao56demo.sh www.baidu.com
Host www.baidu.com is on_line.

ping一个不存在的ip

[root@zhao56 test]# bash zhao56demo.sh 1.2.3.4
Host 1.2.3.4 is off-line

查看生成文件

[root@zhao56 test]# ls
ahha null zhao56demo.sh

查看文件类型

[root@zhao56 test]# file null
null: ASCII text

查看文件内容

[root@zhao56 test]# cat null
PING 1.2.3.4 (1.2.3.4) 56(84) bytes of data.

--- 1.2.3.4 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 419ms
多分支结构
由if、then、else、elif、fi关键词组成

还来修改我们的zhao56demo.sh文件

[root@zhao56 test]# vim zhao56demo.sh
[root@zhao56 test]# cat zhao56demo.sh

这是一个测试例子

read -p "请输入你的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]; then
echo "$GEADE is pass"
else
echo "$GRADE is Fail"
fi
执行我们的脚本

[root@zhao56 test]# bash zhao56demo.sh
请输入你的分数(0-100):88
88 is Excellent
[root@zhao56 test]# bash zhao56demo.sh
请输入你的分数(0-100):80
is pass
[root@zhao56 test]# bash zhao56demo.sh
请输入你的分数(0-100):30
30 is Fail
[root@zhao56 test]# bash zhao56demo.sh
请输入你的分数(0-100):200
200 is Fail
for条件循环语句
允许脚本一次性读取多个信息,然后逐一对信息进行操作处理

由for、in、do、done关键词组成

新建users.txt文件来存放名字

[root@zhao56 test]# vim users.txt
[root@zhao56 test]# cat users.txt
root
zhao56
zhangsan
修改我们的zhao56demo.sh文件

[root@zhao56 test]# vim zhao56demo.sh

让用户输入个密码,如果用户存在则输出用户已存在,如果用户不存在则创建用户

[root@zhao56 test]# cat zhao56demo.sh

这是一个测试例子

read -p "输入用户名密码:" PASSWD
for UNAME in cat users.txt
do
id $UNAME &> /usr/local/test/null
if [ $? -eq 0 ]
then
echo "$UNAME,已存在"
else
useradd $UNAME &> /usr/local/test/null
echo "$PASSWD" | PASSWD --STDIN $uname &> /usr/local/test/null
echo "$UNAME ,创建成功"
fi
done
/dev/null是一个被称作Linux黑洞的文件,把输出信息重定向到这个文件等同于删除数据(类似于没有回收功能的垃圾箱)

执行脚本

[root@zhao56 test]# bash zhao56demo.sh
输入用户名密码:zhao56..
zhao56,已存在
root,已存在
zhangsan ,创建成功
[root@zhao56 test]# tail /etc/passwd
dockerroot❌997:994:Docker User:/var/lib/docker:/sbin/nologin
zhao56❌1000:1000::/home/zhao56:/bin/bash
zhangsan❌1001:1001::/home/zhangsan:/bin/bash
类似于上面的功能还可以弄个主机列表,然后执行shell脚本循环ping主机判断哪些主机在线

while条件循环语句
一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数

由while、do、done关键词组成

来个猜大小的场景

[root@zhao56 test]# cat zhao56demo.sh

这是一个测试例子

PRICE=$(expr $RANDOM % 1000 )
TIMES=0
echo "商品价格在0-999之间,猜猜看是多少?"
while true
do
if [ $TIMES -gt 10 ];then
echo "猜太多次了!"
exit
fi
read -p "请输入您猜测的价格:" INT
let TIMES++
if [ $INT -eq $PRICE ];then
echo "恭喜您猜对了"
echo "您总共猜了$TIMES次"
exit
elif [ $INT -gt $PRICE ];then
echo "太高了!"
else
echo "太低了!"
fi
done
[root@zhao56 test]# vim zhao56demo.sh
[root@zhao56 test]# cat zhao56demo.sh

这是一个测试例子

PRICE=$(expr $RANDOM % 1000 )
TIMES=0
echo "商品价格在0-999之间,猜猜看是多少?"
while true
do
if [ $TIMES -gt 10 ];then
echo "猜太多次了!"
exit
fi
read -p "请输入您猜测的价格:" INT
let TIMES++
if [ $INT -eq $PRICE ];then
echo "恭喜您猜对了"
echo "您总共猜了$TIMES次"
exit
elif [ $INT -gt $PRICE ];then
echo "太高了!"
else
echo "太低了!"
fi
done
执行

[root@zhao56 test]# bash zhao56demo.sh
商品价格在0-999之间,猜猜看是多少?
请输入您猜测的价格:500
太高了!
请输入您猜测的价格:250
太高了!
请输入您猜测的价格:125
太低了!
请输入您猜测的价格:130
太低了!
请输入您猜测的价格:200
太高了!
请输入您猜测的价格:165
太高了!
请输入您猜测的价格:147
太高了!
请输入您猜测的价格:138
太低了!
请输入您猜测的价格:142
太低了!
请输入您猜测的价格:145
太高了!
请输入您猜测的价格:144
太高了!
猜太多次了!
case条件测试语句
在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试;而如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令

由case、in、esac、;;、*)关键词组成

来~上才艺

[root@zhao56 test]# vim zhao56demo.sh
[root@zhao56 test]# cat zhao56demo.sh

这是一个测试例子

read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是字母"
;;
[0-9])
echo "您输入的是数字"
;;
*)
echo "您输入的不合法"
esac
执行脚本

[root@zhao56 test]# bash zhao56demo.sh
请输入一个字符,并按Enter键确认:6
您输入的是数字
[root@zhao56 test]# bash zhao56demo.sh
请输入一个字符,并按Enter键确认:a
您输入的是字母
[root@zhao56 test]# bash zhao56demo.sh
请输入一个字符,并按Enter键确认:!
您输入的不合法
计划任务服务程序
顾名思义就是定时执行计划任务

计划任务分为:一次性计划任务和长期性计划任务

一次性计划任务
使用at 时间命令 。 查看设置好但是为执行的使用at -l命令 删除为atrm 任务序号

at命令的参数及其作用:

参数 作用
-f 指定包含命令的任务文件
-q 指定新任务名称
-l 显示待执行任务列表
-d 删除指定待执行任务
-m 任务执行后给用户发邮件
[root@zhao56 test]# at 23:30
at> systemctl restart network

此处Ctrl+d键结束编写计划任务

at>
job 1 at Wed Jul 14 23:30:00 2021
[root@zhao56 test]# at -l
1 Wed Jul 14 23:30:00 2021 a root


[root@zhao56 test]# echo "systemctl restart network" | at 23:30
job 2 at Wed Jul 14 23:30:00 2021
[root@zhao56 test]# at -l
1 Wed Jul 14 23:30:00 2021 a root
2 Wed Jul 14 23:30:00 2021 a root

删除其中一个任务


[root@zhao56 test]# atrm 1
[root@zhao56 test]# at -l
2 Wed Jul 14 23:30:00 2021 a root
将计划任务写入脚本中

一般会使用“at now +2 MINUTE”的方式操作,这样代表2分钟(MINUTE)后执行这个任务,也可以替代成小时(HOUR)、日(DAY)、月(MONTH)等词汇:

[root@zhao56 test]# at now +2 MINUTE
at> systemctl restart network
at>
job 4 at Wed Jul 14 16:10:00 2021
[root@zhao56 test]# at -l
4 Wed Jul 14 16:10:00 2021 a root
长期性计划任务
周期性地、有规律地执行某些具体的任务

使用crondtab 命令 ,crontab -e创建、编辑计划命令,crontab -l查看计划命令 ,crontab -r删除计划命令

crontab命令的参数及其作用

参数 作用
-e 编辑计划任务
-u 指定用户名称
-l 列出任务列表
-r 删除计划任务
crondtab服务设置任务的参数格 分、时、日、月、星期 命令如果该字段没被设置用*代替

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

字段 说明
分钟 取值为0~59的整数
小时 取值为0~23的任意整数
日期 取值为1~31的任意整数
月份 取值为1~12的任意整数
星期 取值为0~7的任意整数,其中0与7均为星期日
命令 要执行的命令或程序脚本
[root@zhao56 test]# crontab -e
执行完上述会出现新建文件的界面,填入命令如下,:wq保存

image

[root@zhao56 test]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab

查看列表

[root@zhao56 test]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /usr/local/test

删除

[root@zhao56 test]# crontab -r
[root@zhao56 test]# crontab -l
no crontab for root
注: 除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“/2”表示每隔2分钟执行一次任务)。 计划任务中的“分”字段必须有数值,绝对不能为空或是号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。

注2: 如果需要同时包含多条计划任务命令语句,应每行仅写一条。在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询

posted @ 2021-07-14 16:56  zhao56  阅读(222)  评论(0编辑  收藏  举报