2 votes

Comment fonctionne la substitution de commande, dig et +short dans ce script ?

Quelqu'un pourrait-il expliquer comment dig y +short fonctionnent dans ce script et pourquoi ils sont utilisés ? Quelqu'un pourrait-il également expliquer comment la substitution de commande fonctionne dans le code, car j'ai du mal à comprendre comment fonctionne la substitution de commande.

script :

#!/bin/bash
echo "Enter web address : "
read address
echo "Entered web address : $address"
nslookup "$address"
ping -c 4 $(dig +short "$address" | head -1)

script en usage :

Enter web address : 
gutenberg.org

Entered web address : gutenberg.org
Server:     127.0.1.1
Address:    127.0.1.1#53

Non-authoritative answer:
Name:   gutenberg.org
Address: 152.19.134.47

PING 152.19.134.47 (152.19.134.47) 56(84) bytes of data.
64 bytes from 152.19.134.47: icmp_seq=1 ttl=47 time=118 ms
64 bytes from 152.19.134.47: icmp_seq=2 ttl=47 time=165 ms
64 bytes from 152.19.134.47: icmp_seq=3 ttl=47 time=116 ms
64 bytes from 152.19.134.47: icmp_seq=4 ttl=47 time=111 ms

--- 152.19.134.47 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 111.326/127.824/165.079/21.675 ms
enter code here
enter code here

1voto

chicks Points 534

Donc on prend cette ligne dans le script :

ping -c 4 $(dig +short "$address" | head -1)

Le Shell va le décomposer pour tenir compte des espaces blancs, substituer la variable et voir ensuite qu'il doit exécuter la commande à l'intérieur du $() d'abord. Donc il doit d'abord exécuter ça :

dig +short "$address" | head -1

Les guillemets autour de $address ne sont pas strictement nécessaires, mais c'est une bonne habitude à prendre au cas où vos données finissent par contenir des espaces, le Shell ne les divisera pas pour vous.

Donc si je fais ça avec $address="yahoo.com" ....

$ dig +short yahoo.com | head -1
72.30.35.10

Avec le 72.30.35.10 comme sortie du pipeline à l'intérieur de la substitution de commande, la ligne du haut devient

ping -c 4 72.30.35.10

qui n'envoie l'IP que 4 fois avant de s'arrêter, comme vous l'avez constaté en l'essayant. Sinon, ping s'exécuterait jusqu'à ce que vous atteigniez ctrl - c .

0voto

ping -c 4 : 4 étapes

head -1 : ne montre que la première ligne de la sortie

dig +short ne montre que l'enregistrement "A".

mirek@Mirek-nuc:~$ dig yahoo.com +short
72.30.35.9
98.137.246.7
72.30.35.10
98.138.219.231
98.138.219.232
98.137.246.8

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X