Shell笔记

shell和js、python有很多类似之处,可类比学习掌握
index:
1、who
2、echo与printf
3、九大重定向(<,<<,>,>>,2>,2>>,&>,|,&1)
4、预定义变量-特殊符号($$,$0,$?,$!)
5、追踪限制(set -x ; set +x)
6、BRE-基本正则:行首行尾-^ $,词首词尾-\< \>
7、shell脚本四大运行方式(./ bash . source)
8、shell变量
9、环境变量
10、PS1的设置
11、位置变量
12、环境变量配置文件与启动执行顺序
13、数组
14、特殊字符
15、运算符
16、test测试
17、if分支
18、case分支
19、for循环
20、while 循环
21、自定义函数
22、fork炸弹
23、捕获信号(备份脚本不希望被执行中断)
24、一次性计划任务
25、周期性计划任务
26、脚本加锁
95、学习记录截图
1、who
who:终端初始身份检查,显示出各终端的初始登录身份(就算su也没用,始终标记初始登录身份)
在这里插入图片描述在这里插入图片描述
who | wc -lwc:
在这里插入图片描述
2、echo与printf
echo 自带换行,默认接双引号字符串(不完全引用引号-双引号,类似python的三引号-‘’‘);
printf 不会换行,默认接双引号字符串(不完全引用引号-双引号,类似python的三引号-’‘’);
在这里插入图片描述
在这里插入图片描述
3、九大重定向(<,<<,>,>>,2>,2>>,&>,|,&1)
默认的标准输入是键盘,默认的标准输出是屏幕,默认的错误输出是屏幕,而改变这个行为就是重定向。
< 文件输入重定向
<< 命令行输入重定向
> 输出重定向
>> 追加重定向
2> 错误重定向
2>>错误追加重定向
&> 全部重定向
| 管道重定向
&1 引用重定向
由于引用重定向-“&1”的存在,会使得下面几个命令等价:
command > file 2> file(要打开两次file,效率较低)
command 2> file > file(要打开两次file,效率较低)
command > file 2> &1(只打开一次file,效率较高)
command 2> file > &1(只打开一次file,效率较高)
command &> file (只打开一次file,效率最高)
普通用法:
echo 正文(默认双引号) > test.sh (覆盖)
echo 正文(默认双引号) >> test.sh (追加)
举例1(覆盖):
cat > ./test.text << EOF (同 cat << EOF > ./test.sh)
正文内容
EOF
(同 Control + D)
举例2(追加):
cat >>./test.text << EOF (同 cat << EOF >> ./test.sh)
正文内容
EOF
(同 Control + D)
4、预定义变量-特殊符号($$,$0,$?,$!)
$$: 当前进程PID
$0: 当前shell名/路径
$?: 上个命令的结束代码(0-true,1-false)
$!: 后台运行的最后一个进程PID
5、追踪限制(set -x ; set +x)
set -x : 去除追踪限制→打开追踪内容
set +x : 增加追踪限制→关闭追踪内容
在这里插入图片描述

