5个Linux新手学习Shell编程的Shell脚本


如果您是Linux新手,一开始学习shell脚本编写可能会觉得很困难。但是,在使用Linux系统时,shell脚本编写是一项非常有用的技能。Shell脚本可以自动化重复性任务,执行系统管理任务,甚至可以帮助软件开发。

在本文中,我们将介绍五个Linux新手可以学习的shell脚本,以开始学习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 "Your new password is: $password"

输出

Your new password is: 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" [email protected] <<< "$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 [email protected]:/path/to/remote/dir/

此脚本使用mysqldump命令执行MySQL数据库的备份并将备份保存到一个文件名中包含时间戳的文件中。然后它使用rsync命令将备份文件上传到远程服务器。

结论

Shell脚本是一个强大的工具,可以帮助您自动化任务、执行系统管理任务甚至创建软件。我们在本文中介绍的脚本只是shell脚本的冰山一角,但它们应该为您构建自己的脚本打下良好的基础。

记住,熟能生巧,所以不要害怕尝试不同的命令和脚本,看看什么最适合您。祝您脚本编写愉快!

更新于:2023年4月11日

462 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告