跟老男孩学Linux运维:Shell编程实战2.2 什么是Shell脚本

简介:
+关注继续查看

2.2 什么是Shell脚本


理解了Shell之后,再理解Shell脚本就简单了。当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序就被称为Shell脚本。如果在Shell脚本里内置了很多条命令、语句及循环控制,然后将这些命令一次性执行完毕,这种通过文件执行脚本的方式称为非交互的方式。Shell脚本类似于DOS系统下的批处理程序(早期扩展名一般为“*.bat”)。用户可以在Shell脚本中敲入一系列的命令及命令语句组合。这些命令、变量和流程控制语句等有机地结合起来,就形成了一个功能强大的Shell脚本。

下面是在Windows下利用bat批处理程序开发的备份企业网站及数据库数据的脚本范例。

范例2-1:在Windows下利用bat批处理程序备份网站及数据库数据的脚本。

@echo off

set date=%date:~0,4%-%date:~5,2%-%date:~8,2%            #<==定义时间变量。

mysqldump -uroot -poldboy -A -B  > D:\bak\"%date%".sql  #<==备份数据库数据。

rar.exe a -k -r -s -m1 D:\bak\"%date%".sql.rar D:\bak\"%date%".sql

#<==打包备份出来的数据库数据。

del D:\bak\*.sql #<==删除未打包的无用数据库数据。

rar.exe a -k -r -s -m1 D:\bak\"%date%"htdocs.rar D:\work\PHPnow\htdocs

#<==打包站点目录下的数据。

范例2-2:清除/var/log下messages日志文件的简单命令脚本。

把所有命令放在一个文件里,堆积起来后就形成了脚本,下面就是一个由最简单的命令堆积而成的Shell脚本。需要注意的是,必须使用root身份来运行这个脚本。

# 清除日志脚本, 版本 1。

cd /var/log

cat /dev/null>messages

echo "Logs cleaned up."

提示: /var/log/messages是Linux系统的日志文件,很重要。

范例2-2所示的脚本其实是有一些问题的,具体如下:

1)如果不是root用户,则无法执行脚本清理日志,并且会提示系统的权限报错信息。

2)没有任何流程控制语句,简单地说就是只进行顺序操作,没有成功判断和逻辑严密性。

范例2-3:写一个包含命令、变量和流程控制的语句来清除/var/log下messages日志文件的Shell脚本。

# !/bin/bash

# 清除日志脚本, 版本 2

LOG_DIR=/var/log

ROOT_UID=0     #<==$UID为0的用户,即root用户

# 脚本需要使用root用户权限来运行,因此,对当前用户进行判断,对不合要求的用户给出友好提示,并终止程序运行。

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表示成功,返回1表示失败。

}

echo "Logs cleaned up fail."

exit 1

初学者如果想要快速掌握Shell脚本的编写方法,最有效的思路就是采用电子游戏中过关的方式,比如,对于范例2-3的脚本可以设计成如下几关:

第一关,必须是root才能执行脚本,否则给出友好提示并终止脚本运行。

第二关,成功切换目录(cd /var/log),否则给出友好提示并终止脚本运行。

第三关,清理日志(cat /dev/null > messages),若清理成功,则给出正确提示。

第四关,通关或失败,分别给出相应的提示(echo输出)。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
缓存 运维 Linux
Linux(CentOS)运维脚本工具集合
Linux(CentOS)运维脚本工具集合
|
3天前
|
运维 关系型数据库 MySQL
Linux实用运维脚本分享
Linux实用运维脚本分享
|
1月前
|
运维 Shell Linux
【运维知识高级篇】超详细的Shell编程讲解1(Shell作用+脚本书写方式+脚本执行方式+变量分类+变量配置文件+变量定义+Shell重要的位置变量+三种传参方式)
【运维知识高级篇】超详细的Shell编程讲解1(Shell作用+脚本书写方式+脚本执行方式+变量分类+变量配置文件+变量定义+Shell重要的位置变量+三种传参方式)
118 0
|
1月前
|
运维 监控 关系型数据库
【运维知识进阶篇】zabbix5.0稳定版详解4(用脚本自定义监控项+监控MySQL状态信息)(二)
【运维知识进阶篇】zabbix5.0稳定版详解4(用脚本自定义监控项+监控MySQL状态信息)(二)
28 0
|
1月前
|
运维 监控 关系型数据库
【运维知识进阶篇】zabbix5.0稳定版详解4(用脚本自定义监控项+监控MySQL状态信息)(一)
【运维知识进阶篇】zabbix5.0稳定版详解4(用脚本自定义监控项+监控MySQL状态信息)
33 0
|
1月前
|
运维 Linux 数据安全/隐私保护
【运维杂谈】Linux批量创建用户,不用写脚本,超简单
【运维杂谈】Linux批量创建用户,不用写脚本,超简单
33 0
|
4月前
|
运维
运维小笔记:清理指定后缀名文件的 powerhsell 小脚本
在运维值班每天都需要从系统导出这种数据,压缩好放在工作电脑上,解压用脚本做汇总。但是长期都没删除各个日期下的压缩包。几年下来,有上千个目录,也不知道哪些目录中有没有删除的压缩包。一个一个手删太累了,不妨做个 powershell 小脚本一键搞定吧。
38 0
|
4月前
|
运维 容灾 Shell
分享一个提高运维效率的 Python 脚本
分享一个提高运维效率的 Python 脚本
|
5月前
|
运维 网络协议 Linux
分享几个常用的运维 shell 脚本
今天咸鱼给大家分享几个不错的 Linux 运维脚本
|
6月前
|
SQL 运维 Oracle
【大数据开发运维解决方案】sqoop避免输入密码自动增量job脚本介绍
上一篇文章介绍了sqoop增量同步数据到hive,同时上一篇文章也给出了本人写的hadoop+hive+hbase+sqoop+kylin的伪分布式安装方法及使用和增量同步实现的连接, 本篇文章将介绍如何将上一篇文章介绍的增量方式同sqoop自带的job机制和shell脚本以及crontab结合起来实现自动增量同步的需求。
【大数据开发运维解决方案】sqoop避免输入密码自动增量job脚本介绍
热门文章
最新文章
推荐文章
更多