6、BRE-基本正则:行首行尾-^ $,词首词尾-\< \>
在这里插入图片描述
7、shell脚本四大运行方式(./ bash . source)
./ 使用当前shell(即#!申明的shell)执行脚本,在新产生的子进程中运行脚本,需要可执行权限;
bash 使用bash运行脚本,在新产生的子进程中运行脚本,可以跳过执行权限验证;
. 在当前进程运行脚本,可以跳过执行权限验证;
source 在当前进程运行脚本,可以跳过执行权限验证;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8、shell变量
shell和python一样,shell也是解释型语言,变量是弱类型的,不限制类型;
shell脚本的计算效率非常低,对非整数的计算支持较差(如同SQL,默认是整数计算);
变量的定义和引用是2回事;
赋值方法1(人机交互式):
read 变量名
# 读取屏幕标准输入作为 变量值
在这里插入图片描述
在这里插入图片描述

赋值方法2(推荐):
变量名=变量值 (注意:中间无空格,因为空格是unix中常用分隔符,有特殊含义,不可乱用)
在这里插入图片描述
在这里插入图片描述

赋值方法3(不推荐):
let 变量名=整数1+整数2+整数3+… (非整数会导致let命令报错)
在这里插入图片描述
在这里插入图片描述

赋值方法4(推荐):
变量名=命令执行的结果
①变量名=$(命令)
②变量名=`命令` (反引号)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
变量默认作用范围:当前终端的当前shell;
在这里插入图片描述
在这里插入图片描述
导出变量给当前终端的 子进程shell 使用:
export 变量名
在这里插入图片描述
9、环境变量
环境变量都是默认进行了export导出的,即当前终端所有进程shell、子进程shell都可用;
env 查看正常环境变量;
set == (set | more) 查看更多环境变量;
常用环境变量:USER,PATH,SHELL,LANG…
在这里插入图片描述
在这里插入图片描述
PATH: 命令搜索路径,当命令(即shell脚本,如:/usr/bin/cd,x1.sh, …)不在PATH这个环境变量中时,必须输入完整路径才能执行该命令(脚本);
命令的本质是文件,是shell脚本;
10、PS1的设置

PS1='\[\e[35;47m\][\u@\h \w \t 第\#个命令]\$\[\e[0m\]'

在这里插入图片描述
11、位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} …
在这里插入图片描述
12、环境变量配置文件与启动执行顺序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
13、数组
定义和引用是2回事;
在这里插入图片描述
在这里插入图片描述
14、特殊字符

# 注释
; 连接命令,连接脚本
\ 转义字符
" " 不完全引用 == python的 f" " == python的 f' ' == python的 ''' '''
' '  完全引用 == python的 r' ' == python的 r" "
\n \r \t \$ \" \' \\ 转义字符的应用
` ` (反引号) 把命令的结果赋值给变量
(cmd) 单小括号 : 创建子进程命令
[root@localhost ~ 00:05:52 第36个命令]#cmd1=$(ls)
[root@localhost ~ 00:11:57 第37个命令]#echo $cmd1
anaconda-ks.cfg position.sh test.sh tt1 tt1.sh tt2 tt2.sh tt2.txt tt3 tt3.txt tt4 tt4.txt tt4.txt1 tt5 tt6 tt7 x1
[root@localhost ~ 00:12:08 第38个命令]#cmd1=`ls`
[root@localhost ~ 00:12:20 第39个命令]#cmd2=`ls`
[root@localhost ~ 00:12:36 第40个命令]#echo $cmd2
anaconda-ks.cfg position.sh test.sh tt1 tt1.sh tt2 tt2.sh tt2.txt tt3 tt3.txt tt4 tt4.txt tt4.txt1 tt5 tt6 tt7 x1
[root@localhost ~ 00:12:40 第41个命令]#
cmd1 && cmd2 : 逻辑与,命令1成功了才做命令二;
cmd1 || cmd2 : 逻辑或,命令1失败了才做命令二;
cmd1 ; cmd2 :  逻辑分隔连接,按顺序都要执行;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15、运算符
变量的定义和引用是2回事;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
16、test测试

test是测试命令, test expression == [ expression ]
当表达式是整数比较时,可以用特殊写法 [[ expression  ]]
具体用法可以通过 man test查看

实例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
17、if分支
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

18、case分支
在这里插入图片描述
在这里插入图片描述

19、for循环

