Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2328 connectés 

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

if do scp

n°1401246
kernunnos
war raok !
Posté le 02-03-2017 à 17:54:48  profilanswer
 

Bonjour à tous,
 
J'ai une question idiote, mais je ne trouve pas ...
 
Je voudrais juste faire un script et si l'une des variables est "vraie", le script doit copier un fichier sinon rien.
 
USER=user
PASS=toto
REMOTEDIR="/tmp"
# IP
REMOTEIP="192.168.23.45"
 
# Si remote
if [ "$REMOTEIP"="$REMOTEIP" ]
then
    scp bla.txt $REMOTEIP:/$REMOTEDIR/  2>>bla.log
fi
 
echo "End"
 
Mais je bute sur le if [ "$REMOTEIP"=
J'ai essayé avec -f, =y =true, comme au dessus, -n etc ...  
 
Je suis débutant donc nul mais une idée serait bienvenue :)
 
Merci

mood
Publicité
Posté le 02-03-2017 à 17:54:48  profilanswer
 

n°1401247
francoisp3​1
Posté le 02-03-2017 à 18:18:08  profilanswer
 

tu mettras en place les clef plutôt qu un password dans le script (apres)

 

tu y etais presque,

 

la structure de base est de prendre la reponse  d une commande ping (toute reponse a une commande reviens par la variable $? )

 

exemple

root@h2g2:~# ping -c 1 8.8.8.8  ; if [ $? -eq 0 ] ; then echo dnsgoogle ok ; else googleestplantasse ; fi
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=58 time=35.4 ms

 

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 35.413/35.413/35.413/0.000 ms
dnsgoogle ok
root@h2g2:~#

 

donc tu ferai un


ping -c 1 ${REMOTEIP}
if [ $? -eq 0 ] ;  then
    echo romote alive
    cp bla.txt ${REMOTEIP}:/${REMOTEDIR}/  2>>bla.log  #bien d avoir pense a logger les erreurs
fi

 


-eq signifie "equals" dans le test du if  mais je pense que tu as deviné

 

maintenat que tu as compris le principe
 la syntaxe "normale" pour bash
pour la meme chose

 


root@h2g2:~# if [[ $(ping -c 1 8.8.8.8) ]] ; then echo dnsgoogle ok ; else googleestplantasse ; fi
dnsgoogle ok
root@h2g2:~#

 

notes bien que  le if utilise pour le coup [[ ]]  (doublement) du caractère
et que la commande testée est entre $(  )  cette fois ci

 

comme ca c est assez portable et c est peut être plus facile a relire
puisque tu débutes
 

 

PS : si tu mets ton test sur une ligne il faut mettre des ; en séparateur qui il ne faut pas mettre  en structuré  


Message édité par francoisp31 le 02-03-2017 à 18:20:13
n°1401251
kernunnos
war raok !
Posté le 02-03-2017 à 20:41:18  profilanswer
 

Merci !
Ca me convient parfaitement.
Finalement, c'est juste logique et simple.  
 
Je vais travailler la syntaxe :)

n°1401454
Profil sup​primé
Posté le 07-03-2017 à 19:28:58  answer
 

salut,
 
double-crochets inutiles :
la structure de if est if <comande>; then... et, justement, ping est une commande
 
substitution de commandes induisant un sous-shell inutile
 

Code :
  1. if ping -q -c 1 google.com >/dev/null 2>&1; then...

n°1401455
francoisp3​1
Posté le 07-03-2017 à 19:35:24  profilanswer
 


oui dans 90% des cas c est inutile mais  c est la norme donc a respecter pour ne jamais tember dans les 10% de cas restant :)

n°1401458
Profil sup​primé
Posté le 07-03-2017 à 20:46:54  answer
 

où as-tu trouvé cette "norme" dont tu parles ?
 
la norme est énoncée par la structure du if (voir plus haut).
 
si une commande ne retourne un code de réussite ou d'échec clair, alors, évidemment, on ne peut pas l'utiliser dans une commande if.
c'est le cas de sed, entre autres, alors on ne l'utilise pas dans un if, on teste le résultat de la substitution de commande.
 
en l'occurrence, ping retourne un code de retour clair, donc c'est inutile.

n°1401470
francoisp3​1
Posté le 08-03-2017 à 12:39:42  profilanswer
 

c est la syntaxe " posix " de bash pour la probabilité
dans les man "sys" et man code du bash  :hello:

Message cité 1 fois
Message édité par francoisp31 le 08-03-2017 à 12:41:07
n°1401471
Fork Bomb
Obsédé textuel
Posté le 08-03-2017 à 12:48:58  profilanswer
 

francoisp31 a écrit :

c est la syntaxe " posix " de bash pour la probabilité
dans les man "sys" et man code du bash  :hello:


« Portabilité » ?


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
n°1401473
Profil sup​primé
Posté le 08-03-2017 à 14:21:21  answer
 

+1 : bash != portabilité
 
