web-dev-qa-db-fra.com

Échec de l'outil Ping simple

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?

1
user797940

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:

  1. Par convention, les noms de variables majuscules sont réservés aux variables d'environnement (par exemple PATH) et autres variables spéciales (par exemple RANDOM).
  2. Il est toujours préférable d'utiliser des noms de variables descriptives, comme par exemple target et n_packets
  3. Toujours citer les variables.
  4. 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.
  5. NBD dans ce cas, mais en utilisant 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}.

2
wjandrea