C语言风格的for(同js风格):
[root@localhost ~ 12:16:46 第118个命令]#for (( i=1; i<=6; i++ )) ;do echo $i ; done
1
2
3
4
5
6
[root@localhost ~ 12:17:04 第119个命令]#for ((i=1; i<=6; i++)) ;do echo $i ; done
1
2
3
4
5
6
Python风格的for[root@localhost ~ 12:04:10 第98个命令]#touch {a,b,c,d}.mp3
[root@localhost ~ 12:05:07 第99个命令]#ls [a-d]*
a.mp3  anaconda-ks.cfg  b.mp3  c.mp3  d.mp3
[root@localhost ~ 12:05:22 第100个命令]#for file in $(ls *.mp3) ; do mv $file `basename $file .mp3`.mp4 ; done
[root@localhost ~ 12:08:13 第101个命令]#ls [a-d]*
a.mp4  anaconda-ks.cfg  b.mp4  c.mp4  d.mp4
[root@localhost ~ 12:08:18 第102个命令]#for file in `ls *.mp3` ; do mv $file $(basename $file .mp4).mp3 ; done
ls: 无法访问*.mp3: 没有那个文件或目录
[root@localhost ~ 12:08:53 第103个命令]#for file in `ls *.mp4` ; do mv $file $(basename $file .mp4).mp3 ; done
[root@localhost ~ 12:09:08 第104个命令]#ls [a-d]*
a.mp3  anaconda-ks.cfg  b.mp3  c.mp3  d.mp3
[root@localhost ~ 12:09:12 第105个命令]#for file in $(ls *.mp*) ; do mv $file `basename $file .mp*`.mp9 ; done
[root@localhost ~ 12:09:40 第106个命令]#ls [a-d]*
a.mp3.mp9  anaconda-ks.cfg  b.mp3.mp9  c.mp3.mp9  d.mp3.mp9
[root@localhost ~ 12:09:43 第107个命令]#basename a.mp3 .mp*
a.mp3
[root@localhost ~ 12:10:31 第108个命令]#ls *.mp*
a.mp3.mp9  b.mp3.mp9  c.mp3.mp9  d.mp3.mp9
[root@localhost ~ 12:10:57 第109个命令]#for file in $(ls *.mp*) ; do mv $file `basename $file .mp9`.mp机 ; done
[root@localhost ~ 12:11:28 第110个命令]#ls [a-d]*
a.mp3.mp机  anaconda-ks.cfg  b.mp3.mp机  c.mp3.mp机  d.mp3.mp[root@localhost ~ 12:11:33 第111个命令]#ls *.机
ls: 无法访问*.机: 没有那个文件或目录
[root@localhost ~ 12:11:45 第112个命令]#ls *机
a.mp3.mp机  b.mp3.mp机  c.mp3.mp机  d.mp3.mp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

20、while 循环

while : ;do echo 无限循环 ; done

while true ; do echo 无限循环 ; done

until [ 9 -gt 10 ] ; do echo 无限循环 ; done

until false ;do echo 无限循环 ; done

[root@localhost ~ 12:45:16 第5个命令]#while [ $a -lt 9 ] ;do echo ${a}小于9 ; ((a++)) ;done
0小于9
1小于9
2小于9
3小于9
4小于9
5小于9
6小于9
7小于9
8小于9


[root@localhost ~ 12:46:28 第9个命令]#a=0
[root@localhost ~ 12:47:02 第10个命令]#until [ $a -ge 9 ] ; do echo $a仍然小于9 ; ((a++)) ;done
0仍然小于9
1仍然小于9
2仍然小于9
3仍然小于9
4仍然小于9
5仍然小于9
6仍然小于9
7仍然小于9
8仍然小于9


/root
83081小于9
/root
83082小于9
/root
83083小于9
/root
83084小于9^C
[root@localhost ~ 12:49:51 第21个命令]#while pwd ;do echo ${a}小于9 ; ((a++)) ;done^C
/root
83085小于9
/root
83086小于9
/root
83087小于9
/root
83088小于9^C


[root@localhost ~ 12:59:38 第28个命令]#for file in /etc/profile.d/*.sh ; do echo $file ; if [ -x $file ]  ; 
> then . $file ;echo 已执行$file ; else echo $file不可执行 ; fi ; done ;
/etc/profile.d/256term.sh
/etc/profile.d/256term.sh不可执行
/etc/profile.d/colorgrep.sh
/etc/profile.d/colorgrep.sh不可执行
/etc/profile.d/colorls.sh
/etc/profile.d/colorls.sh不可执行
/etc/profile.d/lang.sh
/etc/profile.d/lang.sh不可执行
/etc/profile.d/less.sh
/etc/profile.d/less.sh不可执行
/etc/profile.d/vim.sh
/etc/profile.d/vim.sh不可执行
/etc/profile.d/which2.sh
/etc/profile.d/which2.sh不可执行


