1. 操作系统概述

操作系统是一款软件,其核心作用是屏蔽底层不同的硬件平台,为上层应用提供统一的接口,从而实现通用的软件代码。

PC三大操作系统:

  • Unix:世界上第一款操作系统
  • Linux:GNU(GNU's Not Unix)项目的重要组成部分,使用C语言编写,广泛应用于服务器和嵌入式领域
  • Windows:使用C/C++开发

2. Linux操作系统

2.1 Linux内核五大功能

  • 内存管理
  • 多任务调度
  • 文件系统管理(Linux系统中一切皆是文件)
  • 多任务间的通信
  • 网络通信

2.2 Linux内核特点

  1. Linux内核是由系统调用组成的一些纯C代码
  2. 不允许与用户直接交互
  3. 内核功能复杂,不容易被调用,所以通过shell编写一系列命令来完成内核功能(命令解释器)

2.3 Shell作用

  1. 保护内核
  2. 命令解释器

2.4 库函数

  1. 库函数是对系统调用的封装,能够处理一些复杂的应用场景
  2. 系统调用是Linux内核中的函数接口,只有在Linux系统中才能使用,功能强大,但十分简练
  3. 库函数可以移植,所以具有通用性

3. Shell基础命令

3.1 基础命令

  1. ls - 列出目录内容

    文件类型:

    • b:block 块设备文件
    • c:character 字符设备文件
    • d:directory 目录文件
    • -:普通文件
    • l:link 链接文件
    • s:socket 套接字文件
    • p:pipe 管道文件
  2. touch - 创建文件
  3. rm - 删除文件
  4. mkdir - 创建文件夹
    mkdir dirname
    ls -l
    ls -a
  5. rmdir - 删除空文件夹
  6. rm -rf - 删除非空文件夹
  7. cp - 拷贝文件(如果拷贝目录文件需要加 -rf选项)
  8. mv - 移动文件

3.2 文件查看命令

  1. cat - 查看文件内容
  2. more/less - 分页查看文件
  3. head/tail - 查看文件开头/结尾
    head/tail -n 行数 文件名

3.3 文件查找

  1. find - 在当前目录下找与文件名对应的文件路径
    find . -name "文件名"
  2. grep - 打印出文件名中所有与字符串匹配的行
    grep "字符串" 文件名

3.4 通配符

  • *:匹配任意长度,任意字符的文件名
  • ?:匹配一位长度,任意字符的文件名
  • []:匹配一位长度,指定字符的文件名
file_*.txt
file_??.txt
file_[1,3,5].txt
file_[1-5].txt
file_[^6].txt

3.5 组合命令

  1. 管道 - 将前面命令的输出作为后续命令的输入
    ps -ef | grep "bash"
  2. 重定向 - 将前面命令的输出重定向到文件中
    • >:覆盖重定向
    • >>:追加重定向
    ps -ef > file.txt
练习:

在/usr/include/stdio.h文件中的后200行,找到和extern相关的内容,并把这些内容所在的行记录到file.txt文件中,使用一条shell命令实现:

tail -n 200 /usr/include/stdio.h | grep "extern" > file.txt

3.6 其余常用命令

  1. echo - 将内容显示在终端
  2. history - 查看终端输入过的历史命令
  3. du - 查看文件大小
    du -m 文件名/目录名
    du -k 文件名/目录名
  4. od - 按照指定的方式查看文件中的内容
    od -c file.txt
  5. date - 查看时间和日期
  6. uname - 查看内核版本、平台架构
    uname -a
  7. ifconfig - 查看网卡信息
  8. ping - 测试主机与指定IP地址是否能够网络连通

3.7 软件包管理工具

dpkg工具集:
  1. 安装软件:sudo dpkg -i 软件包名.deb
  2. 卸载软件:sudo dpkg -P 软件名
  3. 查看安装是否成功:dpkg -l 软件名
apt-get工具集:
  1. 一定有网
  2. 设置apt-get工具集的源
  3. 下载并安装软件:sudo apt-get install 软件名
  4. 卸载软件:sudo apt-get remove 软件名 --purge

4. Shell编程

4.1 编程语言类型对比

特性 编译型语言 解释型语言
数据类型 有丰富的数据类型 所有内容都是字符串
执行方式 先编译再执行 边翻译边执行
执行速度 执行速度快 执行速度慢
开发效率 开发效率低 开发效率高
适用场景 数据的运算和处理 系统的开发和维护

4.2 Shell脚本编写步骤

  1. 打开文件并编写代码:vim filename.sh
  2. 加上执行权限:chmod +x filename.sh
  3. 运行脚本:./filename.sh

Shell脚本本质就是一系列shell命令的集合

4.3 Shell中的变量

  1. 环境变量:PWD、HOME、PATH
  2. 位置变量
    • $0:文件名
    • $1:给脚本传参的第一个参数
    • $2:第二个参数
    • $3:第三个参数
    • $4:第四个参数
    • $#:传入参数个数
    • $$:脚本运行时的进程ID号
    • $?:上一条shell语句执行的结果
  3. 自定义变量变量名=值

4.4 Shell中的引号

  1. 双引号:打印时会替换成变量的值
  2. 单引号:打印单引号中的内容不变
  3. 倒引号:将引号内部的内容作为一个命令使用

4.5 Shell脚本中的输入和输出

  1. echo - 输出
  2. read - 输入

4.6 分支语句

if分支语句
if 判断条件
then
    # 条件成立时执行的语句
else
    # 条件不成立时执行的语句
fi
case分支语句
case 变量名 in
    值1)
        语句
        ;;
    值2)
        语句
        ;;
    值3)
        语句
        ;;
    *)
        语句
        ;;
