2、shell脚本格式
(1)脚本开头(第一行)
规范的shell脚本的第一行会指出由哪个程序(解释器)来执行脚本中的内容,在Linux bash编程中一般为:
#!/bin/bash或#!/bin/sh
其中开头的"#!"称为幻数,在执行bash脚本的时候,内核会根据"#!"后的解释器来确定由哪个程序来解释脚本中的内容。
(2)格式
一般来说Linux 的系统脚本都是以#!/bin/bash开头,而其它软件的脚本开头就是要看开发者的习惯了,有的以#!/bin/bash开头,有的以#!/bin/sh开头
(3)注意事项
这一行必须在每个脚本的顶端第一行,要在255个字符以内。写在其它行了就是注释了。
CentOS和RedHat默认的shell均是bash,因此,在写shell脚本的时候,在脚本的第一行也可以不加"#!/bin/bash",但如果当前系统默认的shell不是bash时,那么就必须要写#!了。否则脚本的执行结果可能就不是想要的。所以最好的编程习惯,就是不管什么脚本都加上开头语言标识“#!/bin/bash”。
(4)脚本注释
在shell脚本中,跟在"#"后面的内容表示注释。可以单独自成一行,也可跟在命令后,与命令在同一行。一定要有良好的写注释的习惯,因为注释不仅方便他人,也方便自己,防止时间久了,忘记代码意思。
建议用标准写法:#!/bin/bash
(5)后台执行脚本
1、防止脚本执行中断的方法
-
(1)sh test.sh &
-
(2)screen命令
-
(3)nohup test.sh &
2、后台执行脚本的控制
命令 | 功能 |
sh test.sh & | 把脚本test.sh放到后台执行 |
ctrl + c | 停止执行当前脚本或任务 |
ctrl + z | 暂停执行当前脚本或任务 |
bg | 把当前脚本或任务放到后台执行 |
fg | 把当前脚本或任务拿到前台执行,如果有多个任务,可以fg加任务编号调出,如fg 1 |
jobs | 查看执行的脚本或任务 |
3、示例
(1)示例1:bg命令演示
- a、场景
已执行sh while01.sh,但忘记加&,让脚本后台执行,发现时,该脚本已执行完一半任务,不想停止脚本,全部重新执行,希望把脚本直接放到后台继续执行。
- b、操作步骤
- (i)ctrl + Z:先暂停脚本的执行
- (ii)bg :将脚本放到后台继续执行
- c、脚本演示
[root@CentOS8 test]# cat while01.sh #!/bin/bash while true do uptime >> /var/log/uptime.log sleep 2 done [root@CentOS8 test]# sh while01.sh
^Z # 这是ctrl + z [1]+ Stopped sh while01.sh [root@CentOS8 test]# bg [1]+ sh while01.sh & # 脚本已在后台继续执行
(2)示例2:fg命令演示
- a、场景
后台已执行2个while01.sh脚本,希望把第2个脚本停止执行。
- b、操作步骤
- (i)jobs:查看当前正在执行的脚本或任务
- (ii)fg 2 :将第2个脚本放到前台执行
- (iii)ctrl + c :停止执行第2个脚本
- c、脚本演示
[root@CentOS8 test]# sh while01.sh & [1] 15189 [root@CentOS8 test]# sh while01.sh & [2] 15201 [root@CentOS8 test]# jobs [1]- Running sh while01.sh & [2]+ Running sh while01.sh & [root@CentOS8 test]# fg 2 sh while01.sh ^C # 这是ctrl + c [root@CentOS8 test]# jobs [1]+ Running sh while01.sh &