[root@localhost ~ 13:01:03 第29个命令]#for i in ls ; do echo $i ; done
ls
[root@localhost ~ 13:02:03 第30个命令]#for i in ls [a-d].* ; do echo $i ; done
ls
a.mp3.mp机
b.mp3.mp机
c.mp3.mp机
d.mp3.mp[root@localhost ~ 13:02:23 第31个命令]#for i in `ls [a-d].*` ; do echo $i ; done
a.mp3.mp机
b.mp3.mp机
c.mp3.mp机
d.mp3.mp[root@localhost ~ 13:03:13 第32个命令]#for i in $(ls [a-d].*) ; do echo $i ; done
a.mp3.mp机
b.mp3.mp机
c.mp3.mp机
d.mp3.mp[root@localhost ~ 13:03:22 第33个命令]#


[root@localhost ~ 13:05:17 第33个命令]#a=0
[root@localhost ~ 13:05:23 第34个命令]#while :;do echo 执行中;((a++));if [ $a -eq 3 ] ; then break ;else continue ;fi; done
执行中
执行中
执行中
[root@localhost ~ 13:08:02 第37个命令]#a=0
[root@localhost ~ 13:08:36 第38个命令]#while :;do echo 执行中,此时a=$a;((a++));if [ $a -eq 3 ] ; then break ;else continue ;fi; done
执行中,此时a=0
执行中,此时a=1
执行中,此时a=2
[root@localhost ~ 13:08:50 第39个命令]#


[root@localhost ~ 13:11:24 第41个命令]#for((i=0;i<9;i++)); do if [ $i -eq 5 ]; then continue;else echo 我是$i ; fi ; done
我是0
我是1
我是2
我是3
我是4
我是6
我是7
我是8
[root@localhost ~ 13:12:01 第42个命令]#for i in {1..9}; do if [ $i -eq 5 ]; then continue;else echo 我是$i ; fi ; done
我是1
我是2
我是3
我是4
我是6
我是7
我是8
我是9
[root@localhost ~ 13:14:18 第43个命令]#a=(1 2 3 4 5 6 7 8 9)
[root@localhost ~ 13:14:47 第44个命令]#for i in ${a[*]}; do if [ $i -eq 5 ]; then continue;else echo 我是$i ; fi ; done
我是1
我是2
我是3
我是4
我是6
我是7
我是8
我是9


