[华为云在线课程][Shell脚本编程基础][第二章Shell脚本语言的基本用法][1基本结构][学习笔记]

网友投稿 659 2022-05-30

shell脚本的用途

1,将简单的命令组合完成复杂的工作,自动化执行命令提高工作效率

2,减少手工命令的重复输入,一定程度上避免人为错误

3,将软件或应用的安装及配置实现标准化

4,用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统状态运行状态并实现告警等

shell脚本基本结构

shell脚本编程:是基于过程式、解释执行的语言

编程语言的基本结构:

各种系统命令的组合

数据存储:变量、数组

表达式:a+b

控制语句if

shell脚本:包含一些命令或声明,并符合一定格式的文本文件

格式要求:首行shebang机制

#!/bin/bash #!/usr/bin/python #!/usr/bin/perl

shell脚本创建过程

第一步:使用文本编辑器来创建文本文件

第一行必须包括shell声明序列:#!

例子:

#!/bin/bash

添加注释,注释以#开头

第二步:加执行权限

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

第三步:运行脚本

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

shell脚本注释规范

第一个脚本

#!SHEBANG CONFIGURATION_VARIABLES FUNCTION_DEFINITIONS MAIN_CODE

例子:第一个shell脚本hello world

参考文档:https://zh.wikipedia.org/wiki/Hello_World

远程执行shell文件注意:

坑一:如果执行错误并提示curl: (7) Failed connect to 10.0.0.110:80; No route to host。原因就是没有关闭防火墙。需要执行systemctl stop/disable firewalld关闭防火墙。

坑二:关闭防火墙后执行出现如下提示,表示没有关闭selinux

[root@localhost ~]# curl http://10.0.0.110/helloworld.sh 403 Forbidden

Forbidden

You don't have permission to access /helloworld.sh on this server.

关闭方法: 1,临时关闭,在终端输入"setenforce 0"。 2,永久关闭,在终端输入"vim /etc/selinux/config",将SELINUX的值改为"disalbed"。

坑三:如果能ping,却不能curl,记得打开httpd服务

[root@localhost ~]# curl 10.0.0.110 curl: (7) Failed connect to 10.0.0.110:80; Connection refused [root@localhost ~]# systemctl start httpd

#!/bin/bash #经典写法 echo "Hello World!"; #流行写法 echo 'Hello World!'; #-------------------------------------- #执行方法1 [root@localhost Code]# bash helloworld.sh #执行方法2 [root@localhost Code]# cat helloworld.sh | bash #执行方法3 [root@localhost Code]# bash < helloworld.sh #执行方法4 [root@localhost Code]# chmod +x helloworld.sh #执行方法5(远程执行) [root@localhost Code]#yum install httpd -y [root@localhost Code]#systemctl start httpd [root@localhost Code]#mv /data/hello.sh /var/www/html/ [root@localhost ~]# curl 10.0.0.110/helloworld.sh | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 32 100 32 0 0 19300 0 --:--:-- --:--:-- --:--:-- 32000 hello world [root@localhost ~]# curl 10.0.0.110/helloworld.sh #!/bin/bash echo "hello world"; [root@localhost ~]# curl -s 10.0.0.110/helloworld.sh | bash hello world [root@localhost ~]# curl 10.0.0.110/helloworld.sh 2>/dev/null | bash hello world [root@localhost ~]# curl 10.0.0.110/helloworld.sh >/dev/null | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 32 100 32 0 0 23494 0 --:--:-- --:--:-- --:--:-- 32000 #绝对路径 [root@localhost Code]# cd .. [root@localhost hello]# Code/helloworld.sh #相对路径 [root@localhost Code]# ./helloworld.sh

例子:备份脚本

#!/bin/bash echo -e "3[1;32mStarting backup...3[0m" sleep 2 cp /etc/vimrc /home/hello/Code/vimrc\-`date +%F` echo -e "3[1;32mBackup is finished3[0m" [root@localhost Code]# ./backup.sh Starting backup... Backup is finished [root@localhost Code]# ll total 8 -rwxr-xr-x 1 root root 162 Apr 14 16:39 backup.sh -rw-r--r-- 1 root root 2062 Apr 14 16:40 vimrc-2022-04-14

shell脚本调试

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

bash -n /path/to/some_script

调试并执行

bash -x /path/to/some_script

例子:检查语法错误

#!/bin/bash echo -e "3[1;32mStarting backup...3[0m" sleep 2 cp /etc/vimrc /home/hello/Code/vimrc\-`date +%F` echo -e "3[1;32mBackup is finished3[0m"))) [root@localhost Code]# bash -n backup.sh backup.sh: line 5: syntax error near unexpected token `)' backup.sh: line 5: `echo -e "3[1;32mBackup is finished3[0m")))'

[华为云在线课程][Shell脚本编程基础][第二章Shell脚本语言的基本用法][1基本结构][学习笔记]

例子:调试并执行

#!/bin/bash echo -e "\033[1;32mStarting backup...\033[0m" sleep 2 cp /etc/vimrc /home/hello/Code/vimrc\-`date +%F` cho -e "\033[1;32mBackup is finished\033[0m" [root@localhost Code]# bash -x backup.sh + echo -e '\033[1;32mStarting backup...\033[0m' Starting backup... + sleep 2 ++ date +%F + cp /etc/vimrc /home/hello/Code/vimrc-2022-04-14 + cho -e '\033[1;32mBackup is finished\033[0m' backup.sh: line 5: cho: command not found

总结:脚本错误常见的有三种

语法错误,会导致后续的命令不继续执行,可以用bash -n检查错误,提示的出错行数不一定是准确的

命令错误,默认后续的命令还会继续执行,用bash -n无法检查出来,可以使用bash -x进行观察

逻辑错误:只能使用bash -x进行观察

Bash Shell

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何利用 xUnit 框架对测试用例进行维护?
下一篇:【云享新鲜】社区周刊·Vol.43- 实现“东数西算”,需要这些硬核云上技术的加持
相关文章