1.什么是shell?
Shell是一个命令解释器,它的作用是解释执行用户输入 的命令及程序等,用户输入一条命令,Shell就解释执行 一条。这种从键盘一输入命令,就可以立即得到回应的 对话方式,被称之为交互的方式。 Shell存在于操作系统的最外层,负责直接与用户对话, 把用户的输入解释给操作系统,并处理各种各样的操作 系统的输出结果,输出到屏幕返回给用户,当我们输入 系统用户名和密码,登录到Linux后的所有操作都是由 Shell解释并执行的
2.什么时候shell脚本?
当命令或程序 语句不在命令行下执行,而是通过一个程序文件执行 时,该程序就被称为Shell脚本。如果在Shell脚本里内置 了很多条命令、语句及循环控制,然后一次性把这些命 令执行完,这种通过文件执行脚本的方式,称为非交互 的方式。Shell脚本类似于DOS系统下的批处理程序。用户 可以在Shell脚本中敲入一系列的命令及命令语句组合。 这些命令、变量和流程控制语句等有机地结合起来就形 成了一个功能强大的Shell脚本
版本1:清除日志脚本
cd /var/log
cat /dev/null >messages
echo "Logs cleaned up"
版本2:更完善的清除日志脚本(含命令,变量和控制语句)
#!/bin/bash
LOG_DIR=/var/log
ROOT_UID=0
第一步:必须是root用户才能运行此脚本
if [ $UID -ne $ROOT_UID ]
then
echo "Must be root to run this script"
exit 1
fi
第二步:成功切换目录,否则给出提示并终止脚本运行
cd ${LOG_DIR} || {
echo "Cannot change to necessary directory"
exit 1
}
第三步:成功清理日志,给出正确提示
cat /dev/null > messages && {
echo "Logs cleaned up"
exit 0
}
第四步:通关或失败,给出相应提示
echo "Logs cleaned fail"
exit 1
2.1 shell脚本的分类
2.1.1 Bourne shell
Bourne shell又包括Bourne shell (sh)、Korn shell (ksh)、Bourne Again Shell(bash)三种类型,重点是Bourne Again Shell(bash)。
Bourne Again Shell(bash)
Bourne Again Shell即bash由GNU项目组开发,主要目标是与 POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和 ksh借鉴了很多功能,是各种Linux发行版默认配置的Shell, 在Linux系统上的/bin/sh往往是指向/bin/bash的符号链接。 虽然如此,bash和sh还是有很多的不同,一方面,bash扩展 了一些命令和参数,另一方面,bash并不完全和sh兼容,它 们有些行为并不一致,但大多数企业运维的情况下区别不 大,特殊场景可以使用bash替代sh
2.1.2 C shell
C shell又包括csh、tcsh两种类型。csh由Berkeley 大学开发,随BSD UNIX发布,它的流程控制语句 很像C语言,支持很多Bourne Shell所不支持的功 能,例如:作业控制、别名、系统算术、命令历 史、命令行编辑等。tcsh是csh的增强版,加入 了命令补全等功能,在FreeBSD、Mac OS X等系 统上替代了csh。
2.2 Shell脚本语言和3P语言对比
Shell脚本语言的优势在于处理偏操作系统底层的 业务,例如:Linux系统内部的很多应用,对于 一些常见的企业业务,使用Shell开发会更简单 快速,例如:让软件一键自动化安装、优化,监 控报警脚本,软件启动脚本,日志分析脚本等, 虽然PHP/Python语言也能够做到,但是,考虑到 掌握难度、开发效率、开发习惯等,它们可能就 不如用Shell脚本语言流行及有优势了。对于一些 常规的业务应用,使用Shell更符合Linux运维简 单、易用、高效的三大基本原则
PHP语言
PHP是网页程序语言,也是脚本语言。是一款更注 于Web页面开发(前端展示)的语言,例如: wordpress、dedecms、discuz等著名开源产品都是用 PHP语言开发的
Perl语言
Perl脚本语言,语法灵活、复杂,缺点是不易读, 团队协作困难,存世的大量相关程序软件(比如, xtrabackup热备工具、MySQL MHA集群高可用软件 等都有Perl语言的身影)。
Python语言
Python是当下流行的语言,不但可以用于脚本程序 开发,也可实现Web程序开发(例如:CMDB管理系 统),还可以做软件开发(OpenStack)、游戏开 发、大数据开发、移动端开发。
2.3 常用操作系统的默认Shell
CentOS和Red Hat下默认是Bourne Again Shell (Bash)
AIX下默认是Korn Shell(ksh)
Solaris和FreeBSD下默认是Bourne shell(sh)
2.4 shell脚本的建立
1.脚本的第一行
一个规范的Shell脚本在第一行会指出由哪个程序(解释 器)来执行脚本中的内容,这一行内容在Linux bash编程 中一般为: #!/bin/bash或#!/bin/sh #<==255个字符以内
2.bash和sh的区别
早期的bash与sh稍有不同,它还包含了csh和ksh的特色, 但大多数脚本都可以不加修改地在sh上运行。
3.需要注意的地方
CentOS和Red Hat Linux下默认的Shell均为bash。因此,在 写Shell脚本的时候,脚本的开头即使不加#!/bin/bash, 它也会交给bash解释。如果写脚本不希望使用系统默认 的Shell解释,那么就必须要指定解释器了。否则脚本文件执行的结果可能就不是你想要的。
4.Shell脚本的注释
#号后面表示注释
2.5 shell脚本的四种执行方法
1.bash script-name或sh script-name
这是当脚本文件本身没有可执行权限(即文件权限属性x 位为-号)时常使用的方法,或者脚本文件开头没有指定 解释器时需要使用的方法
2.path/script-name或./script-name
指在当前路径下执行脚本(脚本要有执行权限),需要 先将脚本文件的权限改为可执行(即文件权限属性加x 位),具体方法为chmod +x script-name。然后通过脚本 绝对路径或相对路径就可以直接执行脚本了
3.source script-name或. script-name
4.sh<script-name或cat scripts-name|sh
2.5.1 bash或sh与source或.执行脚本的区别
source或.执行脚本,相当于在一个shell下执行脚本,互相可以调用
bash或sh执行脚本,相当于开启了一个新的shell或者说开启了一个子shell
2.5.2 shell脚本的执行过程
2.6 shell脚本编程规范和习惯
1.开头加脚本解释器
2.附带作者及版权信息
3.脚本扩展名为*.sh
4.脚本存放在固定的目录下
5.脚本中不用中文
6.成对的符号一次书写完成
7.循环格式一次性输入完成
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">