Linux Shell 自动化实战指南
linux shell
什么是 Linux Shell
Linux Shell 是用户与 Linux 内核交互的命令行解释器。用户在终端中输入命令,Shell 负责解析命令、调用系统程序,并将执行结果返回给用户。对于服务器运维、自动化部署、日志分析、批量文件处理等场景,Shell 都是非常重要且实用的工具。
常见的 Shell 类型包括:
sh:早期 Unix Shell,语法较简单。bash:Linux 中默认常用的 Shell,功能丰富。zsh:交互体验较好,常用于开发环境。fish:语法友好,适合交互式使用。
本文主要以 bash 为例介绍 Linux Shell 的常用知识和基础教程。
常用 Shell 命令
查看当前目录
pwd
该命令用于显示当前所在目录。
列出文件
ls
ls -l
ls -a
ls:列出当前目录内容。ls -l:以详细信息显示文件。ls -a:显示隐藏文件。
创建目录
mkdir project
mkdir -p project/src/config
-p 参数可以递归创建多级目录。
切换目录
cd project
cd ..
cd ~
cd ..:返回上级目录。cd ~:回到用户家目录。
创建和编辑文件
touch app.sh
nano app.sh
vim app.sh
touch 可以创建空文件,nano 和 vim 是常用的文本编辑器。
文件与目录管理
Shell 中常见的文件操作命令包括:
cp file.txt backup.txt
mv file.txt /tmp/
rm file.txt
rm -r directory
说明:
cp:复制文件。mv:移动或重命名文件。rm:删除文件。rm -r:递归删除目录。
删除操作需要谨慎,尤其是使用 rm -rf 时,可能会造成不可恢复的数据丢失。
权限管理
Linux 文件权限由读、写、执行三种权限组成:
r:读权限。w:写权限。x:执行权限。
查看文件权限:
ls -l
修改权限:
chmod 755 app.sh
chmod +x app.sh
修改文件所有者:
chown user:group file.txt
在部署脚本或运行程序时,经常需要给脚本添加执行权限:
chmod +x run.sh
Shell 变量
Shell 中可以定义变量:
name="Linux"
echo $name
也可以定义环境变量:
export APP_ENV=production
echo $APP_ENV
变量赋值时,等号两边不能有空格。引用变量时通常使用 $变量名。
示例:
#!/bin/bash
app_name="demo"
echo "应用名称:$app_name"
条件判断
Shell 脚本可以根据条件执行不同逻辑。
#!/bin/bash
age=18
if [ $age -ge 18 ]; then
echo "成年人"
else
echo "未成年人"
fi
常用判断条件:
[ -f file.txt ] # 判断是否为普通文件
[ -d dir ] # 判断是否为目录
[ -z "$var" ] # 判断变量是否为空
[ "$a" = "$b" ] # 判断字符串是否相等
循环结构
for 循环
#!/bin/bash
for i in 1 2 3 4 5; do
echo "当前数字:$i"
done
遍历文件:
for file in *.txt; do
echo "文件:$file"
done
while 循环
#!/bin/bash
count=1
while [ $count -le 5 ]; do
echo "计数:$count"
count=$((count + 1))
done
循环常用于批量处理文件、执行重复任务、监控服务状态等场景。
管道与重定向
管道符 | 可以把前一个命令的输出作为后一个命令的输入。
ps aux | grep nginx
这条命令用于查找 nginx 相关进程。
重定向可以控制命令输出的位置:
echo "hello" > log.txt
echo "world" >> log.txt
command > output.txt 2> error.txt
说明:
>:覆盖输出到文件。>>:追加输出到文件。2>:将错误信息输出到指定文件。
文本处理命令
Shell 中经常需要处理文本内容,常用命令包括:
grep
grep "error" app.log
用于在文件中搜索指定内容。
awk
awk '{print $1}' data.txt
常用于按列提取数据。
sed
sed 's/old/new/g' file.txt
用于替换文本内容。
例如,将配置文件中的端口号替换掉:
sed -i 's/port=8080/port=9000/g' config.conf
编写一个简单脚本
下面是一个简单的 Shell 脚本,用于检查目录是否存在,不存在则创建,并写入日志。
#!/bin/bash
log_dir="./logs"
if [ ! -d "$log_dir" ]; then
mkdir -p "$log_dir"
echo "目录已创建:$log_dir"
else
echo "目录已存在:$log_dir"
fi
echo "脚本执行完成" >> "$log_dir/run.log"
运行方式:
chmod +x check.sh
./check.sh
Shell 脚本调试技巧
调试脚本时,可以在脚本开头添加:
set -x
这样 Shell 会打印出实际执行的命令,便于排查问题。
常用调试参数:
set -e # 遇到错误立即退出
set -u # 使用未定义变量时报错
set -x # 打印执行过程
推荐写法:
#!/bin/bash
set -euo pipefail
echo "脚本开始执行"
pipefail 可以让管道中任意命令失败时,整个管道返回失败状态。
Shell 使用注意事项
- 执行危险命令前要确认路径和参数。
- 删除文件时避免误用
rm -rf。 - 变量引用建议使用双引号,例如
"$file"。 - 脚本开头建议添加解释器声明:
#!/bin/bash。 - 日志输出要清晰,便于排查问题。
- 复杂逻辑可以拆分成多个脚本,提高可维护性。
总结
Linux Shell 是 Linux 系统管理和自动化处理的重要工具。通过掌握常用命令、变量、条件判断、循环、管道、重定向以及脚本编写方法,可以高效完成文件管理、日志分析、批量操作和自动化任务。学习 Shell 的关键在于多练习、多写脚本,并在实际场景中不断积累经验。对于开发者、运维人员和系统管理员来说,熟练使用 Shell 能显著提升工作效率。