跟老男孩学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输出)。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
6月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
1061 62
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
8月前
|
人工智能 运维 监控
运维也能“先演练后实战”?聊聊数字孪生的那些神操作
运维也能“先演练后实战”?聊聊数字孪生的那些神操作
267 0
|
10月前
|
人工智能 运维 安全
基于合合信息开源智能终端工具—Chaterm的实战指南【当运维遇上AI,一场效率革命正在发生】
在云计算和多平台运维日益复杂的今天,传统命令行工具正面临前所未有的挑战。工程师不仅要记忆成百上千条操作命令,还需在不同平台之间切换终端、脚本、权限和语法,操作效率与安全性常常难以兼顾。尤其在多云环境、远程办公、跨部门协作频繁的背景下,这些“低效、碎片化、易出错”的传统运维方式,已经严重阻碍了 IT 团队的创新能力和响应速度。 而就在这时,一款由合合信息推出的新型智能终端工具——Chaterm,正在悄然颠覆这一现状。它不仅是一款跨平台终端工具,更是业内率先引入 AI Agent 能力 的“会思考”的云资源管理助手。
|
9月前
|
缓存 运维 安全
7天精通电商API:从接入到运维的完整实战手册
本文全面解析电商API接口技术,从基础概念到高阶应用,涵盖商品、订单、支付与营销等核心模块,并深入探讨性能优化、安全防护与智能化发展方向,助你掌握驱动数字商业的核心技术。
|
消息中间件 存储 NoSQL
RocketMQ实战—6.生产优化及运维方案
本文围绕RocketMQ集群的使用与优化,详细探讨了六个关键问题。首先,介绍了如何通过ACL配置实现RocketMQ集群的权限控制,防止不同团队间误用Topic。其次,讲解了消息轨迹功能的开启与追踪流程,帮助定位和排查问题。接着,分析了百万消息积压的处理方法,包括直接丢弃、扩容消费者或通过新Topic间接扩容等策略。此外,提出了针对RocketMQ集群崩溃的金融级高可用方案,确保消息不丢失。同时,讨论了为RocketMQ增加限流功能的重要性及实现方式,以提升系统稳定性。最后,分享了从Kafka迁移到RocketMQ的双写双读方案,确保数据一致性与平稳过渡。
|
7月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
631 9
|
7月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
655 2
|
9月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
1078 1
|
12月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
1599 25
下一篇
开通oss服务