[root@localhost ~ 14:39:45 第98个命令]#vim  help.sh
[root@localhost ~ 14:52:42 第99个命令]#cat -n help.sh
     1	#!/bin/bash
     2	#help.sh
     3
     4	# for i in $*
     5	# do
     6	# 	if [ $i = 'help' ]
     7	# 		then  echo $i ${i}
     8	# 	else 	      echo $i
     9	# 	fi
    10	# done
    11
    12	while [ $# -ge 1 ]
    13	do
    14		if [ "$1" = "help" ]
    15			then echo $1 $1
    16		else echo $1
    17		fi
    18	#shift做参数左移,即干掉第一个未知参数了
    19		shift
    20	done
[root@localhost ~ 14:52:48 第100个命令]#. help.sh h help gg help
h
help help
gg
help help
[root@localhost ~ 14:53:16 第101个命令]#

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
21、自定义函数

[root@localhost ~ 18:54:04 第34个命令]#function cdls(){ cd ~ ; ls; }
[root@localhost ~ 18:56:34 第35个命令]#cdls
4           anaconda-ks.cfg  help.sh      tt1.sh   tt3      tt4.sh    tt6
7           b.mp3.mp机       position.sh  tt2      tt3.sh   tt4.txt   tt7
99          c.mp3.mp机       test.sh      tt2.sh   tt3.txt  tt4.txt1  x1
a.mp3.mp机  d.mp3.mp机       tt1          tt2.txt  tt4      tt5       x1.x1
[root@localhost ~ 18:56:38 第36个命令]#cdls kk
4           anaconda-ks.cfg  help.sh      tt1.sh   tt3      tt4.sh    tt6
7           b.mp3.mp机       position.sh  tt2      tt3.sh   tt4.txt   tt7
99          c.mp3.mp机       test.sh      tt2.sh   tt3.txt  tt4.txt1  x1
a.mp3.mp机  d.mp3.mp机       tt1          tt2.txt  tt4      tt5       x1.x1
[root@localhost ~ 18:56:41 第37个命令]#function cdls(){
> cd $1
> ls
> }
[root@localhost ~ 18:57:19 第38个命令]#function cdls(){  cd $1 ; ls; }
[root@localhost ~ 18:57:24 第39个命令]#cdls /tmp
systemd-private-490787597bb74272afb199a9beec95e2-chronyd.service-dRtV2i  tt1.sh
[root@localhost /etc 18:57:38 第41个命令]#unset cdls
[root@localhost /etc 18:59:04 第42个命令]#cdls
-bash: cdls: 未找到命令
[root@localhost /etc 18:59:10 第43个命令]#cdls /tmp
-bash: cdls: 未找到命令
[root@localhost /etc 18:59:13 第44个命令]#cdls(){
> cd $1
> ls
> }
[root@localhost /etc 18:59:27 第45个命令]#cdls ~
4           anaconda-ks.cfg  help.sh      tt1.sh   tt3      tt4.sh    tt6
7           b.mp3.mp机       position.sh  tt2      tt3.sh   tt4.txt   tt7
99          c.mp3.mp机       test.sh      tt2.sh   tt3.txt  tt4.txt1  x1
a.mp3.mp机  d.mp3.mp机       tt1          tt2.txt  tt4      tt5       x1.x1
[root@localhost ~ 18:59:42 第46个命令]#

[root@localhost ~ 19:06:50 第69个命令]#[ -d /proc/2029 ]
[root@localhost ~ 19:07:24 第70个命令]#echo $?
0
[root@localhost ~ 19:07:25 第71个命令]#[ -d /proc/65533 ]
[root@localhost ~ 19:07:33 第72个命令]#echo $?
1
[root@localhost ~ 19:07:34 第73个命令]#ps -aux | grep -in 2029
109:root       2029  0.0  0.0 115804  2252 pts/3    S    15:10   0:00 -bash
115:root       2429  0.0  0.0 112828  1016 pts/3    R+   19:08   0:00 grep --color=auto -in 2029
[root@localhost ~ 19:08:17 第74个命令]#ps -aux | grep -in 65533
114:root       2432  0.0  0.0 112828  1016 pts/3    R+   19:08   0:00 grep --color=auto -in 65533
[root@localhost ~ 19:08:59 第75个命令]#function value(){
> value=777
> }
[root@localhost ~ 19:12:25 第76个命令]#value
[root@localhost ~ 19:12:31 第77个命令]#echo $value
777
[root@localhost ~ 19:12:46 第78个命令]#value=999
[root@localhost ~ 19:12:54 第79个命令]#function value(){ local value=777; }
[root@localhost ~ 19:13:04 第80个命令]#value
[root@localhost ~ 19:13:08 第81个命令]#echo $value
999
[root@localhost ~ 19:13:11 第82个命令]#function value(){  value=777; }
[root@localhost ~ 19:13:29 第83个命令]#echo $value
999
[root@localhost ~ 19:13:33 第84个命令]#value
[root@localhost ~ 19:13:36 第85个命令]#echo $value
777
[root@localhost ~ 19:13:37 第86个命令]#cdls
4           anaconda-ks.cfg  help.sh      tt1.sh   tt3      tt4.sh    tt6
7           b.mp3.mp机       position.sh  tt2      tt3.sh   tt4.txt   tt7
99          c.mp3.mp机       test.sh      tt2.sh   tt3.txt  tt4.txt1  x1
a.mp3.mp机  d.mp3.mp机       tt1          tt2.txt  tt4      tt5       x1.x1
[root@localhost ~ 19:24:39 第87个命令]#(cdls)
4           anaconda-ks.cfg  help.sh      tt1.sh   tt3      tt4.sh    tt6
7           b.mp3.mp机       position.sh  tt2      tt3.sh   tt4.txt   tt7
99          c.mp3.mp机       test.sh      tt2.sh   tt3.txt  tt4.txt1  x1
a.mp3.mp机  d.mp3.mp机       tt1          tt2.txt  tt4      tt5       x1.x1
[root@localhost ~ 19:24:47 第88个命令]#cd /
[root@localhost / 19:24:54 第89个命令]#(cdls)
4           anaconda-ks.cfg  help.sh      tt1.sh   tt3      tt4.sh    tt6
7           b.mp3.mp机       position.sh  tt2      tt3.sh   tt4.txt   tt7
99          c.mp3.mp机       test.sh      tt2.sh   tt3.txt  tt4.txt1  x1
a.mp3.mp机  d.mp3.mp机       tt1          tt2.txt  tt4      tt5       x1.x1
[root@localhost / 19:24:57 第90个命令]#
[root@localhost /etc/init.d 19:33:16 第106个命令]#vim  functions
[root@localhost /etc/init.d 19:35:06 第107个命令]#echo -n $" ok "
 ok [root@localhost /etc/init.d 19:44:28 第108个命令]#echo -n " ok "
 ok [root@localhost /etc/init.d 19:44:40 第109个命令]#

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
22、fork炸弹
在这里插入图片描述

