终端指令后续和shell脚本编程

终端指令后续

1.磁盘指令

  • 常用命令
    • n 新建分区
    • d 删除分区
    • p 显示分区表
    • w 保存并退出
    • q 不保存退出
  • 注意事项
    • 操作前需卸载设备
    • 分区后需格式化才能使用

1.2 mkfs(格式化工具)

  • 功能:创建文件系统

  • 格式

    复制代码

    bash

    复制代码
    sudo mkfs.文件系统类型 分区设备
  • 常用类型

    • mkfs.ntfs:Windows兼容格式
    • mkfs.ext4:Linux常用格式
    • mkfs.vfat:FAT32通用格式
  • 示例

    复制代码

    bash

    复制代码
    sudo mkfs.ntfs /dev/sdb1

2. 挂载管理

2.1 mount(挂载)

  • 功能:将存储设备关联到目录

  • 格式

    复制代码

    bash

    复制代码
    sudo mount 设备路径 挂载点
  • 示例

    复制代码

    bash

    复制代码
    sudo mount /dev/sdb1 /mnt/usb
  • 注意事项

    • 推荐使用绝对路径
    • 挂载点需为空目录

2.2 umount(卸载)

  • 功能:解除设备关联

  • 格式

    复制代码

    bash

    复制代码
    sudo umount 设备路径|挂载点
  • 强制卸载

    复制代码

    bash

    复制代码
    sudo umount -l 强制卸载

3. 磁盘状态查看

3.1 df(磁盘空间)

  • 功能:显示磁盘使用情况

  • 常用选项

    • -h 人性化显示(自动转换单位)
    • -a 显示所有文件系统
  • 示例

    复制代码

    bash

    复制代码
    df -h /dev/sdb1

3.2 lsblk(设备列表)

  • 功能:显示块设备树状图

  • 常用选项

    • -f 显示文件系统类型
    • -o 自定义显示列
  • 示例

    复制代码

    bash

    复制代码
    lsblk -f

4. U盘完整处理流程

  1. 检测设备

    复制代码

    bash

    复制代码
    ls /dev/sd*  # 查看新增设备
  2. 分区操作

    复制代码

    bash

    复制代码
    sudo fdisk /dev/sdb
  3. 格式化

    复制代码

    bash

    复制代码
    sudo mkfs.vfat /dev/sdb1
  4. 挂载使用

    复制代码

    bash

    复制代码
    mkdir ~/usb_drive
    sudo mount /dev/sdb1 ~/usb_drive
  5. 卸载设备

    复制代码

    bash

    复制代码
    sudo umount ~/usb_drive

5. 高级操作

5.1 永久挂载

  • 编辑fstab

    复制代码

    bash

    复制代码
    sudo vim /etc/fstab
  • 添加格式

    复制代码

    markdown

    复制代码
    /dev/sdb1  /mnt/usb  ntfs  defaults  0  0

5.2 分区恢复

  • testdisk工具

    复制代码

    bash

    复制代码
    sudo apt-get install testdisk
    sudo testdisk

6. 注意事项

  1. 操作前务必备份重要数据

  2. 卸载失败常见原因:

    • 有进程正在访问设备
    • 当前位于挂载目录中
  3. NTFS格式需要安装额外驱动: bash

    复制代码
    sudo apt-get install ntfs-3g

shell脚本编程

1.基本概念

1.什么是shell

shell: 贝壳,本质是指针的集合,但是在使用时需要满足一定的逻辑

2.shell的功能

shell是用于用户和操作系统的交互核心接口

3.语言分类

c:属于编译型语言,需要使用gcc进行编译,当文件不改变时,不需要重新编译,直接连接即可,执行速度快

shell:属于解释性语言,使用解析器bash,无论文件是否改变,每次都需要重新解析,相对来说效率低

二、创建shell脚本

1.shell脚本:使用文件***.sh

vim ***.sh

2.补全脚本文件

#! 后面敲一个tab键

#!/bin/bash ---->表示使用的时bash解析器

#! ---->表示这是一个脚本文件

/bin/bash --->表示使用的解析器的路径

3.使用shell

复制代码
.单行注释
    #    ---》单行注释
2.shell不存在多行注释,但是可以使用指令模拟多行注释,注意在使用过程中有可能出现报错
    <<CONMEND
    COMMEND
    
    COMMEND:类似标识符

三、认识解析器

1.查看解析器

1)echo $SHELL -->打印SHELL变量的值

2)cat /etc/shells

2.认识相关解析器

bash: 在Linux\debian默认使用的就是 bash

sh :最早期的解析器,交互性差

dash:是轻量级的sh,类似sh

csh:类似C语言

ksh:兼容sh csh

3.运行一个脚本文件

复制代码
1.执行脚本文件
    bash ****.sh        默认在当前终端下的子终端运行,把运行结果返回到当前终端
