web-dev-qa-db-fra.com

Script Shell automatisé pour exécuter la commande fdisk avec une entrée utilisateur

J'aimerais créer un script bash shell capable d'exécuter des commandes et de fournir des informations comme si je le tapais sur le terminal.

J'ai déjà écrit des scripts bash Shell et je comprends comment, mais je suis un peu confus quant à la manière dont il "interagit".

Actuellement, je dois exécuter fdisk et d'autres commandes de terminal, puis passer par leur panneau d'options en fournissant une entrée définie/spécifiée. Cela prend trop de temps et comme c'est constant, je me demandais alors comment j'y arriverais.

Je comprends qu'un script Shell est comme si vous deviez taper cette commande dans le terminal. Ainsi, puis-je écrire littéralement un script qui dit quelque chose comme:

Sudo fdisk /dev/sda

d

1

d

2

n

p

1

Par exemple, lorsque les entrées de chaîne unique correspondent à ce que je tape sur mon clavier, fdisk attend des commandes. Cela ne semble pas valable, mais cela se peut.

De plus, après l'exécution de ces commandes, je dois débrancher le lecteur, puis continuer à l'exécuter. Puis-je implémenter cela dans mon programme pour attendre que je me déconnecte, puis que je rebranche puis que je continue à exécuter un script automatisé?

J'apprécie toute votre aide.

2
bobo06

J'ai moi-même écrit un petit script à l'aide de la commande fdisk, basé sur ce que je sais et des morceaux de code trouvés en ligne, qui font quelque chose de très similaire, à savoir, formater de manière interactive un lecteur dans une ou plusieurs partitions, en demandant si c'est le bon lecteur, en attente pendant un certain temps, ou une entrée de l'utilisateur, l'avertissant qu'il est sur le point de l'effacer, etc. Une des choses qu'il ne peut pas faire, dans sa forme actuelle, est de reprendre de fonctionner après l'avoir arrêté pour une raison quelconque, de l'entrée "Non, don format pas! " de l'utilisateur, ou simplement une erreur. Une fois que cela s'arrête, il doit être exécuté à nouveau.

Remarque: $ (echo $ Output_Device) est une variable Shell et peut être remplacé par ex. sdb ou tout nom similaire pour un périphérique de disque. La ou les commande (s) fdisk que j’ai bricolé sont les suivantes:

Formate le disque en deux partitions, une de taille 64 Mo et 2 le reste du disque:

(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)

Ensuite, formate les partitions, 1 en tant que FAT, 2 en tant que ext3:

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

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

Je peux publier le script dans son intégralité, mais il est en désordre et j'aime y garder les commandes même lorsqu'elles sont commentées, pour ma propre référence.

Le cas plus général, comment le faire reprendre, que je puisse ou ne puisse pas le faire, n’ai pas essayé. De même, cela fonctionne avec fdisk, mais d'autres commandes peuvent nécessiter une syntaxe différente.

1
Lubo Diakov

Le script ci-dessous consiste à créer automatiquement un espace d'échange.

#!/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
0
Santosh Garole