思路
- 给lsblk命令的查询结果编号
- lsblk命令过滤TYPE为disk的磁盘信息
- 相邻磁盘之前没有记录(行号差为1)且步骤2中mount信息为空则为未使用的磁盘
- 最后一条磁盘记录的行号和lsblk的总行号比较判断最后一块磁盘是否未使用
脚本
#!/bin/bash
declare -A diskInfo
declare -A mountInfo
totalLines=`lsblk|wc -l`
tmp1=`lsblk|awk '/disk/{print NR}'`
lineList=($tmp1)
tmp2=`lsblk|awk '/disk/{print $1}'`
diskList=($tmp2)
tmp3=`lsblk|awk '/disk/{print $NF}'`
mountList=($tmp3)
for ((i=0;i<${#lineList[*]};i++))
do
diskInfo[${lineList[i]}]=${diskList[i]}
done
for ((i=0;i<${#lineList[*]};i++))
do
mountInfo[${lineList[i]}]=${mountList[i]}
done
j=0
for ((i=0;i<${#lineList[*]};i++))
do
let cnt=${lineList[i+1]}-${lineList[i]}
if [ $cnt -gt 0 ];then
if [ $cnt -eq 1 ];then
if [ ${mountInfo[${lineList[i]}]} == "disk" ];then
echo -e "\033[31m${diskInfo[${lineList[i]}]} 磁盘没有使用\033[0m"
let j=j+1
fi
fi
else
if [ ${lineList[i]} -eq $totalLines ];then
if [ ${mountInfo[${lineList[i]}]} == "disk" ];then
echo -e "\033[31m${diskInfo[${lineList[i]}]} 磁盘没有使用\033[0m"
let j=j+1
fi
fi
fi
done
if [ $j -eq 0 ];then
echo -e "\033[32m当前环境没有未使用的磁盘\033[0m"
fi