Linux软件编程与Shell脚本编程

一、操作系统基础

操作系统本质一套软件,向下屏蔽硬件差异,向上给应用程序提供统一接口,实现软件跨硬件运行。
主流PC操作系统:Unix、Linux、Windows。
Linux:源自GNU项目,C语言编写,广泛用于服务器、嵌入式设备。

Linux内核五大核心能力

  1. 内存管理:内存分配、回收、虚拟内存。
  2. 多任务调度:CPU时间片分配,进程调度。
  3. 文件系统管理:Linux一切皆文件,设备、套接字都抽象成文件。
  4. 进程间通信:进程之间数据交互。
  5. 网络通信:网络协议栈。

内核是纯C实现,用户程序不能直接访问内核。用户通过系统调用进入内核;shell作为命令解释器,封装系统调用给使用者操作。

库函数 vs 系统调用

  1. 系统调用:内核提供接口,操作系统专属,功能强大,开销大。
  2. 库函数:对系统调用做封装,可移植,上层应用优先使用库函数。

二、Shell基础命令

Shell是命令解释器,接收用户输入命令,调用内核完成工作。

文件目录基础命令

  • ls:查看目录, ls -l 详细信息, ls -a 显示隐藏文件。
    文件类型标识: ‑ 普通文件, d 目录, l 软链接, b 块设备, c 字符设备。
  • touch:新建空文件
  • rm:删除文件; rm -rf 强制递归删除目录,高危命令
  • mkdir:创建目录;rmdir:仅删除空目录
  • cp:复制文件/目录;复制目录需要加 ‑r
  • mv:移动、重命名文件

文件查看命令

  • cat:一次性输出全部内容
  • more/less:分页浏览大文件
  • head/tail:查看文件头部、尾部; tail -n 指定行数

文件查找

  • find:在目录树遍历查找文件
  • grep:文本检索,匹配字符串,输出匹配行

通配符

  • 匹配任意字符; ? 匹配单个字符; [] 匹配指定范围字符,用于批量匹配文件名。

压缩解压

tar工具,常用参数: ‑zcvf 压缩; ‑zxvf 解压。

管道与重定向

  1. 管道 | :把前一条命令输出,当做后一条命令输入。示例: ps -ef | grep bash
  2. 重定向: > 覆盖输出; >> 追加输出,把命令输出保存进文件。

常用工具命令

  • echo:打印输出文本
  • history:查看历史执行命令
  • du:统计文件、目录磁盘占用大小
  • date:查看系统时间
  • uname:查看系统内核版本
  • ping:网络连通测试
  • dpkg/apt:软件包安装卸载管理

三、Shell脚本编程

Shell脚本本质:把多条shell命令写到文件,批量执行。

Shell脚本运行完整流程

  1. vim编写脚本文件,第一行声明解释器 #!/bin/bash
  2. chmod +x xxx.sh 添加可执行权限
  3. ./xxx.sh 执行脚本

坑点: #!/bin/bash 写错字符脚本直接报错; [ ] 做条件判断,中括号内侧两边必须留空格,空格缺失直接报语法错误。

Shell变量

  1. 环境变量:系统全局变量,如PATH、HOME。
  2. 位置变量: $0 脚本名; $1 $2 传入脚本参数; $# 参数个数。
  3. 自定义变量: 变量名=值 ,等号两边不能有空格。

引号区别

  • 双引号:解析里面的变量;
  • 单引号:原样输出,不解析变量。

输入输出

  • read:读取终端用户输入。

分支语句

  1. if条件分支: if 条件;then … else … fi
  2. case多分支:匹配不同分支执行对应逻辑。

重点总结

  1. Linux内核不允许用户直接访问,程序依靠系统调用完成内核操作;库函数封装系统调用,可移植性更好。
  2. Shell命令高频坑:rm‑rf高危;通配符批量处理;管道和重定向实现命令组合。
  3. Shell脚本三大高频踩坑:第一行解释器写错;if判断 [ ] 缺少空格;变量赋值 = 两边不能空格。
  4. read读取输入,if、case完成分支判断,是shell脚本作业的核心。
  5. shell脚本适合轻量自动化;不适合大规模复杂业务。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