云计算百科
云计算领域专业知识百科平台

嵌入式Linux开发必学Shell 从基础命令到脚本自动化

一、Shell 本质 人机对话的“翻译官”

当你面对一台嵌入式 Linux 设备(如智能音箱、路由器),如何让它执行你的指令?Shell 就是这个“对话翻译官”。它接收你的文本命令,翻译成内核能理解的语言,再将结果返回给你。终端窗口就是你与 Shell 交互的界面,而 Shell 脚本则是将多个命令组合成自动化程序的工具。理解这一点,是掌握 Linux 命令行的第一步。

二、基础命令 像手机操作一样直观

1. 文件与目录操作

ls 查看当前目录内容

ls # 简单列出
ls -l # 详细列表(权限、大小、时间)
ls -la # 显示所有文件(含隐藏文件)
ls -lh # 大小以 K/M/G 显示

cd 切换目录

cd /home/user/docs # 绝对路径
cd .. # 返回上级目录
cd ~ # 返回家目录
cd – # 返回上一次目录

mkdir/rm 创建删除

mkdir project # 创建文件夹
mkdir -p a/b/c # 递归创建多级目录
rm file.txt # 删除文件
rm -rf old_dir # 强制删除目录(危险!)

2. 文件内容查看

cat/head/tail 不同粒度的查看

cat config.txt # 查看整个文件
cat -n config.txt # 带行号显示
head -10 log.txt # 查看前10行
tail -5 log.txt # 查看后5行
tail -f app.log # 实时跟踪日志(调试神器)

more/less 分页浏览

more long_file.txt # 分页查看(只能向下)
less long_file.txt # 可上下翻页、搜索(/关键词,n/N 上下查找)

三、高级工具 命令组合的艺术

1. 管道 | 命令接力

前一个命令的输出作为后一个命令的输入:

ls | grep ".txt" # 筛选.txt文件
ps aux | grep "python" # 查找python进程
cat log.txt | wc -l # 统计文件行数

2. 重定向 控制输入输出流向

ls > files.txt # 输出重定向到文件(覆盖)
ls >> files.txt # 输出追加到文件
grep "error" < log.txt # 从文件读取输入
command 2> error.log # 错误信息重定向

3. grep 文本搜索神器

grep "error" app.log # 搜索包含"error"的行
grep -n "error" app.log # 显示行号
grep -i "ERROR" app.log # 忽略大小写
grep -r "main" ./src/ # 递归搜索目录
grep -v "debug" app.log # 排除包含"debug"的行

4. 通配符 批量操作

*.txt # 匹配所有.txt文件
test?.c # 匹配test1.c, test2.c等
[0-9].log # 匹配0.log到9.log
[a-c]*.txt # 匹配a,b,c开头的.txt文件

四、权限管理 文件安全之门

1. 权限基础

  • r(读)=4, w(写)=2, x(执行)=1

  • 三组权限:所有者(u) 所属组(g) 其他人(o)

  • 示例:rwxr-xr– = 754 (7=4+2+1, 5=4+1, 4=4)

2. chmod 修改权限

# 数字表示法
chmod 755 script.sh # 所有者rwx,组rx,其他人rx
chmod 644 config.ini # 所有者rw,组r,其他人r

# 符号表示法
chmod u+x script.sh # 给所有者加执行权限
chmod g-w data.txt # 去掉组的写权限
chmod o=r readme.txt # 其他人只读

3. 文件归属

chown user file.txt # 修改所有者
chown user:group file.txt # 同时修改所有者和组
chgrp devs project/ # 修改所属组

五、文件处理 压缩与查找

1. tar 打包压缩

# 压缩
tar -zcvf backup.tar.gz dir/ # gzip压缩(.tar.gz)
tar -jcvf backup.tar.bz2 dir/ # bzip2压缩(.tar.bz2,压缩率更高)

# 解压
tar -zxvf backup.tar.gz
tar -jxvf backup.tar.bz2 -C /target/ # 解压到指定目录

# 仅查看
tar -ztvf backup.tar.gz # 查看压缩包内容

2. find 精准查找

find /home -name "*.log" # 按名称查找
find . -iname "config*" # 忽略大小写
find ./src -type f -name "*.c" # 只找文件
find /var -size +10M # 查找大于10M的文件
find . -mtime -7 # 7天内修改的文件
find . -name "*.tmp" -exec rm {} \\; # 找到后执行删除

六、Shell 编程 自动化脚本

1. 变量

name="Linux" # 定义变量
echo "Hello $name" # 使用变量
echo $HOME # 系统环境变量
echo $PATH # 命令搜索路径

2. 位置参数

# script.sh
echo "脚本名: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "参数总数: $#"
echo "所有参数: $*"

3. 分支语句

if 条件判断

if [ -f "file.txt" ]; then
echo "文件存在"
elif [ -d "dir" ]; then
echo "目录存在"
else
echo "都不存在"
fi

case 多条件匹配

case $1 in
start)
echo "启动服务"
;;
stop)
echo "停止服务"
;;
restart)
echo "重启服务"
;;
*)
echo "用法: $0 {start|stop|restart}"
;;
esac

4. 循环语句

for 循环

# 遍历列表
for i in 1 2 3 4 5; do
echo "数字: $i"
done

# 遍历文件
for file in *.txt; do
echo "处理: $file"
done

while 循环

count=1
while [ $count -le 5 ]; do
echo "计数: $count"
count=$((count + 1))
done

until 循环

count=1
until [ $count -gt 5 ]; do
echo "计数: $count"
count=$((count + 1))
done

七、Shell vs C 语言 适用场景对比

特性

Shell 脚本

C 语言

执行方式

解释执行(即时)

编译执行(需编译)

语法

简洁灵活,无类型声明

严格规范,强类型

开发效率

高(几行完成文件操作)

低(需处理底层细节)

执行效率

较低(逐行解释)

高(直接机器码)

适用场景

系统管理、自动化、文本处理

系统软件、驱动、性能敏感应用

示例对比

# Shell版:统计文本行数
wc -l file.txt

# C版:统计文本行数
#include <stdio.h>
int main() {
FILE *fp = fopen("file.txt", "r");
int count = 0;
char ch;
while((ch = fgetc(fp)) != EOF)
if(ch == '\\n') count++;
printf("%d\\n", count);
fclose(fp);
return 0;
}

八、学习建议 从入门到精通

  • 循序渐进:先掌握 ls/cd/pwd 等基础命令,再学管道/重定向

  • 多用多练:在虚拟机或树莓派等设备上实际操作

  • 善用帮助:man 命令或 命令 –help查看手册

  • 记笔记:整理常用命令和脚本片段

  • 阅读源码:研究开源项目的启动脚本和 Makefile

  • 九、总结

    Shell 是嵌入式 Linux 开发的基石工具。基础命令是砖瓦,管道重定向是粘合剂,Shell 脚本是设计图。从简单的文件操作到复杂的自动化脚本,掌握 Shell 能极大提升开发效率。

    记住几个核心原则:

    • 管道连接一切:一个命令做一件事,管道串联复杂功能

    • 权限最小化:按需分配权限,避免 777

    • 脚本模块化:复杂任务拆分成简单函数

    • 错误处理:脚本中检查命令执行结果

    最后,打开终端,从 ls -la开始你的 Shell 探索之旅。真正的掌握源于实践,让命令成为你思考的一部分。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 嵌入式Linux开发必学Shell 从基础命令到脚本自动化
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!