même en étant strictement conforme à la norme POSIX,
il faut que tu nous sortes précisément les passages où et comment il est dit qu'il faut impérativement effectuer une substitution de commande dans un test avec if !
 
ce n'est pas toujours inutile (cas sed), mais quand tu peux utiliser le code de retour, ça n'a pas de sens.


Message édité par Profil supprimé le 08-03-2017 à 14:25:32
n°1401474
francoisp3​1
Posté le 08-03-2017 à 14:55:04  profilanswer
 

on s est pas compris  
 la question etait sur [[ ]] pas sur $( ) a la base  
si on parle de substitution effectivement ca n a pas a voir  
si on parle syntaxe du if en ignorant son contenu  la oui :)
 


La commande interne composée [[ est souvent utilisée avec la commande interne composée if. Elle permet l’évaluation d’expressions conditionnelles portant sur des objets aussi différents que les permissions sur une entrée, la valeur d’une chaîne de caractères ou encore l’état d’une option de la commande interne set.
[.....]
 
La commande interne [[ offre de nombreuses expressions conditionnelles ; c’est pourquoi, seules les principales formes de expr_cond seront présentées, regroupées par catégories.
[...]
La commande interne [[ offre également une portabilié  de syntaxe vers les autres shell unix respectant POSIX [...] donc sh bash ou ksh installé par défaut.[...]


Message édité par francoisp31 le 08-03-2017 à 15:00:21
mood
Publicité
Posté le 08-03-2017 à 14:55:04  profilanswer
 

n°1401475
Profil sup​primé
Posté le 08-03-2017 à 15:29:21  answer
 

mais puisque if effectue l'évaluation du code de retour de la commande, alors les doubles crochets (même les simples) sont inutilement redondants. ;)

n°1401476
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 08-03-2017 à 15:35:33  profilanswer
 

+1 sur l'utilisation de

if [ ... ]; then ....

(de préférence en multiligne)
 
perso tu me sors un truc sans ça ne passe pas la review de code. question lisibilité il n'y a pas photo.


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1401477
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 08-03-2017 à 15:37:06  profilanswer
 

à noter que shellcheck ne rale sur aucune des 2 constructions, c'est purement une question de lisibilité ici


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1401479
francoisp3​1
Posté le 08-03-2017 à 16:38:15  profilanswer
 

voila

n°1401499
Profil sup​primé
Posté le 08-03-2017 à 20:22:30  answer
 

un pléonasme est syntaxiquement correct, il n'est pas utile pour autant.
 
évidemment, sans doute, maintenant, de nos jours, avec les machines qui débordent de capacités de calcul, c'est insensiblement qu'on ne s'en rend pas compte.


Message édité par Profil supprimé le 08-03-2017 à 20:24:03
n°1401507
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 09-03-2017 à 09:38:10  profilanswer
 

ce n'est pas une question de performance ici [:spamafote]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1401514
Profil sup​primé
Posté le 09-03-2017 à 11:48:06  answer
 

on peut utiliser un tournevis pour enfoncer un clou, mais ce n'est pas fait pour ça.
ce n'est pas une question de performance, mais c'est pas pratique.
 
on peut tergiverser, ou aller droit au but.
 

Code :
  1. if [[ $(autreCmd) ]]

c'est comme écrire

Code :
  1. if cmd $(autreCmd)

alors qu'on pourrait plus efficacement écrire

Code :
  1. if autreCmd

n°1401525
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 09-03-2017 à 15:00:34  profilanswer
 

tu sembles un peu borné là :o
 
mon idée est que l'efficacité, ou la performance, peuvent sacrifier à la lisibilité. Quand tu dois reprendre du code, bosser en équipe dessus (avec des gens ayant des habitudes et des niveaux divers), la syntaxe donnée avant est plus simple à interpréter et maintenir que celle plus épurée que tu suggères


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1401529
francoisp3​1
Posté le 09-03-2017 à 15:37:13  profilanswer
 

black_lord a écrit :

tu sembles un peu borné là :o
 
mon idée est que l'efficacité, ou la performance, peuvent sacrifier à la lisibilité. Quand tu dois reprendre du code, bosser en équipe dessus (avec des gens ayant des habitudes et des niveaux divers), la syntaxe donnée avant est plus simple à interpréter et maintenir que celle plus épurée que tu suggères


entierement d accord

n°1401535
Profil sup​primé
Posté le 09-03-2017 à 19:25:22  answer
 

ah, d'accord !
en fait, il y a un Marseillais et un Ch'ti : « faisons du moins-disant culturel pourvu que tout le monde comprenne »
 
ça s'appelle aussi du nivellement par le bas.
 
je suis très surpris qu'un modérateur prenne ce parti : plutôt que de tirer vers le haut, tendre à la médiocrité.
 
Edit: et je ne vois pas en quoi surcharger une commande améliore la lisibilité.


Message édité par Profil supprimé le 10-03-2017 à 04:45:32

Aller à :
Ajouter une réponse
 

Sujets relatifs
Plus de sujets relatifs à : if do scp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR