5 个 Shell 脚本,助 Linux 新手学习 Shell 编程
如果您是 Linux 新手,学习 Shell 脚本编程一开始可能会令人望而生畏。然而,掌握 Shell 脚本编程技能,在使用 Linux 系统时可能非常有用。Shell 脚本可以自动执行重复性任务、执行系统管理任务,甚至有助于软件开发。
在本文中,我们将介绍五个 Shell 脚本,Linux 新手可以学习这些脚本来开始 Shell 编程。我们将介绍 Shell 脚本编程的一些基础知识,并提供每个脚本的示例,帮助您理解它们的工作原理。
什么是 Shell 脚本?
Shell 脚本是用脚本语言编写的、在 Unix/Linux Shell 中运行的程序。 Shell 脚本是一个强大的工具,它允许您自动执行任务、执行系统管理任务,甚至创建软件。
Shell 脚本在命令行界面中执行,可用于执行各种任务,从基本的文件管理到复杂的数据处理。
脚本 1:Hello World
每个程序员学习的第一个脚本都是经典的"Hello, World!"程序。这是一个简单的脚本,只会在屏幕上打印一条消息。脚本如下所示 -
示例
#!/bin/bash echo "Hello, World!"
输出
Hello, World!
让我们分解一下。脚本的第一行称为"shebang"行,它告诉 Shell 使用哪个解释器来运行脚本。在本例中,我们使用 bash shell。
第二行是实际的命令,它将消息打印到屏幕上。echo 命令只是显示其后的文本。
要运行脚本,请将其保存到文件(例如 hello.sh),使用 chmod +x hello.sh 命令使其可执行,然后使用 ./hello.sh 运行它。
脚本 2:简单计算器
我们将要看的下一个脚本是一个简单的计算器。该脚本接受用户输入的两个数字,并对它们执行基本的算术运算。脚本如下所示 -
示例
#!/bin/bash echo "Enter first number: " read num1 echo "Enter second number: " read num2 echo "The sum is: $((num1 + num2))"
输出
Enter first number: Enter second number: The sum is: 0
让我们分解一下。脚本的前两行提示用户输入两个数字,然后将这些数字读入 num1 和 num2 变量。
第三行执行实际计算。在本例中,我们使用 $(( )) 语法将 num1 和 num2 相加。
要运行脚本,请将其保存到文件(例如 calculator.sh),使用 chmod +x calculator.sh 命令使其可执行,然后使用 ./calculator.sh 运行它。
脚本 3:文件备份
接下来我们要看的是一个文件备份脚本。此脚本将文件复制到备份目录,并在文件名中添加时间戳。脚本如下所示 -
#!/bin/bash
backup_dir=/path/to/backup/dir/
filename=file.txt
cp $filename $backup_dir/${filename}_$(date +%Y-%m-%d_%H-%M-%S)
我们来分解一下。脚本第一行将名为 backup_dir 的变量设置为备份目录的路径。
第二行将名为 filename 的变量设置为我们要备份的文件的名称。
第三行使用 cp 命令将文件复制到备份目录。 ${filename}_$(date +%Y-%m-%d_%H-%M-%S) 语法会在文件名末尾添加时间戳,确保每个备份都有唯一的名称。
要运行脚本,请将其保存到文件(例如 backup.sh),使用 chmod +x backup.sh 命令使其可执行,然后使用 ./backup.sh 运行它。
脚本 4:系统信息
接下来我们将要介绍的是系统信息脚本。该脚本显示有关系统的信息,例如操作系统、内核版本和 CPU 信息。脚本如下所示 -
示例
#!/bin/bash
echo "Operating system: $(uname -o)"
echo "Kernel version: $(uname -r)"
echo "CPU information: $(lscpu | grep "Model name" | awk '{print $3, $4, $5, $6, $7, $8}')"
输出
Operating system: GNU/Linux Kernel version: 5.15.0-60-generic CPU information: AMD Ryzen 9 5950X 16-Core Processor
让我们分解一下。脚本的第一行和往常一样,是shebang行。
接下来的三行使用各种命令显示系统信息。uname -o 命令显示操作系统,uname -r 命令显示内核版本,lscpu | grep "Model name" | awk '{print $3, $4, $5, $6, $7, $8}' 命令显示 CPU 信息。
要运行脚本,请将其保存到文件(例如 systeminfo.sh),使用 chmod +x systeminfo.sh 命令使其可执行,然后使用 ./systeminfo.sh 运行它。
脚本 5:密码生成器
我们要看的最后一个脚本是密码生成器。此脚本使用大小写字母、数字和特殊字符的组合生成随机密码。脚本如下所示 -
示例
#!/bin/bash length=12 password=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=' | fold -w $length | head -n 1) echo "您的新密码是:$password"
输出
您的新密码是:YRY+zm:<JwYi
我们来分解一下。脚本的第一行和往常一样,是shebang行。
第二行将名为 length 的变量设置为所需的密码长度。
第三行使用 cat /dev/urandom | 生成随机密码。 tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=' | fold -w $length | head -n 1 命令。此命令使用 cat /dev/urandom 命令生成随机数据,然后使用 tr 命令过滤掉不需要的字符。fold -w $length 命令将输出按所需长度分行,head -n 1 命令选择第一行(即密码)。
要运行脚本,请将其保存到文件(例如 password.sh),使用 chmod +x password.sh 命令使其可执行,然后使用 ./password.sh 运行它。
脚本 6:文件搜索
此脚本允许您根据关键字在目录或子目录中搜索文件。以下是示例 -
#!/bin/bash echo "Enter directory to search: " read dir echo "Enter keyword to search for: " read keyword find $dir -name "*$keyword*" -print
此脚本提示用户输入要搜索的目录和关键字,然后使用 find 命令搜索名称中包含该关键字的文件。
脚本 7:目录备份
此脚本用于将整个目录(包括子目录和文件)备份到备份位置。以下是示例 -
#!/bin/bash src_dir=/path/to/src/dir/ backup_dir=/path/to/backup/dir/ tar -czf $backup_dir/backup_$(date +%Y-%m-%d_%H-%M-%S).tar.gz $src_dir
此脚本设置源目录和备份目录的变量,然后使用 tar 命令在备份目录中创建源目录的压缩包,文件名中包含时间戳。
脚本 8:进程监控
该脚本用于监控特定进程,并在进程停止运行时发送警报。以下是示例 -
#!/bin/bash
process_name=myprocess
while true
do
if ps aux | grep $process_name | grep -v grep > /dev/null
then
sleep 1
else
echo "$process_name has stopped running."
mail -s "Process Monitor Alert" user@example.com <<< "$process_name has stopped running."
break
fi
done
此脚本使用 while 循环,使用 ps 命令持续检查特定名称的进程是否正在运行。如果进程未运行,脚本将使用 mail 命令向指定用户发送电子邮件警报。
脚本 9:网页抓取
此脚本从网站提取数据并将其存储在文件或数据库中。以下是使用 curl 和 grep 命令的示例 -
#!/bin/bash url="http://example.com" data=$(curl -s $url) echo $data | grep -oP '(?<=).*?(?= )' > title.txt
此脚本使用 curl 命令检索网页的 HTML 内容,然后使用 grep 提取 title 标签并将其保存到文件中。
脚本 10:SSH 自动化
此脚本可自动执行远程服务器上的 SSH 登录和命令执行。以下是使用 sshpass 命令的示例 -
#!/bin/bash server="example.com" username="user" password="password" command="ls" sshpass -p $password ssh $username@$server $command
此脚本使用 sshpass 命令自动执行 SSH 登录,并在远程服务器上执行命令,无需用户交互。
脚本 11:数据库备份
此脚本用于备份 MySQL 数据库并将其上传到远程服务器。以下是使用 mysqldump 命令和 rsync 命令的示例 -
#!/bin/bash db_name="mydb" db_user="user" db_password="password" backup_dir="/path/to/backup/dir/" backup_file="$backup_dir/backup_$(date +%Y-%m-%d_%H-%M-%S).sql" mysqldump -u $db_user -p$db_password $db_name > $backup_file rsync -avz $backup_dir user@example.com:/path/to/remote/dir/
此脚本使用 mysqldump 命令备份 MySQL 数据库,并将其保存到名称中包含时间戳的文件中。然后,它使用 rsync 命令将备份文件上传到远程服务器。
结论
Shell 脚本是一个强大的工具,可以帮助您自动执行任务、执行系统管理任务,甚至创建软件。我们在本文中介绍的脚本只是 Shell 脚本的冰山一角,但它们应该可以为您开始构建自己的脚本奠定良好的基础。
记住,熟能生巧,所以不要害怕尝试不同的命令和脚本,找到最适合您的。祝您脚本编写愉快!
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

