task1 shell 后面验证

image
image
以下是对该Shell脚本的逐行详细解释,包含命令原理、变量逻辑和细节补充:

1. 脚本解释器声明

#!/bin/bash
  • 作用:指定脚本的执行环境为 /bin/bash(Linux 下最常用的 Shell 解释器)。
  • 意义:系统会调用 bash 来解析后续的命令,确保脚本语法被正确识别。

2. 获取CPU核心数

cpu=$(nproc)
  • 命令解析
    • nproc:Linux 命令,用于获取系统可用的逻辑CPU核心数(若CPU支持超线程,会包含虚拟核心;例如,物理核心4、超线程开启时,nproc 可能返回8)。
    • $(...)命令替换语法,将 nproc 的输出结果赋值给变量 cpu
  • 注释争议:脚本注释称“物理核心,nproc更准确”,但实际 nproc 默认显示逻辑核心(物理核心需通过 lscpu 计算,如 物理核心 = 每插槽核心数 × 插槽数)。

3. 获取内存容量(MB)

mem=$(free -m | awk 'NR==2 {print $2}')
  • 命令拆解
    • free -m:以 MB 为单位显示内存状态(-m 指定单位为兆字节),输出示例:
                    total        used        free      shared  buff/cache   available
      Mem:           7859        1427        5236          14        1195        6078
      Swap:          8191           0        8191
      
    • | awk 'NR==2 {print $2}'
      • |:管道符,将 free -m 的输出传递给 awk 处理。
      • NR==2awk 的行号匹配,仅处理第2行(即 Mem: 开头的行,对应物理内存数据)。
      • print $2:提取第2行的第2列total 列,代表总内存容量,单位MB)。
    • 最终,mem 变量存储总内存容量(MB)

4. 获取磁盘容量(根分区,GB)

disk=$(df -h / | awk 'NR==2 {gsub("G", "", $2); print $2}')
  • 命令拆解
    • df -h /:查看根分区(/)的磁盘使用情况,-h 让容量以人类可读格式显示(如 30G),输出示例:
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/sda1        30G   10G   20G  34% /
      
    • | awk 'NR==2 {gsub("G", "", $2); print $2}'
      • NR==2:处理第2行(即根分区的数据行)。
      • gsub("G", "", $2)awk 的字符串替换函数,将第2列(Size 列,如 30G)中的 G 替换为空字符串(去掉单位)。
      • print $2:输出处理后的数值(如 30),代表根分区的总容量(单位为GB,因原单位是 G
    • 最终,disk 变量存储根分区的总容量(GB)

5. 输出系统信息

echo "本机CPU核心数是 ${cpu},本机内存容量是 ${mem} MB,本机磁盘容量是 ${disk} GB。"
  • 语法解析
    • echo:输出字符串。
    • ${变量名}变量引用语法,确保 cpumemdisk 的值被正确插入到字符串中。
  • 效果:拼接三个变量的值,输出类似如下内容:
    本机CPU核心数是 8,本机内存容量是 7859 MB,本机磁盘容量是 30 GB。
    

补充说明(潜在问题与扩展)

  1. CPU核心的误区
    • 若需物理核心数,可替换为:
      cpu=$(lscpu | awk '/Core\(s\) per socket/ {core=$4} /Socket\(s\)/ {socket=$2} END {print core*socket}')
      
  2. 磁盘范围限制
    • 脚本仅统计根分区(/)的容量,若需整个磁盘(如 /dev/sda),需修改为 df -h /dev/sda
  3. 单位兼容性
    • 若磁盘容量单位是 M(如小分区),gsub("G", ...) 会失效,需扩展逻辑(如判断单位并转换:G→GB,M→0.001GB)。

通过以上解析,可清晰理解脚本的每一步逻辑,以及实际应用中可能需要调整的细节。
image
修改成功 理解每一步可以出来
image
修改为命令错误 结论使用原来的

CPU核心数(物理核心,nproc更准确)

cpu=$(nproc)

posted on 2025-08-04 11:37  爱尔奎特‘殷’  阅读(12)  评论(0)    收藏  举报