自动 Shell 脚本根据用户输入运行 fdisk 命令

自动 Shell 脚本根据用户输入运行 fdisk 命令

我想创建一个 bash shell 脚本,它可以运行命令并提供输入,就像我在终端上输入一样。

我以前编写过 bash shell 脚本并且知道如何编写,但是对于它的“接口”方式有点困惑。

目前,我需要运行 fdisk 和其他终端命令,然后通过它们的选项面板提供设置/指定的输入。这花费的时间太长,而且它是持续的,我想知道我该怎么做。

我知道 shell 脚本就像您在终端中输入该命令一样。因此,我可以直接编写一个脚本,内容如下:

sudo fdisk /dev/sda

d

1

d

2

n

p

1

举个例子,单个字符串条目是我在 fdisk 等待命令时在键盘上输入的内容。这似乎无效,但可能是有效的。

此外,运行这些命令后,我必须拔下驱动器,然后继续运行它。我是否可以将其实现到我的程序中,等待我拔下驱动器,然后重新插入,然后继续运行自动脚本?

我感谢所有的帮助。

答案1

我根据自己所了解的知识以及网上找到的一些代码,用 fdisk 命令自己写了一个小脚本,这个脚本的功能非常类似,即以交互方式将驱动器格式化为一个或多个分区,询问这是否是正确的驱动器,等待设定的时间或用户输入,警告即将擦除驱动器等。目前,它无法做到的一件事是,在因任何原因(从用户那里得到“不,不要格式化!”的输入,或者仅仅是一个错误)停止后恢复运行。一旦停止,就必须再次运行。

注意:$(echo $Output_Device) 是一个 shell 变量,可以替换为 sdb 或任何类似的磁盘设备名称。我拼凑起来的实际 fdisk 命令是:

将磁盘格式化为两个分区,第一个分区大小为 64Mb,第二个分区为磁盘的剩余部分:

(echo o; echo n; echo p; echo 1; echo ""; echo +64M; echo n; echo p; echo 2; echo ""; echo ""; echo w; echo q) | fdisk /dev/$(echo $Output_Device)

然后,实际格式化分区,1 为 FAT,2 为 ext3:

mkfs.vfat -n BOOT /dev/$(echo $Output_Device)1

mkfs.ext3 -L root /dev/$(echo $Output_Device)2

我可以发布整个脚本,但它很混乱,而且我喜欢保留其中的命令,即使它们被注释掉了,以供我自己参考。

更一般的情况是,如何让它恢复,我可能做得到,也可能做不到,还没有尝试过。同样,这适用于 fdisk,但其他命令可能/将需要不同的语法。

答案2

下面的脚本用于自动创建交换空间。

#!/bin/bash 
set -x

DEVICE="/dev/xvdf"

DISKID=$(blkid $DEVICE | cut -d' ' -f2 | cut -d\" -f2)

cat <<EOF | fdisk /dev/xvdf    #reads the disk utiliy
n   
p
1


t
82
w
EOF


partprobe $DEVICE

mkswap $DEVICE

echo "UUID=$DISKID    swap    swap   defaults   0   0" >> /etc/fstab

swapon -a

free -g >> /mstr/output.txt

set +x

相关内容