Linux 脚本:选择未挂载的物理磁盘
该脚本用于列出系统中所有未挂载的物理磁盘,并允许用户选择其中一个,最终输出所选磁盘的信息。
disks=()
while IFS= read -r line; do
disk=$(echo '$line' | awk '{print $1}')
size=$(echo '$line' | awk '{print $2}')
if [ -z "$(lsblk "/dev/$disk" -n -o MOUNTPOINT)" ]; then
disks+=('$disk $size')
fi
done < <(lsblk -d -o NAME,SIZE -n)
echo '可选择的物理磁盘和大小:'
for ((i=0; i<${#disks[@]}; i++)); do
echo "$(($i+1))) ${disks[$i]}"
done
read -p '请输入需要选择的物理磁盘索引: ' disk_index
if [ "$disk_index" -ge 1 ] && [ "$disk_index" -le "${#disks[@]}" ]; then
selected_disk="${disks[$((disk_index-1))]}"
disk_name=$(echo '$selected_disk' | awk '{print $1}')
disk_size=$(echo '$selected_disk' | awk '{print $2}')
echo '已选择的物理磁盘: $disk_name'
echo '磁盘大小: $disk_size'
fi
脚本解释:
-
初始化 disks 数组:
disks=(): 定义一个名为disks的空数组,用于存储未挂载的物理磁盘信息。
-
遍历 lsblk 输出:
while IFS= read -r line; do ... done: 使用while循环逐行读取lsblk -d -o NAME,SIZE -n命令的输出。disk=$(echo '$line' | awk '{print $1}'): 使用awk命令从当前行提取磁盘名称并赋值给disk变量。size=$(echo '$line' | awk '{print $2}'): 使用awk命令从当前行提取磁盘大小并赋值给size变量。if [ -z "$(lsblk "/dev/$disk" -n -o MOUNTPOINT)" ]; then ... fi: 使用lsblk命令检查当前磁盘是否已挂载。如果MOUNTPOINT为空,说明磁盘未挂载,则将磁盘信息追加到disks数组中。
-
显示可选择磁盘:
echo '可选择的物理磁盘和大小:': 打印提示信息。for ((i=0; i<${#disks[@]}; i++)); do ... done: 使用for循环遍历disks数组,并输出每个磁盘的信息。
-
获取用户选择:
read -p '请输入需要选择的物理磁盘索引: ' disk_index: 提示用户输入需要选择的磁盘索引,并将输入保存到disk_index变量中。
-
验证用户输入:
if [ "$disk_index" -ge 1 ] && [ "$disk_index" -le "${#disks[@]}" ]; then ... fi: 检查用户输入的索引是否在有效范围内。
-
获取所选磁盘信息:
selected_disk="${disks[$((disk_index-1))]}": 从disks数组中获取用户选择的磁盘信息。disk_name=$(echo '$selected_disk' | awk '{print $1}'): 从selected_disk中提取磁盘名称。disk_size=$(echo '$selected_disk' | awk '{print $2}'): 从selected_disk中提取磁盘大小。
-
输出选择结果:
echo '已选择的物理磁盘: $disk_name': 输出选择的磁盘名称。echo '磁盘大小: $disk_size': 输出选择的磁盘大小。
总结:
该脚本通过调用 lsblk 命令获取系统中所有磁盘信息,并使用 awk 命令提取需要的信息,最后根据用户选择输出相应的磁盘信息。
注意:
- 该脚本需要在 Linux 系统环境下执行。
- 使用
lsblk命令获取磁盘信息时,需要确保用户具有足够的权限。 - 脚本中使用
echo命令输出信息,可以使用其他方法进行输出。 - 该脚本只是一个示例,可以根据实际情况进行修改和扩展。
原文地址: https://www.cveoy.top/t/topic/oFM9 著作权归作者所有。请勿转载和采集!