Linux 新手学习 Shell 编程的 5 个 Shell 脚本
如果您是 Linux 新手,学习 shell 脚本一开始可能会让人望而生畏。然而,在使用 Linux 系统时,shell 脚本编写可能是一项非常有用的技能。 Shell 脚本可以自动执行重复任务、执行系统管理任务,甚至帮助软件开发。
在本文中,我们将介绍 Linux 新手可以学习的五个 shell 脚本,以开始 shell 编程。我们将介绍 shell 脚本编写的一些基础知识,并提供每个脚本的示例以帮助您了解它们的工作原理。
什么是 Shell 脚本?
shell 脚本是用脚本语言编写的、在 Unix/Linux shell 中运行的程序。 Shell 脚本是一个功能强大的工具,可让您自动执行任务、执行系统管理任务,甚至创建软件。
Shell 脚本在命令行界面中执行,可用于执行从基本文件管理到复杂数据处理的各种任务。
脚本 1:你好世界
每个程序员学习的第一个脚本都是经典的“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“型号名称”| 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 "Your new password is: $password"
输出
Your new password is: YRY+zm:<JwYi
让我们来分解一下。像往常一样,脚本的第一行是 shebang 行。
第二行将一个名为 length 的变量设置为所需的密码长度。
第三行使用 cat /dev/urandom | 生成随机密码tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=' |折叠 -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提取标题标签并将其保存到文件中。
脚本 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 脚本编写的冰山一角,但它们应该为您开始构建自己的脚本奠定良好的基础。
请记住,熟能生巧,所以不要害怕尝试不同的命令和脚本,看看什么最适合您。快乐的脚本编写!