我想创建一个 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