目录
引言
伴随着Linux系统的服务器应用越来越多,维护工作中存在着大量重复性的输入和交互操作,不仅费时费力还容易出错,自动化的维护越来越重要,这时编写Shell脚本程序,能够自动化、批量的解决维护工作,从而减轻了管理员本身的负担,从而提升工作效率,事半功倍。
一、Shell脚本概述
1、Shell脚本的概念
(1)Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的,我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。
(2)不同的shell具备不同的功能,shell还决定了Linux中默认的shell是/bin/bash,流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途,目前大多数linux系统默认使用的是bash shell,默认登陆shell是/bin/bash,可以查看/etc/passwd文件里注明。
总结:将需要执行的命令保存到一个文件中,按照顺序执行,它不需要编译,它是解释型的。
2、Shell脚本应用场景
(1)自动化完成软件的安装部署,如安装部署LAMP架构服务;自动化完成系统的管理,如批量添加用户;自动化完成备份,如数据库定时备份。
(2)在需要完成大量复杂、重复性的工作时,不需要在命令行重复执行命令,直接运行shell脚本即可,大大的节省了时间提高了效率。
3、Shell的作用
(1)Linux系统中的Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
(2)常见的 Shell解释器程序有很多种,使用不同的Shell时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells文件可以了解当前系统所支持的Shell脚本种类。
[root@localhost ~]# cat /etc/shells
/bin/sh #(是bash命令的软链接,已经被/bin/bash所替换,/bin/bash基准于GNU的框架下发展出的Shell。)
/bin/bash #(目前大多数Linux版本采用的默认shell)
/usr/bin/sh #(己经被bash所替换。)
/usr/bin/bash #(centos和redhat系统默认使用bash shell)
/bin/tcsh #(csh的增强版,与csh完全兼容整合了csh,提供更多的功能。)
/bin/csh #(已经被/bin/bash所替换(整合c shel,提供更多的功能))
注意点:nologin是奇怪的shell,这个shell可以让用户无法登录主机。
4、Shell编程规范
(1)编写脚本代码
①使用vim文本编辑器
②每行一条Linux命令,按执行顺序依次编写
③第一行为"#!/bin/bash",脚本申明(默认解释器)∶表示此行以下的代码语句是通过/bin/bash程序来执行。还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
④注释信息:以"#”开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行可执行语句:如echo命令,用于输出" "之间的字符串。
[root@localhost ~]# vim first.sh
#!/bin/bash
cd /boot/
pwd
ls -lh vml*
(2)赋予可执行权限:是脚本具有可执行属性
[root@localhost ~]# chmod +x first.sh
(3)执行脚本文件
①脚本文件路径(绝对路径与相对路径)—必须要有“x”权限
[root@localhost ~]# ./first.sh
②sh脚本文件路径
[root@localhost ~]# sh first.sh
③source脚本文件路径
[root@localhost ~]# source first.sh
④bash脚本文件路径
[root@localhost ~]# bash first.sh
(4)更完善的脚本构成
①脚本声明;②注释信息;③可执行语句
[root@localhost ~]# vim /first.sh
#!/bin/bash
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以vml开头的文件包括:"
ls -lh vml*
5、重定向操作
(1)交互式硬件设备
①标准输入:将从标准输入文件中读取在执行过程中需要的输入数据。
②标准输出:将执行后的输出结果发送到标准输出文件。
③标准错误:命令将执行期间的各种错误信息发送到标准错误文件。
类型 |
设备文件 |
文件描述编号 |
默认设备 |
标准输入 |
/dev/stdin |
0 |
键盘 |
标准输出 |
/dev/stdout |
1 |
显示器 |
标准错误输出 |
/dev/stderr |