[root@localhost /etc 20:14:44 第131个命令]#ulimit
unlimited
[root@localhost /etc 20:35:56 第132个命令]#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) 14988
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) 14988
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[root@localhost /etc 20:35:58 第133个命令]#


-bash: fork: 资源暂时不可用
-bash: fork: 资源暂时不可用
-bash: fork: 资源暂时不可用
-bash: fork: 资源暂时不可用
-bash: fork: 资源暂时不可用
-bash: fork: 资源暂时不可用
^C
[1]+  完成                  . | .
[liuyuan1@localhost /]$ ulimit
unlimited
[liuyuan1@localhost /]$ 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) 14988
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) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[liuyuan1@localhost /]$

在这里插入图片描述
23、捕获信号(备份脚本不希望被执行中断)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
24、一次性计划任务

[root@localhost / 21:28:02 第165个命令]#echo $date

[root@localhost / 21:28:49 第166个命令]#echo $DATE

[root@localhost / 21:28:53 第167个命令]#echo date
date
[root@localhost / 21:28:58 第168个命令]#echo "date"
date
[root@localhost / 21:29:07 第169个命令]#echo `date`
2021年 09月 12日 星期日 21:29:44 CST
[root@localhost / 21:29:44 第170个命令]#echo $(date)
2021年 09月 12日 星期日 21:29:54 CST
[root@localhost / 21:29:54 第171个命令]#

[root@localhost /tmp 22:14:31 第249个命令]#at -l #(查看计划)
2	Mon Sep 13 20:21:00 2021 a root
3	Mon Sep 13 20:21:00 2021 a root
4	Sun Sep 12 21:44:00 2021 a root
5	Sun Sep 12 21:44:00 2021 a root
[root@localhost /tmp 22:14:35 第250个命令]#at -d 2 3 #(删除计划)
[root@localhost /tmp 22:14:40 第251个命令]#at -l
4	Sun Sep 12 21:44:00 2021 a root
5	Sun Sep 12 21:44:00 2021 a root
[root@localhost /tmp 22:14:49 第252个命令]#at -d 4 5
[root@localhost /tmp 22:15:01 第253个命令]#at -l
[root@localhost /tmp 22:15:06 第254个命令]#man at #(查看at手册)
[root@localhost /tmp 22:15:25 第255个命令]#

