J'essaie d'appliquer ce que j'ai appris sur les scripts Shell à un outil de ping, mais je n'arrive pas à comprendre ce que je fais mal.
Je veux que mon outil de ping contienne une invite qui crée une variable pour le site cible et le nombre de paquets, afin qu'il soit réutilisable, et qu'il ne soit pas envoyé par défaut des paquets continus à l'URL cible.
Mon script actuel est le suivant:
#!/bin/bash
echo "The....."
figlet -f banner "Pinger"
echo " "
read -p "[*] Enter the target Host: " $TGT
read -p "[*] Enter number of packets to send: " $PKT
ping -c$PKT $TGT
exit0
Ce script ne récupère pas l'entier pour l'indicateur nmap -c.
J'ai tenté de déboguer le problème des manières suivantes:
ping $TGT
fonctionne parfaitement seul.
ping -c{$PKT}
ne s'exécute pas.
ping -c $PKT
et ping -c {$PKT}
également, ne s'exécute pas correctement.
L'erreur affichée est:
ping: option requires an arguement -- 'c'
Quelqu'un peut-il me dire quel est le correctif afin que je puisse comprendre le contexte de l'utilisation des variables de base?
Tout d'abord, j'ignore les lignes 2 à 4 du script car elles ne sont pas pertinentes.
Lorsque vous utilisez read
, vous devez lui donner un nom de variable (TGT
). À l'aide d'un signe dollar ($TGT
) fait référence à la valeur de la variable . Dans ce cas, la valeur est nulle, donc read
prend par défaut la variable REPLY
.
Ainsi que:
PATH
) et autres variables spéciales (par exemple RANDOM
).target
et n_packets
exit0
n'est pas valide, plus exit 0
masquera toutes les erreurs qui se produisent vers la fin du script, plus exit
est implicite, alors ne vous embêtez même pas à l'écrire.read -r
est une bonne habitude.Donc au final:
#!/bin/bash
read -rp "[*] Enter the target Host: " target
read -rp "[*] Enter number of packets to send: " n_packets
ping -c "$n_packets" "$target"
Enfin, Shellcheck est très pratique pour le débogage de scripts Shell à l'avenir. J'ai parcouru votre script et j'ai obtenu la plupart des points ci-dessus.
Concernant la syntaxe que vous avez essayée, {$PKT}
, Je pense que vous avez été confondu avec ${PKT}
.