2.执行脚本文件,具备可执行权限
    chmod 777 ***.sh      默认在当前终端下的子终端运行,把运行结果返回到当前终端
    ./***.sh    
3.执行脚本文件
     source ***.sh  直接在当前终端运行

四、环境变量

1.查看环境变量

env

环境变量:系统已经定义的变量,并表示一定的含义

复制代码
SHELL=/bin/bash
LOGNAME=ubuntu
HOME=/home/ubuntu
USERNAME=ubuntu
USER=ubuntu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/

如果文件类似指令执行,那么就需要把文件的路径添加到PATH环境变量里面

2.如何修改PATH路径

2.1 只对当前终端有效
复制代码
1.修改PATH里面的值,
    export PATH=$PATH:/home/ubuntu/24121C高级/day2/
    |        |    |           |
    |        |    |     需要添加的文件路径
    |        |  展开PATH的值
    |     环境变量的路径
    类似extern,导出环境变量

    注意可以使用echo $PATH查看PATH里面的内容
2.给文件添加可执行权限
    chmod 777 ***.sh
3.执行使用文件名执行脚本即可
    ****.sh
2.2 对当前用户有效~/.bashrc
复制代码
1.打开vim ~/.bashrc文件,在最后添加以下语句
    export PATH=$PATH:/home/ubuntu/24121C高级/day2/
    |        |    |           |
    |        |    |     需要添加的文件路径
    |        |  展开PATH的值
    |     环境变量的路径
    类似extern,导出环境变量
2.使文件生效
    source ~/.bashrc   或者 重启
3.给文件添加可执行权限
    chmod 777 ***.sh
4.执行使用文件名执行脚本即可
    ****.sh
2.3 对所有用户有效
复制代码
1.打开sudo vim /etc/bash.bashrc文件,在最后添加以下语句
    export PATH=$PATH:/home/ubuntu/24121C高级/day2/
    |        |    |           |
    |        |    |     需要添加的文件路径
    |        |  展开PATH的值
    |     环境变量的路径
    类似extern,导出环境变量
2.使文件生效
    source /etc/bash.bashrc   或者 重启
3.给文件添加可执行权限
    chmod 777 ***.sh
4.执行使用文件名执行脚本即可
    ****.sh
2.4 对所有用户有效
复制代码
1.打开sudo vim /etc/environment文件,在最后添加路径
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ubuntu/24121C高级/day2/"

2.使文件生效
    source /etc/environment   或者 重启
3.给文件添加可执行权限
    chmod 777 ***.sh
4.执行使用文件名执行脚本即可
    ****.sh

五、shell的变量

5.1 shell变量的格式

1,shell的不变量不存在类型,默认都是字符串

2.shell的变量默认都是全局变量

复制代码
1.shell变量的格式
    变量       error,因为shell认为是指令类似ls
    变量=        定义了变量值为空
    变量=初始化的值
2.例如
    a            error
    a=            √
    a=hello       √

5.2 shell变量的初始化

1.shell初始化时等号的左右两端不允许存在空格

2.shell中不需要加分号

a = hello ---> ls -l -h 1.sh

复制代码
1.格式
    变量=初始化的值
    变量='初始化的值'
    变量="初始化的值"
2.当初始化的值不存在空格时
    var=hello
    var='hello'
    var="hello"
3.当初始化的值存在空格
    var=hello world    error
    var='hello world'  √
    var="hello world"
4.当一个变量给另一个变量赋值的时候
    a=hello
    b=$a        --->b=hello
    b='$a'      --->b=$a
    b="$a"      ---b=hello
    
    c=$aworld   -->认为aworld是一个变量,得不到helloworld
    c=${a}world -->c=helloworld    
5.变量的连接
    a=hello
    b=world
    c=$a$b        -->c=helloworld
    c='$a$b'      --->c=$a$b
    c="$a$b"      --->c=helloworld

练习:定义a赋值 b赋值,实现ab的交换

复制代码
a=2
b=3
t=$a
a=$b
b=$t

5.3 引用shell的变量的值

复制代码
方式1:
    $变量名     ---》echo $SHELL
方式2:
    ${变量}

5.4 位置变量

1.位置变量类似C语言的argc argv

2.位置变量多用于shell中的函数传参

复制代码
$0    终端输入的文件名
$1    终端输入的第一个字符串
$2    终端输入的第二个字符串
$3    终端输入的第三个字符串
...
$10   终端输入的第一个字符串后面加0
${10} 终端输入的第10个字符串
$n    终端输入的第n个字符串

六、输出

6.1 echo

注意:在shell中使用变量时不建议使用'',原因时因为单引号引起来以后不会展开结果

复制代码
echo 字符串        ---》echo hello
echo '字符串'       ---->echo 'hello'
echo "字符串"      ---->echo "hello"

输出变量:
    a=1
    b=2
    c=3
    echo a=$a    --->a=1
    echo a=$a b=$b c=$c -->a=1 b=2 c=3
    echo 'a=$a b=$b c=$c' -->a=$a b=$b c=$c
     echo "a=$a b=$b c=$c" -->a=1 b=2 c=$3
相关推荐
木木黄木木32 分钟前
html5炫酷图片悬停效果实现详解
前端·html·html5
请来次降维打击!!!1 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
難釋懷2 小时前
JavaScript基础-移动端常见特效
开发语言·前端·javascript
自动花钱机2 小时前
WebUI问题总结
前端·javascript·bootstrap·css3·html5
拉不动的猪2 小时前
简单回顾下pc端与mobile端的适配问题
前端·javascript·面试
拉不动的猪2 小时前
刷刷题49(react中几个常见的性能优化问题)
前端·react.js·面试
snowfoootball3 小时前
基于 Ollama DeepSeek、Dify RAG 和 Fay 框架的高考咨询 AI 交互系统项目方案
前端·人工智能·后端·python·深度学习·高考
烛阴3 小时前
深入浅出:JavaScript ArrayBuffer 的使用与应用
前端·javascript
zhu12893035564 小时前
用Rust和WebAssembly打造轻量级前端加密工具
前端·rust·wasm
@PHARAOH4 小时前
WHAT - Electron 系列(一)
前端·javascript·electron