[root@localhost /tmp 22:19:12 第261个命令]#at 22:20
at> pwd  #at计划没有终端,所以没法进行屏幕标准输出,只能通过重定向输出到文件
at> echo 已执行at `date` >> tt2.txt #at计划没有终端,所以没法进行屏幕标准输出,只能通过重定向输出到文件
at> <EOT>  #Control D 提交
job 17 at Sun Sep 12 22:20:00 2021
[root@localhost /tmp 22:19:41 第262个命令]#at -l #(查看计划)
17	Sun Sep 12 22:20:00 2021 a root
[root@localhost /tmp 22:19:45 第263个命令]#ll
总用量 20
-rwxrwxrwx. 1 liuyuan1 liuyuan1 108 9月  12 21:15 sign.sh
drwx------. 3 root     root      17 9月  12 10:28 systemd-private-490787597bb74272afb199a9beec95e2-chronyd.service-dRtV2i
-rwxrwxrwx. 1 root     root     194 9月   9 00:46 tt1.sh
-rw-r--r--. 1 root     root      54 9月  12 22:11 tt2?3.txt
-rwxrwxrwx. 1 liuyuan1 liuyuan1  88 9月  12 22:03 tt2.sh
-rw-r--r--. 1 root     root     167 9月  12 22:20 tt2.txt
[root@localhost /tmp 22:20:34 第264个命令]#cat -n tt2.txt
     1	已执行脚本 at 2021年 09月 12日 星期日 22:08:26 CST
     2	exe at 2021年 09月 12日 星期日 22:12:25 CST
     3	已执行at 2021年 09月 12日 星期日 22:20:25 CST #(执行结果)
[root@localhost /tmp 22:20:43 第265个命令]#

25、周期性计划任务

[root@localhost /tmp 22:46:45 第320个命令]#crontab -e #(编辑周期计划,同vim编辑器)
crontab: no changes made to crontab
[root@localhost /tmp 22:46:53 第321个命令]#crontab -l #(查看周期计划,同vim编辑器)
* * * * * echo 开始执行date命令 >> /tmp/tt2.txt
* * * * * /usr/bin/date >> /tmp/tt2.txt
[root@localhost /tmp 22:46:57 第322个命令]#cat -n tt2.txt #(查看周期计划执行结果)
     1	开始执行date命令
     2	2021年 09月 12日 星期日 22:44:27 CST
     3	开始执行date命令
     4	2021年 09月 12日 星期日 22:45:26 CST
     5	开始执行date命令
     6	2021年 09月 12日 星期日 22:46:26 CST
[root@localhost /tmp 22:47:01 第323个命令]#
[root@localhost /tmp 23:01:47 第330个命令]#cd /var/spool
[root@localhost /var/spool 23:03:59 第331个命令]#ll
总用量 0
drwxr-xr-x. 2 root root  63 8月   9 2019 anacron
drwx------. 3 root root  31 9月  12 22:20 at
drwx------. 2 root root  18 9月  12 22:49 cron
drwxr-xr-x. 2 root root   6 4月  11 2018 lpd
drwxrwxr-x. 2 root mail 150 8月   7 18:48 mail
drwxr-xr-x. 2 root root   6 10月  2 2020 plymouth
drwxr-xr-x. 4 root root  35 8月   2 02:23 postfix
drwxr-xr-x. 3 root root  19 8月  21 20:35 rhsm
[root@localhost /var/spool 23:04:00 第332个命令]#cd /var/spool/cron #所有用户的周期性计划都在这
[root@localhost /var/spool/cron 23:04:06 第333个命令]#ll
总用量 4
-rw-------. 1 root root 95 9月  12 22:43 root
[root@localhost /var/spool/cron 23:04:08 第334个命令]#cat -n root
     1	* * * * * echo 开始执行date命令 >> /tmp/tt2.txt
     2	* * * * * /usr/bin/date >> /tmp/tt2.txt
[root@localhost /var/spool/cron 23:04:20 第335个命令]#

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

26、脚本加锁

95、学习记录截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天道哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值