esac

4.7 循环语句

while循环

while循环在条件为真时重复执行语句块:

while 条件
do
    语句
done

示例:

#!/bin/bash
count=1
while [ $count -le 5 ]
do
    echo "循环次数: $count"
    count=$((count + 1))
done
for循环

for循环用于遍历列表中的每个元素:

for 变量 in 列表
do
    语句
done

三种常见用法:

# 方式1:直接列出值
for i in 1 2 3 4 5
do
    echo "数字: $i"
done
方式2:使用大括号扩展
for i in {1..100}
do
echo "数字: $i"
done
方式3:使用seq命令生成序列
for i in seq 100
do
echo "数字: $i"
done

4.8 数组

Shell支持一维数组,数组元素用空格分隔:

# 定义数组
array=(元素1 元素2 元素3)
访问数组元素
echo ${array[0]}  # 输出第一个元素
echo ${array[1]}  # 输出第二个元素
获取数组长度
echo ${#array[@]}
遍历数组
for item in ${array[@]}
do
echo $item
done
修改数组元素
array[0]="新元素"
添加数组元素
array[${#array[@]}]="新元素"

4.9 函数

Shell函数用于封装可重用的代码块:

# 函数定义
函数名() {
    语句
    [return 返回值]
}
或者
function 函数名 {
语句
[return 返回值]
}
函数调用
函数名 参数1 参数2 ...
获取函数返回值
函数名
echo $?  # 获取函数返回值

示例:

#!/bin/bash
定义函数
say_hello() {
echo "Hello, $1!"
return 0
}
调用函数
say_hello "World"
带返回值的函数
add() {
local sum=$(( $1 + $2 ))
return $sum
}
add 10 20
echo "10 + 20 = $?"

函数参数说明:

  • $1:第一个参数
  • $2:第二个参数
  • $#:参数个数
  • $@:所有参数列表
  • $*:所有参数作为一个字符串

5. 作业练习

  1. 从终端接收一个文件名或路径,打印该文件的类型
  2. 从终端接收一个文件名,如果该文件名为qianrushi则处理该文件,如果文件名不为qianrushi则无需做任何处理,处理方式为:如果该文件已经存在,则创建一个tmp文件夹,并在文件夹下新建quanrushi.txt文件,如果文件不存在则直接创建
  3. 从终端输入一个成绩,使用case打印出成绩的级别:
    • 90 - 100:打印"优秀"
    • 80 - 89:打印"良好"
    • 70 - 79:打印"中等"
    • 60 - 69:打印"及格"
    • 60以下:打印"不及格"
Logo

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

更多推荐