文章目录
- 常用的 Shell 命令
- 1. 变量
- 2. 注释
- 3. 输出
- 4. 输入
- 5. 条件判断
- 6. 循环
- 7. 函数
- 8. 运算
- 9. 流程控制
- 10. 文件和目录操作
- 11. 错误处理
- Shell 脚本应用案例
- 1. Hello World 脚本
- 2. 创建系统账户及设置密码
- 3. 日志文件备份
- 4. 一键部署 LNMP 环境
- 5. 检查磁盘空间
- 6. 自动安装软件包
- 7. 文件查找与删除
- 8. 系统信息报告
- 9. 网络监控脚本
- 10. 文件内容替换
- 11. 系统服务管理
- 12. 系统更新脚本
- 13. 备份数据库
常用的 Shell 命令
Linux Shell 脚本是一种强大的工具,可以用来自动化日常任务、系统管理、数据处理等。下面是一些常用的 Shell 命令和它们在脚本中的使用方法。
1. 变量
变量用于存储值或字符串。在 Bash shell 中定义变量非常简单:
variable_name=value
示例:
#!/bin/bash
name="John Doe"
echo "Hello, $name!"
2. 注释
#
符号之后的内容会被当作注释,不会被执行。
# This is a comment
3. 输出
echo
命令用于输出文本到标准输出(通常是终端)。
echo "This is an output message."
4. 输入
read
命令用于从用户获取输入。
echo "Enter your name:"
read name
echo "Hello, $name!"
5. 条件判断
if
语句用于基于条件执行代码块。
if [ "$number" -gt 10 ]; then
echo "Number is greater than 10."
else
echo "Number is less than or equal to 10."
fi
6. 循环
for
循环遍历列表中的元素。while
循环在条件为真时重复执行。
# For loop
for i in {1..5}; do
echo "Loop iteration: $i"
done
# While loop
i=1
while [ $i -le 5 ]; do
echo "Loop iteration: $i"
((i++))
done
7. 函数
函数允许你将一系列命令组合起来,并且可以多次调用这些命令。
greet() {
echo "Hello, $1"
}
greet "Alice"
8. 运算
可以进行简单的数学运算。
a=5
b=3
sum=$((a + b))
echo "Sum is: $sum"
9. 流程控制
break
退出循环。continue
跳过当前迭代并继续下一次迭代。
for i in {1..10}; do
if [ $i -eq 5 ]; then
break
fi
echo $i
done
for i in {1..10}; do
if [ $((i % 2)) -eq 0 ]; then
continue
fi
echo $i
done
10. 文件和目录操作
mkdir
创建目录。rm
删除文件。cp
复制文件。mv
移动或重命名文件。grep
在文件中搜索模式。wc
统计字节数、字数、行数等。sort
对文件内容排序。uniq
过滤重复的行。sed
文本流编辑器。awk
强大的文本处理工具。
示例:
mkdir new_directory
cp file.txt new_directory/
wc -l file.txt
11. 错误处理
通过检查命令的退出状态来处理错误。
command || echo "Command failed."
command && echo "Command succeeded."
以上就是一些基本的 Shell 脚本命令和结构。你可以根据需要组合这些命令来创建更复杂的脚本。
Shell 脚本应用案例
以下是几个具体的 Shell 脚本应用案例,这些案例基于之前提到的一些常见任务:
1. Hello World 脚本
这个脚本是最简单的例子,用于输出“Hello World!”。
#!/bin/bash
echo "Hello World!"
2. 创建系统账户及设置密码
这个脚本接受两个参数:用户名和密码,然后创建一个新用户并设置密码。
#!/bin/bash
# 通过位置变量创建 Linux 系统账户及密码
#$1 是执行脚本的第一个参数 (用户名)
#$2 是执行脚本的第二个参数 (密码)
useradd "$1"
echo "$2" | passwd --stdin "$1"
3. 日志文件备份
这个脚本每周五凌晨 3 点自动备份 /var/log
目录下的所有日志文件,并将它们压缩成一个 .tar.gz
文件。
#!/bin/bash
# 每周 5 使用 tar 命令备份/var/log 下的所有日志文件
tar -czf log-`date +%Y%m%d`.tar.gz /var/log
为了使这个脚本能够定期运行,你需要在 crontab 中添加一条定时任务:
# 打开 crontab 编辑器
crontab -e
# 添加以下行
0 3 * * 5 /root/logbak.sh
4. 一键部署 LNMP 环境
这个脚本用于一键部署 LNMP(Linux, Nginx, MySQL, PHP)环境。
#!/bin/bash
# 一键部署 LNMP(RPM 包版本)
# 使用 yum 安装部署 LNMP,需要提前配置好 yum 源
yum -y install nginx
yum -y install mariadb-server mariadb-client
yum -y install php php-mysql
# 启动服务
systemctl start nginx mariadb
# 设置开机启动
systemctl enable nginx mariadb
5. 检查磁盘空间
这个脚本可以显示当前系统的磁盘使用情况。
#!/bin/bash
# 显示磁盘使用情况
df -h
6. 自动安装软件包
这个脚本可以根据提供的软件包列表自动安装所需的软件包。
#!/bin/bash
# 自动安装软件包
# 第一个参数是软件包列表,以逗号分隔
pkgs="$1"
for pkg in $(echo $pkgs | tr ',' ' '); do
yum -y install $pkg
done
7. 文件查找与删除
这个脚本可以在指定目录中查找并删除特定类型的文件。
#!/bin/bash
# 查找并删除特定类型的文件
# 第一个参数是目录路径
# 第二个参数是文件扩展名
dir="$1"
ext="$2"
find "$dir" -type f -name "*.$ext" -delete
接下来 Shell 脚本应用案例,涵盖一些常见的系统管理和自动化任务。
8. 系统信息报告
这个脚本会收集系统的相关信息,如操作系统名称、内核版本、内存使用情况、磁盘空间等,并将这些信息打印出来。
#!/bin/bash
# 系统信息报告
echo "System Information Report:"
echo "---------------------------"
echo "Hostname: $(hostname)"
echo "OS: $(uname -s) $(uname -r)"
echo "Kernel Version: $(uname -v)"
echo "Memory Usage: $(free -m | grep Mem | awk '{print $3/$2 * 100.0"%"}')"
echo "Disk Space Usage: $(df -h | awk '/\/$/ {print $5}')"
9. 网络监控脚本
这个脚本每隔一分钟检查网络连接的状态,并记录到一个日志文件中。
#!/bin/bash
# 网络监控脚本
log_file="/var/log/network_monitor.log"
while true; do
ping -c 1 google.com > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$(date): Network is UP" >> $log_file
else
echo "$(date): Network is DOWN" >> $log_file
fi
sleep 60
done
10. 文件内容替换
这个脚本会在指定的文件中查找特定的字符串,并将其替换成新的字符串。
#!/bin/bash
# 文件内容替换
# 第一个参数是文件路径
# 第二个参数是旧字符串
# 第三个参数是新字符串
file_path="$1"
old_string="$2"
new_string="$3"
sed -i "s/$old_string/$new_string/g" "$file_path"
11. 系统服务管理
这个脚本可以启动、停止或重启指定的服务。
#!/bin/bash
# 系统服务管理
# 第一个参数是服务名称
# 第二个参数是操作 (start, stop, restart)
service_name="$1"
action="$2"
case $action in
start)
systemctl start $service_name
;;
stop)
systemctl stop $service_name
;;
restart)
systemctl restart $service_name
;;
*)
echo "Invalid action. Use start, stop, or restart."
exit 1
;;
esac
12. 系统更新脚本
这个脚本会检查可用的软件包更新,并自动安装它们。
#!/bin/bash
# 系统更新脚本
# 使用 yum 更新系统
yum update -y
13. 备份数据库
这个脚本会备份指定的 MySQL 数据库,并将备份文件保存在一个指定的位置。
#!/bin/bash
# 备份 MySQL 数据库
# 第一个参数是数据库名称
# 第二个参数是数据库用户名
# 第三个参数是数据库密码
db_name="$1"
db_user="$2"
db_password="$3"
backup_dir="/var/backups/mysql"
backup_file="${backup_dir}/${db_name}-$(date +%Y%m%d%H%M%S).sql"
mysqldump -u $db_user -p$db_password $db_name > $backup_file
这些脚本覆盖了从简单的系统信息报告到复杂的网络监控和数据库备份等任务。
————————————————
最后我们放松一下眼睛