初衷:4.4 Shell开发
4.4.1 什么是Shell4.4.2 Linux启动过程4.4.3 Shell脚本格式
4.4.3.1 Shell脚本格式4.4.3.2 Shell脚本运行4.4.3.3 内建、外部命令 4.4.4 管道和重定向
4.4.4.1 管道与管道符4.4.4.2 子进程与子Shell4.4.4.3 重定向符号 4.4.5 变量赋值
4.4.5.1 变量的定义4.4.5.2 变量的赋值4.4.5.3 变量的引用4.4.5.4 变量的作用范围4.4.5.5 系统环境变量4.4.5.6 环境变量配置文件 4.4.6 数组4.4.7 转义和引用4.4.8 运算符4.4.9 特殊符号大全4.4.10 test比较4.4.11 if判断语句4.4.12 case分支4.4.13 for循环语句4.4.14 while循环和until循环4.1.15 循环的使用4.1.16 循环处理位置参数4.1.17 自定义函数4.1.18 系统函数库4.1.19 脚本资源控制4.1.20 计划任务
初衷:写这篇文章的主要目的是为了以后自己再去查看Linux资料时能有有个参照,其实自己在本地有文件存储了该流程配置,但是要一直备份,现在想要放到网上,一来只要有网就能查看,方便学习;二来也能帮助和我一样的小伙伴(其实网上该类似的文章不少,比我写的全的、好的也不计其数,自己选择适合自己的即可)。
4.4 Shell开发 4.4.1 什么是ShellShell是命令解释器,用于解释用户对操作系统的操作
Shell有很多
cat /etc/shells
[root@hadoop04 hadoop]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
CentOS7 默认使用的Shell是bash
常见的 Shell 有 sh、bash、csh、tcsh、ash 等。
暂时听着费劲,描述不清楚
4.4.3 Shell脚本格式 4.4.3.1 Shell脚本格式
UNIX的哲学:一条命令只做一件事
为了组合命令和多次执行,使用脚本文件来保存需要执行的命令
赋予该文件执行权限(chmod u+rx filename)
bash脚本声明脚本Shell解释器:
4.4.3.2 Shell脚本运行#! /bin/bash 此处称为Sha-Bang
运行脚本四种方式
bash filename.sh【可以不用赋予执行权限、会产生一个子进程不会影响当前环境】./filename.sh【必须赋予执行权限、会产生一个子进程不会影响当前环境】source ./filename.sh【可以不用赋予执行权限、会影响当前环境、内建命令】. ./filename.sh【可以不用赋予执行权限、会影响当前环境、内建命令】 4.4.3.3 内建、外部命令
内建命令不需要创建子进程内建命令对当前Shell生效 4.4.4 管道和重定向 4.4.4.1 管道与管道符
管道和信号一样,也是进程通信的方式之一匿名管道(管道符)是Shell编程经常用到的通信工具管道符是“|”,将前一个 命令执行的结果传递给后面的命令
ls -l | more 4.4.4.2 子进程与子Shell
外部命令会创建一个新的子进程使用管道符尽量规避内部命令,内部命令不会把结果传递给父进程 4.4.4.3 重定向符号
一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
输入重定向符号“<”
read var【这是一个变量】 < /path/to/a/file
[root@hadoop04 ~]# cat a.txt
hel
lo
[root@hadoop04 ~]# read var2 < a.txt
[root@hadoop04 ~]# echo $var2
hel
[root@hadoop04 ~]#
输出重定向符号“>”、“>>”、“2>”、“&>”
echo 123 > /path/to/a/file“>” 清空原文件再写入">>"直接在原文件后面进行追加"2>"执行命令发生错误进行重定向"&>"无论输出是正确还是错误都进行重定向
输入和输出重定向组合使用
cat > /path/to/a/file << EOFi am $USEREOF 4.4.5 变量赋值 4.4.5.1 变量的定义
变量名命名硬性规则
字母、数字、下划线不以数字开头 Shell变量为弱类型变量,不区分变量类型 4.4.5.2 变量的赋值
为变量赋值的过程,称为变量替换
变量名=变量值
a=123
使用let为变量赋值,区别是可以对变量后面进行计算,但是Shell脚本中计算效率很低,及时性脚本语言,不建议出现计算情况
let a=10+20
将命令赋值给变量
l=ls
将命令结果赋值给变量,使用$()或者``
letc=$(ls -l /etc)
[root@hadoop04 hadoop]# cmd1=$(ls /root/)
[root@hadoop04 hadoop]# echo $cmd1
afile anaconda-ks.cfg arg.awk a.sh a.txt avg.awk bfile b.txt cfile EOF initial-setup-ks.cfg kpi.txt lines.txt
[root@hadoop04 hadoop]# cmd2=ls /opt/
[root@hadoop04 hadoop]# echo $cmd2
beh rh
变量值有空格等特殊字符可以包含在“”或’'中
[root@hadoop04 hadoop]# str1=hello bash
[root@hadoop04 hadoop]# echo $str1
hello
[root@hadoop04 hadoop]# str2=“hello bash”
[root@hadoop04 hadoop]# echo $str2
hello bash
[root@hadoop04 hadoop]# str3=“hello ‘bash’”
[root@hadoop04 hadoop]# echo $str3
hello ‘bash’
[root@hadoop04 hadoop]# str4=‘hello “bash”’
[root@hadoop04 hadoop]# echo $str4
hello “bash”
变量赋值时不允许等号两侧出现空格
4.4.5.3 变量的引用${变量名}称作对变量的引用echo ${变量名}查看变量的值${变量名}在部分情况下可以省略为 $变量名 4.4.5.4 变量的作用范围
默认作用范围只针对当前的Shell生效,子Shell、父Shell、平行Shell都不生效。
4.4.5.5 系统环境变量–一:示例
[hadoop@hadoop04 ~]$ a=1
[hadoop@hadoop04 ~]$ echo a 1 [ h a d o o p @ h a d o o p 04 ] a 1 [hadoop@hadoop04 ~] a1[hadoop@hadoop04 ] bash
[hadoop@hadoop04 ~]$ echo $a[hadoop@hadoop04 ~]$ a=2
[hadoop@hadoop04 ~]$ echo a 2 [ h a d o o p @ h a d o o p 04 ] a 2 [hadoop@hadoop04 ~] a2[hadoop@hadoop04 ] exit
exit
[hadoop@hadoop04 ~]$ echo $a
1– 二:source 命令执行变量是在本Shell中执行,可以读取到变量内容
[root@hadoop04 hadoop]# demo_var1=“hello subshell”
[root@hadoop04 hadoop]# vim 1.sh
[root@hadoop04 hadoop]# chmod u+x 1.sh
[root@hadoop04 hadoop]# tail 1.sh
#! /bin/bash#test echo
echo $demo_var1
[root@hadoop04 hadoop]# bash 1.sh[root@hadoop04 hadoop]# ./1.sh
[root@hadoop04 hadoop]# source 1.sh
hello subshell
[root@hadoop04 hadoop]# . 1.sh
hello subshell– 三:如果想让子进程也使用父进程(本进程)的变量
[root@hadoop04 hadoop]# export demo_var1
[root@hadoop04 hadoop]# bash 1.sh
hello subshell
[root@hadoop04 hadoop]# ./1.sh
hello subshell–四:删除变量
[root@hadoop04 hadoop]# unset demo_var1
环境变量:每个Shell打开都可以获得到的变量
使用env命令可以查看所有环境变量
[root@hadoop04 ~]# env
TOMCAT_HOME=/opt/beh/core/tomcat8/apache-tomcat-8.5.51
XDG_SESSION_ID=1
HOSTNAME=hadoop04
SHELL=/bin/bash
JRE_HOME=/opt/beh/core/jdk8/jdk1.8.0_201/jre
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/nginx/sbin:/opt/beh/core/tomcat8/apache-tomcat-8.5.51/bin:/opt/beh/core/jdk8/jdk1.8.0_201/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
LANG=en_US.UTF-8
HISTConTROL=ignoredups
HOME=/root
LOGNAME=root…【没写完】
[root@hadoop04 ~]# echo $USER
root
[root@hadoop04 ~]# echo $UID
0
[root@hadoop04 ~]# echo $PATH【命令的搜索路径】
/usr/local/nginx/sbin:/opt/beh/core/tomcat8/apache-tomcat-8.5.51/bin:/opt/beh/core/jdk8/jdk1.8.0_201/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
echo $PATH【命令的搜索路径】
下面命令可以更改PATH命令的搜索路径
[root@hadoop04 ~]# PATH=$PATH:/root
当前定义的变量只对当前终端生效,重新打开终端不生效,
当前定义的变量对子Shell生效,定义的环境变量默认会用export导出;
$PS1是用来定义命令行的提示符的,PS1 变量的默认值,如下:
[root@hadoop04 ~]# echo $PS1
[u@h W]$
#默认的提示符是显示"[用户名@简写主机名最后所在目录]提示符"
PS1 可以支持以下这些选项: d: 显示曰期,格式为"星期 月 日"。 H: 显示完整的主机名。如默认主机名"localhost.localdomain"。 h: 显示简写的主机名。如默认主机名"localhost"。 t: 显示 24 小时制时间,格式为"HH:MM:SS"。 T: 显示 12 小时制时间,格式为"HH:MM:SS"。 A: 显示 24 小时制时间,格式为"HH:MM"。 @:显示 12 小时制时间,格式为"HH:MM am/pm"。 u: 显示当前用户名。 v: 显示 Bash 的版本信息。 w:显示当前所在目录的完整名称。 W:显示当前所在目录的最后一个目录。 #: 执行的第几条命令。 $: 提示符。如果是 root 用户,则会显示提示符为"#";如果是普通用户,则会显示提示符为"$"。
除了env命令可以查看系统环境变量;set也可以查看更多的变量,除了环境变量,还有预定义变量、位置变量
[root@hadoop04 ~]# set
…【变量太多,不写了】
预定义变量:
$? 显示上一条命令是否执行成功,0为成功;非0为失败。$$ 显示当前进程PID,一般用在脚本监测或查看运行状态$0 当前进程的名称
三个常见预定义变量:
[root@hadoop04 ~]# echo $?
0
[root@hadoop04 ~]# echo $$
3044
[root@hadoop04 ~]# echo $0
-bash创建一个脚本以不同执行方式执行时输出$$和$0:
[root@hadoop04 ~]# vim 1.sh
[root@hadoop04 ~]# chmod u+x 1.sh
[root@hadoop04 ~]# ./1.sh
5121
./1.sh
[root@hadoop04 ~]# bash 1.sh
5150
1.sh
[root@hadoop04 ~]# . 1.sh
3044
-bash
位置参数:$1、$2… 9 、 9、 9、{10}不能写成$10
4.4.5.6 环境变量配置文件[root@hadoop04 ~]# vim 2.sh
[root@hadoop04 ~]# tail -f 2.sh
#$1 $2 … $9 ${10}
pos1= 1 p o s 2 = 1 pos2= 1pos2={2} _【有值输出值下划线,如a _,没值输出下划线,如 _】
pos3=${3- _}【有值输出值,如a,没值输出下划线,如 _】echo $pos1
echo $pos2
echo $pos3[root@hadoop04 ~]# chmod 755 2.sh
[root@hadoop04 ~]# ./2.sh aaa bbb ccc
aaa
bbb_
ccc[root@hadoop04 ~]# ./2.sh aaa
aaa
_
_
配置文件
所有用户通用的配置文件,如root、hadoop都可以使用
/etc/profile/etc/profile.d/【基于不同的版本、不同的脚本启动加载】/etc/bashrc 某个用户所特有的配置
~/.bash_profile~/.bashrc
loginshell和nologinshell
使用su - root叫loginshell使用su root叫nologinshell
non-loginshell:当你开机后输入帐号密码进入Windows X(level 5)界面时,右击鼠标点打开终端(open terminal)时有一个类似windows的cmd窗口的命令行界面,这时你取得的shell叫做non-loginshell,你没有再次输入密码帐号!login shell:当你进入纯命令行界面(level 3)时,要求你再次输入你要登陆的帐号和密码,这时你取得的shell叫做login shell
[root@hadoop04 ~]# vim /etc/profile
[root@hadoop04 ~]# vim /etc/bashrc
[root@hadoop04 ~]# vim .bash_profile
[root@hadoop04 ~]# vim .bashrc
[root@hadoop04 ~]# su - root
Last login: Tue Oct 13 09:31:37 CST 2020 on pts/0
/etc/profile
.bash_profile
.bashrc
/etc/bashrc
- /etc/profile
保存系统启动或者终端启动时的系统环境变量以su - root切换时,这个文件会第一个被加载 /etc/bashrc~/.bashrc~/.bash_profile/etc/profile.d/
定义数组
IPTS=( 10.0.0.1 10.0.0.2 10.0.0.3 )
显示数组的所有元素
echo ${IPTS[@]}
显示数组元素个数
echo ${#IPTS[@]}
显示数组的第一个元素
echo ${IPTS[0]}
4.4.7 转义和引用[root@hadoop04 ~]# ipts=( 10.0.0.1 10.0.0.2 10.0.0.3 )
[root@hadoop04 ~]# echo $ipts
10.0.0.1
[root@hadoop04 ~]# echo ${ipts[@]}
10.0.0.1 10.0.0.2 10.0.0.3
[root@hadoop04 ~]# echo ${#ipts[@]}
3
[root@hadoop04 ~]# echo ${ipts[0]}
10.0.0.1
[root@hadoop04 ~]# echo ${ipts[1]}
10.0.0.2
[root@hadoop04 ~]# echo ${ipts[2]}
10.0.0.3
特殊字符
特殊字符:一个字符不仅有字面意义,还有元意(meta-meaning)#注释; 分号 转义符号"和’ 引号
转义符号
单个字符前的转义符号
n r t 单个字母的转义 $ " 单个非字母的转义
引用符号
常用引号符号
" 双引号’ 单引号` 反引号
[root@hadoop04 ~]# var1=123
[root@hadoop04 ~]# echo "KaTeX parse error: Expected 'EOF', got '#' at position 28: …oot@hadoop04 ~]#̲ echo 'var1’
$var1
赋值运算符
= 赋值运算符,用于算数赋值和字符串赋值【弱类型】使用unset取消为变量的赋值= 除了作为赋值运算符还可以作为测试操作符
算数运算符
基本运算符
/**%
使用expr进行运算
expr 4 + 5
[root@hadoop04 ~]# expr 4 + 5
9
[root@hadoop04 ~]# expr 4 +5
expr: syntax error【语法错误】
[root@hadoop04 ~]# expr 4 + 5.2
expr: non-integer argument【非整数参数】
数字常量
数字常量的使用方法
let “变量名 = 变量值”变量值使用0开头为八进制变量值使用0x开头为十六进制
双圆括号
双圆括号是let命令的简化
(( a = 10 ))(( a++ ))echo $((10+20))
[root@hadoop04 ~]# (( a=4+5 ))
[root@hadoop04 ~]# echo $a
9
[root@hadoop04 ~]# b=4+5
[root@hadoop04 ~]# echo $b
4+5[root@hadoop04 ~]# (( a++ ))
[root@hadoop04 ~]# echo $a
10
各种判断比较如何编写。
4.4.11 if判断语句if-then-elif-else-fi 语句【if语句可以嵌套使用】
基本语法:
if [测试条件成立] 或 命令返回值是否是0 then 执行相应命令 elif [测试条件成立] then 执行相应命令 else 测试条件不成立,执行相应命令 fi
[root@hadoop04 ~]# [ $UID = 0 ]【直接判断用户UID是否是零】
[root@hadoop04 ~]# echo $?【显示上一条命令是否执行成功】
0[root@hadoop04 ~]# [ $USER = root ]【直接判断用户是否是root】
[root@hadoop04 ~]# echo $?【显示上一条命令是否执行成功】
0[root@hadoop04 ~]# if [ $USER = root ]; then echo “root user”; fi【判断用户是root,则输出“root user”】
root user[root@hadoop04 ~]# if pwd;then echo " pwd running ";fi【if后面直接跟命令也可以,如pwd】
/root
pwd running
[root@hadoop04 ~]# if abc;then echo " abc running ";fi【if后面跟不存在的命令报错】
bash: abc: command not found…
[root@hadoop04 ~]# vim 3.sh
[root@hadoop04 ~]# cat 3.sh
#! /bin/bash#root
if [ $USER = root ] ;then
echo “root user”
elif [ $USER = user1 ];then
echo “user1 user”
else
echo “other user”
fi[root@hadoop04 ~]# ./3.sh
root user
case语句语法
case "$变量" in "情况1" ) 命令...;; "情况2" ) 命令...;; * ) 命令...;; esac
[root@hadoop04 ~]# vim 4.sh
[root@hadoop04 ~]# cat 4.sh
#! /bin/bashcase “$1” in
“start”|“START”)
echo $0 start…;;
“stop”|“STOP”)
echo $0 stop…;;
“restart”|“reload”)
echo $0 restart…;;
*)
echo “Usage: $0 {start|START|stop|STOP|restart|reload}”;;
esac[root@hadoop04 ~]# ./4.sh start
./4.sh start…
[root@hadoop04 ~]# ./4.sh stop
./4.sh stop…
[root@hadoop04 ~]# ./4.sh START
./4.sh start…
[root@hadoop04 ~]# ./4.sh restart
./4.sh restart…
[root@hadoop04 ~]# ./4.sh
Usage: ./4.sh {start|START|stop|STOP|restart|reload}
[root@hadoop04 ~]# ./4.sh aaa
Usage: ./4.sh {start|START|stop|STOP|restart|reload}
for循环语法
for 参数 in 列表 do 执行的命令 done【封闭一个循环】
[root@hadoop04 ~]# for i in {1…9}; do echo $i; done
1
2
3
4
5
6
7
8
9
[root@hadoop04 ~]# for i in {1…9}; do echo hello; echo $i; done
hello
1
hello
2
hello
3
hello
4
hello
5
hello
6
hello
7
hello
8
hello
9
[root@hadoop04 ~]# touch a.mp3 b.mp3 c.mp3
[root@hadoop04 ~]# ls *.mp3
a.mp3 b.mp3 c.mp3[root@hadoop04 ~]# for filename in ls *.mp3; do mv $filename $(basename $filename .mp3).mp4; done
[root@hadoop04 ~]# ls *.mp3
ls: cannot access *.mp3: No such file or directory
[root@hadoop04 ~]# ls *.mp4
a.mp4 b.mp4 c.mp4
C语言风格的for循环
for ((变量初始化;变量判断条件;变量变化)) do 循环执行的命令 done
[root@hadoop04 ~]# for (( i=1;i<=10;i++ ));do echo $i;done
1
2
3
4
5
6
7
8
9
10
while循环语法
死循环就是test测试一直成立
while test测试是否成立 do 命令 done
[root@hadoop04 ~]# a=1
[root@hadoop04 ~]# while [ $a -lt 10 ];do (( a++ )); echo $a;done
2
3
4
5
6
7
8
9
10[root@hadoop04 ~]# while :;do echo always;done【死循环】
until循环语法
until循环与while循环相反,循环测试为假,执行循环,为真时循环停止
until test测试是否成立 do 命令 done
[root@hadoop04 ~]# until :;do echo always;done
[root@hadoop04 ~]# until [ 5 -lt 4 ];do echo always;done【死循环】
循环的使用
循环和循环可以嵌套循环中可以嵌套判断,反过来也可以嵌套循环中可以使用break和continue语句在循环中退出
[root@hadoop04 ~]# for sc_name in /etc/profile.d/*.sh
do
if [ -x $sc_name ] ; then
echo “. $sc_name”
fi
done
使用循环处理命令行参数
命令行参数可以使用$1 $2 … 10... {10}... 10...n 进行读取$0代表脚本名称 ∗ 和 *和 ∗和@代表所有的位置参数$#代表位置参数的数量
[root@hadoop04 ~]# cat 6.sh
#! /bin/bashfor pos in ∗ 【 遍 历 输 入 的 命 令 , 是 h e l p 则 输 出 两 次 】 d o i f [ " *【遍历输入的命令,是help则输出两次】 do if [ " ∗【遍历输入的命令,是help则输出两次】doif["pos" = “help” ] ; then
echo $pos $pos
fidone
[root@hadoop04 ~]# ./6.sh a b c help
help help
[root@hadoop04 ~]# cat 6.sh
#! /bin/bash#for pos in $*
#do#if [ “$pos” = “help” ] ; then
#echo $pos $pos
#fi
#done
while [ $# -ge 1 ]【遍历输入的命令,当个数大于等于1时打印命令个数】
do
echo $#
shift【命令左移】
done[root@hadoop04 ~]# ./6.sh a b c help
4
3
2
1
[root@hadoop04 ~]# cat 6.sh
#! /bin/bash#for pos in $*
#do#if [ “$pos” = “help” ] ; then
#echo $pos $pos
#fi
#done
while [ $# -ge 1 ]【遍历输入的命令,当命令是help则输出两次】
do
if [ “$1” = “help” ] ; then
echo $1 $1
fi
echo $#
shift
done[root@hadoop04 ~]# ./6.sh a b c help
4
3
2
help help
1
自定义函数
函数定义:函数用于“包含”重复使用的命令集合
自定义函数
function fname(){
命令
}
函数执行
fname
[root@hadoop04 var]# function cdls(){ cd /var; ls; }
[root@hadoop04 ~]# cdls
account adm cache crash db empty ftp games gopher kerberos lib local lock log mail nis opt preserve run spool tmp yp
系统自建了函数库,可以在脚本中引用
/etc/init.d/functions
自建函数库
使用source函数脚本文件“导入”函数
[root@hadoop04 ~]# echo_success
bash: echo_success: command not found…[root@hadoop04 ~]# source /etc/init.d/functions
[root@hadoop04 ~]# echo_success
[root@hadoop04 ~]# [ OK ]
脚本资源控制分为两种:
脚本优先级控制捕获信号
脚本优先级控制
可以使用nice和renice调整脚本优先级避免出现“不可控的”死循环
死循环导致cpu占用过高死循环导致死机
(除了计算的时候会消耗CPU,创建子进程的时候也会消耗CPU)
ulimit -a【查看当前系统的限制,不会对root用户生效】
[root@hadoop04 ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3756
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 3756
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@hadoop04 ~]# func(){ func | func& } ; func【不断的创建func函数,直至资源用尽】
[root@hadoop04 ~]# .(){.|.&};.【fork炸弹,系统不断创建子进程,导致系统不响应其他信息】
捕获信号
捕获信号脚本的编写
kill默认会发送15号信号给应用程序ctrl+c发送2号信号给应用程序kill -9号信号不可阻塞
[root@hadoop04 ~]# vim 7.sh
[root@hadoop04 ~]# cat 7.sh
#!/bin/bash#signal demo
trap "echo sig 15 " 15
trap "echo sig 2 " 2
echo $$while :
do
:
done
计划任务:让计算机在指定的时间运行程序
一次性计划任务
执行命令:at
[root@hadoop04 ~]# date
Mon Oct 19 17:37:38 CST 2020
[root@hadoop04 ~]# date
Mon Oct 19 17:39:15 CST 2020
[root@hadoop04 ~]# at 17.42
at> echo hello > /tmp/hello.txt【不能进行标准输出,没有客户端,只能输出到文件】
at> 【ctrl+d进行提交】
job 1 at Mon Oct 19 17:42:00 2020
[root@hadoop04 ~]# atq【显示系统中待执行的任务列表,也就是列出当前用户的at任务列表】
1 Mon Oct 19 17:42:00 2020 a root[root@hadoop04 ~]# cat /tmp/hello.txt
cat: /tmp/hello.txt: No such file or directory[root@hadoop04 ~]# date
Mon Oct 19 17:42:02 CST 2020
[root@hadoop04 ~]# atq
[root@hadoop04 ~]# cat /tmp/hello.txt
hello
周期性计划任务
执行命令:cron配置方式:crontab -e查看现有的计划任务:crontab -l配置格式:
分钟 小时 日期 月份 星期 执行的命令注意命令的路径问题
[root@hadoop04 ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab[root@hadoop04 log]# crontab -l
/usr/bin/date >> /tmp/date.txt
[root@hadoop04 log]# tail -f /tmp/date.txt
Mon Oct 19 17:47:01 CST 2020
Mon Oct 19 17:48:02 CST 2020
Mon Oct 19 17:49:01 CST 2020…
计划任务枷锁 flock



