1、什么是shell?
Shell其实是一个命令解释器,作用是解释执行用户输入的命令以及程序等,用户每输入一条命令,Shell给予解释执行一条。这种键盘一输入命令,就可以立即得到回应的对话方式,称为交互模式。
Shell存在于操作系统的最外层,负责与用户直接对话。处理用户的输入,并将操作系统执行结果返回给用户。在用户登陆到操作系统之后的所有操作均由Shell解释执行。Shell在操作系统中所处的位置如下
![](https://img.haomeiwen.com/i16955089/2875ae8b2f3fec96.png)
1.2 什么是shell脚本?
简言之,如果shell命令通过写入到一个程序文件并执行的时候,此程序我们就称之为shell脚本(即:由命令组合成的一个可执行的文件)。但是在生产环境中的Shell脚本不仅仅是这么简单,而是将一些命令、变量以及流程控制语句有机结合并生成的功能完善的强大的应用程序。举例说明:
清除/var/log下message日志文件简单脚本
cat /dev/null > /var/log/messages
reboot
生产环境中清除/var/log下message的脚本
#!/bin/bash
# 清除日志脚本,版本 2
LOG_DIR=/var/log
# 脚本需要使用root用户权限来执行,因此,对当前用户进行判断,则不和要求的用户给出友好提示,并终止程序执行
ROOT_UID=0
if [ "$UID" -ne "$ROOT_UID" ] # <== 如果当前用户不是root,则不允许执行脚本
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 # 返回0则成功
}
echo "Logs cleaned up fail."
exit 1 # 返回1则失败
1.3 什么时候使用shell脚本?
1>Linux批量管理
2>自动化完成系统优化
3>自动化安装Linux操作系统(kickstart和cobbler)
4>测试工具和内容自动化
5>邮件自动发送
6>服务自动重启
7>代码上线
8>定时备份和定时启停服务
9>Linux系统监控、服务监控、端口监控、IP黑名单监控、流量监控(脚本+zabbix)
10>服务的日志切割、存储备份、日志分析等等
1.4 如何学好shell脚本?
1>基础变量、条件表达式、流程判断、if、for循环、while循环、case语句、循环控制
2>从简单的判断和循环开始写
3>阅读、模仿、尝试从零开始写
4>写注释,将任务分解成一个个小任务,类似于打游戏闯关
5>找一本合适的教材,或者自己认真记笔记
6>多练习-思考-练习-思考,循环往复
1.5 解释型语言和编译型语言
1.5.1 编译型语言:
指用专用的编译器,针对特定的操作平台(操作系统)将某种高级语言源代码一次性翻译成可被硬件平台直接运行的二进制机器码,这个过程叫做编译。
编译好的可执行文件(.exe),可在相对应的平台运行(移植性差,但是效率高)。
C\C++.....
1.5.2 解释型语言:
用专门解释器对源程序逐行解释成特定平台的机器码并立即执行的语言,相当于把编译型语言的编译执行过程混合在一起同时完成的。
编译型语言执行效率较低,切不能脱离解释器运行。但是跨平台比较容易,只需提供相应的解释器
shell\python
注:Java属于特殊的。既可以说成是解释型语言,又可以说成是编译型语言
1.6 shell脚本建立和执行
1.6.1 解释器类型
sh、bash是centos中的默认解释器
1.6.2 脚本定义
脚本开头
#!/bin/bash
1.6.3 父shell和子shell
脚本嵌套
父shell中的环境变量,在子shell中可以看到
而子shell中的变量,在父shell中看不到
1.6.4 shell执行方式
1>sh & bash,最常用的使用方式
2>cat .sh | bash,适用于执行多个脚本
3>sh < oldboy.sh,了解一下,输入重定向
4>/root/oldboy.sh,需要执行权限
5>. oldboy.sh*
6>source oldboy.sh
1.6.5 shell开发习惯
1>脚本存放在固定目录
2>开头加脚本解释器信息
3>附带作者和版权信息
4>脚本中尽量不用中文
5>脚本扩展名用.sh
6>成对的符号一次性书写完成
7>注意缩进
8>养成写注释的良好习惯
总结:
1>脚本放在指定目录
2>创建脚本,后缀是.sh
3>在第一行顶格添加命令解释器的声明#!/bin/bash
4>添加作者时间和版权信息
5>养成良好习惯,添加注释
6>Centos7默认解释器是/bin/bash
7>退出当前shell的命令是:exit
8>在使用history的时候,加入脚本中,执行什么也不会输出,在9>脚本中加入set -o history即可解决,但是默认显示的是这个脚本里的历史命令。但是如果还想显示脚本外的历史记录,可以使用source 执行脚本。
网友评论