shell脚本编写守则
现在centos7中使用的是bash软件,通过以下命令可以查看bash版本:
[[email?protected] ~]# cat /etc/redhat-release #查看系统的版本 CentOS Linux release 7.5.1804 (Core) #我这里使用的是centos 7.5 1804 [[email?protected] ~]# bash --version #查看bash的版本 GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu) #这一行就是bash版本 Copyright (C) 2011 Free Software Foundation,Inc. 许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl.html> 这是自由软件,您可以自由地更改和重新发布。 在法律允许的范围内没有担保. 若生产环境下的服务器使用的是较老版本的系统及shell,那么建议将其升级到最新版的shell,因为近两年老版本被暴露出存在较严重的安全漏洞。 bash软件曾经爆出了严重漏洞(破壳漏洞),凭借此漏洞,别人可能会接管计算机的整个操作系统,得以访问各种系统内的机密信息,并对系统进行更改等。任何人的计算机系统,如果使用了bash软件,都需要立即打上补丁。检测系统是否存在漏洞的方法为: #测试系统是否存在漏洞 [[email?protected] ~]# env x=‘() {:;}; echo be careful‘ bash -c "echo this is a test" this is a test 返回上面的内容“this is a test”,则表示正常,若返回如下内容,则需要升级bash了,不过,仅仅是用于学习和测试就无所谓了。 [[email?protected] ~]# env x=‘() {:;}; echo be careful‘ bash -c "echo this is a test" be careful this is a test 提示:如果没有输出be careful,则不需要升级。 升级方法如下: [[email?protected] ~]# rpm -qa bash #升级前的bash版本 bash-4.2.46-30.el7.x86_64 [[email?protected] ~]# yum -y update bash #执行升级命令 [[email?protected] ~]# rpm -qa bash #升级后的bash版本 bash-4.2.46-31.el7.x86_64 编写shell脚本守则:1、脚本开头一行注明使用的是哪种解释器,如:#!/bin/sh、#!/bin/bash......。 shell脚本的执行:当Shell脚本运行时,它会先查找系统环境变量ENV,该变量指定了环境文件(加载顺序通常是/etc/profile、~/.bash_profile、~/.bashrc、/etc/bashrc等),在加载了上述环境变量文件后,Shell就开始执行Shell脚本中的内容 Shell脚本是从上至下、从左至右依次执行每一行的命令及语句的,即执行完了一个命令后再执行下一个,如果在Shell脚本中遇到子脚本(即脚本嵌套)时,就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句。
结论: 通过source或“.”加载执行过的脚本,由于是在当前shell中执行脚本,因此在脚本结束之后,脚本中的变量(包括函数)值在当前shell中依然存在;而sh和bash执行脚本时都会启动新的子shell执行,执行完后退回到父shell。因此,变量和函数值等无法保留,在进行shell脚本开发时,如果脚本中有引用或执行其他脚本的内容或配置文件的需求时,最好用“.”或source先加载该脚本或配置文件,处理完成之后,再将他们加载到脚本的下面,就可以调用source加载的脚本及配置文件中的变量及函数等内容了。 编写shell的守则:
———————— 本文至此结束,感谢阅读 ———————— (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |