shell脚本免交互——初始化磁盘的方法

一、只针对一块已存在的硬盘初始化

内含当expect匹配到同样的字符串时应当如何操作
注意需要先安装expect,yum -y install expect

#!/bin/bash
expect<<-EOF
spawn fdisk /dev/sdb    //启动进程并并跟踪
expect {
    
    
"获取帮助" {
    
    send "n\n";exp_continue}     //捕捉spawn的输出,匹配到期望字符,则向进程输入字符串
"default p" {
    
    send "p\n";exp_continue}    //n为新建分区,\n为回车,p为主分区,再回车
"默认 1" {
    
    send "1\n";exp_continue}          //分区号
"默认为 2048" {
    
    send "\n";exp_continue}      //分区大小
"+size" {
    
    send "\n"}
}
###当expect匹配到同样的字符串时的操作####
expect "获取帮助" {
    
    send "p\n";send "wq\n";exp_continue}   //p显示已建分区,wq保存配置,注意exp_continue,否则无法继续输入wq
EOF
mkdir /data    //新建挂载目录
fdisk -l   
mkfs.xfs /dev/sdb1   //格式化
mount /dev/sdb1 /data    //挂载使用
df -Th

执行结果
在这里插入图片描述

二、当存在多块需要初始化的磁盘,利用循环实现

#!/bin/bash
a=`ls /dev/sd* | grep -o sd[b-z] | uniq`    //将多块磁盘从sdb开始赋值给a
for var in $a       //var遍历变量a
do
  echo -e "n\np\n\n\n\nwq\n" | fdisk /dev/$var   //echo与expect实现了相同的作用,连续输出字符串给执行disk /dev/$var后的结果,-e代表支持转义字符
  mkfs.ext4 /dev/${
    
    var}1     //格式化分区,使用变量循环格式化操作
  mkdir -p /data/${
    
    var}1     //新建不同磁盘的挂载目录,在/data下以自己的分区名建立
  mount /dev/${
    
    var}1 /data/${
    
    var}1    //挂载使用
done
~    

本实验有两块磁盘,执行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41786285/article/details/108767207