使用 Bash 编写 Shell 脚本进行 Linux 管理 - 第一部分
设置
有关设置工作区的更多背景信息,请查看本系列的第一个指南:Linux 中的用户和组管理。
使用 Bash 编写 Shell 脚本
Shell 脚本是纯文本文件,其中包含由 shell 依次运行的一系列命令。Bash 是大多数现代 Linux 发行版中的默认 shell,我们将利用其编程功能来创建简单的脚本。随着经验的积累,我们可以利用所学知识来开发更强大的程序。
系统管理员经常使用 shell 脚本来自动执行日常任务。根据经验,如果某项任务需要定期执行(即使每月仅执行一次),则需要将其自动化。
Shell 脚本的结构
shell 脚本的第一行必须指明用于执行该脚本的shell(也称为解释器)。对于 Bash,这意味着
#!/bin/bash
上述行后面必须跟有 shell 应运行的命令,每行一个。尽管系统管理员的偏好可能有所不同,但有效且维护良好的 shell 脚本通常包含以下部分:
标头
脚本头是一个注释掉的部分,开发人员可以在其中包含以下内容:
脚本的描述/目的
修订历史
许可条款和/或版权声明
shell 会忽略空白行和注释行。空白行和注释行仅供作者、其他审阅者和使用该程序的人员参考。要注释掉一行,只需在开头放置一个#符号即可。
常见的标头如下所示:
# ======================================================================
# SCRIPT NAME: systeminfo.sh
# PURPOSE: Demonstrate simple Bash programming concepts
# REVISION HISTORY:
# AUTHOR DATE DETAILS
# --------------------- --------------- --------------------------------
# Gabriel A. Cánepa 2017-10-21 Initial version
# LICENSE: CC Attribution-ShareAlike 4.0 International
# ======================================================================
身体
脚本主体是放置命令序列的地方,每行一个。命令可以直接由 shell 执行,也可以将其输出保存到称为变量的容器中。您可以将变量视为一个盒子,我们可以在其中存储固定值(例如文本或数字)或命令的输出,以供以后重用。
作为最佳实践,系统管理员经常在正文中使用注释来指示给定代码行应该做什么。这也可以提醒自己以及稍后处理同一文件的其他人员。
要将命令的输出存储在变量中,请将命令括在括号中,并在括号前面加上美元符号。因此,在MYVAR=$(command)中,变量MYVAR包含command的输出,其中command可以是 shell 执行的任何命令。要在脚本中使用MYVAR的内容,请在需要的地方添加$MYVAR 。
例如:
echo "Starting to run the script..."
# VARIABLE ASSIGNMENT
# Show hostname:
HOST=$(hostname)
# User executing the script:
CURRENTUSER=$(whoami)
# Current date:
CURRENTDATE=$(date +%F)
# Host IP address:
IPADDRESS=$(hostname -I | cut -d ' ' -f1)
# SHOW MESSAGES
echo "Today is $CURRENTDATE"
echo "Hostname: $HOST ($IPADDRESS)"
echo "User info for $CURRENTUSER:"
grep $CURRENTUSER /etc/passwd
我们将所有内容(#!/bin/bash、header 和 body)放在一起并保存为systeminfo.sh。接下来,使文件可执行并运行它:
chmod a+x systeminfo.sh
./systeminfo.sh
下图显示了脚本的输出:
如上图所示,内置的echo Bash 允许我们在双引号内嵌入变量和固定文本。因此,给定变量的内容将与文本一起成为输出的一部分。
下一步
请继续阅读本系列的下一篇指南:使用 Bash 进行 Linux 管理的 Shell 脚本 - 第 2 部分。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~