您的位置:首页 > 运维架构 > Shell

概念-shell 脚本编程

2020-08-07 20:03 676 查看

shell 脚本编程:基于过程式、解释执行的语言
shell 脚本:包含一些命令或声明,并符合一定格式的文本文件
格式要求:首行shebang机制

#!/bin/bash

shell 脚本创建过程

1 使用文本编辑器来创建文本文件,第一行必须包括shell 声明序列:

#!

2 给予执行权限,在命令行上指定脚本的绝对或相对路径

执行的方式

#方式1
[root@CentOS8 ~]#bash /data/hello.sh

#方式2
[root@CentOS8 ~]#cat /data/hello.sh | bash

#方式3
[root@CentOS8 ~]#bash < /data/hello.sh

#方式4
[root@CentOS8 ~]#chmod +x /data/hello.sh
#绝对路径
[root@CentOS8 ~]#/data/hello.sh
#相对路径
[root@CentOS8 ~]#cd /data
[root@CentOS8 ~]#./hello.sh

#方式5,主要用于实现执行远程主机的shell 脚本
[root@CentOS8 ~]#yum -y install httpd
[root@CentOS8 ~]#systemctl start httpd
[root@CentOS8 ~]#mv /data/hello.sh /var/www/html/

[root@CentOS8 ~]#curl http://10.0.0.6/hello.sh
[root@CentOS8 ~]#curl -s http://10.0.0.6/hello.sh
[root@CentOS8 ~]#curl -s http://www.wangxiaochun.com/testdir/hello.sh | bash
[root@CentOS8 ~]#wget -qO - http://www.wangxiaochun.com/testdir/hello.sh | bash

3 运行脚本,直接运行解释器,将脚本作为解释器程序的参数运行

shell 脚本注释规范

1 第一行一般是调用使用的语言
2 脚本名称,避免更改文件名为无法找到正确的文件
3 版本号
4 更改后的时间
5 作者相关信息
6 该脚本的作用和注意事项
7 各版本的更新简要说明

范例

#!/bin/bash# --------------------------------------------
# Filename:		hello.sh
# Version:		1.0
# Date:			2020/08/07
# Author:		dawn
# Description:	This is the script
# --------------------------------------------

shell 脚本调试

只检测脚本中的语法错误,无法检查出命令错误。不真正执行脚本

bash -n /path/to/some_script

调试并执行

bash -x /path/to/some_script

脚本错误常见的有三种:

  • 语法错误 会导致后续的命令不继续执行,可用bash -n 检查错误,提示的出错行数不一定是准确的
  • 命令错误 默认后续的命令还会继续执行,用bash -n 无法检查出来,可使用bash -x 进行观察
  • 逻辑错误 只能使用bash -x 进行观察

创建shell 脚本模版

范例

参照 https://www.jianshu.com/p/4b2e9c881f45

# 设置成全局,则修改 /etc/vimrc
# 设置成当前用户,则修改 ~/.vimrc
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call setline(1,"#!/bin/bash")
call setline(2,"#********************************************************************")
call setline(3,"#Author:dawn")
call setline(4,"#Date:".strftime("%Y-%m-%d %T"))
call setline(5,"#FileName:".expand("%"))
call setline(6,"#URL:https://blog.csdn.net/xiao_dan_")
call setline(7,"#Version:1.0")
call setline(8,"#Description:The test script")
call setline(9,"#********************************************************************")
call setline(10,"")
endif
endfunc
autocmd BufNewFile * normal G
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: