CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

petite question unix 2

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 12:41:42

je viens de regarder sur le site du zero:

http://www.siteduzero.com/tutoriel-3-123626-afficher-et-manipuler-des-variables.html#ss_part_4

et il dit clairement que :

"En bash, les variables sont toutes des chaînes de caractères. En soi, le bash n'est donc pas vraiment capable de manipuler des nombres, et donc il n'est pas capable d'effectuer des opérations.

Heureusement, on peut passer par des commandes (eh oui encore). Ici, la commande à connaître est let." :bravo:

Or quand je fais:

let "min = $ping_min"

ça me sort le signal d'erreur suivant ... :(

-bash: let: min = 0.193: syntax error: invalid arithmetic operator (error token
is ".193")

Besoin d'aide d'un crac en UNIX plzzz :noel:

chris_27
chris_27
Niveau 10
10 mars 2012 à 12:46:39

Pour calculer, utilise expr ou bc :

chris@aiur:~% min=2
chris@aiur:~% max=5
chris@aiur:~% expr $max - $min
3
chris@aiur:~% echo "$max - $min" | bc
3

PS: attention, la multiplication en expr c'est \* (ou "*"), le * seul est un symbole spécial du shell.

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 12:51:55

je viens de tester ce que tu m'a proposer :

expr $ping_max - $ping_min

mais cela me sort

expr: argument non numérique

je ne sais aps si tu as lu mais j'ai cuter un fichier pour avoir la valeur de ping_max et ping_min et bien que ça soit des chiffre genre
- ping_min = 0.193
-ping_max = 1.464

Il semble que ce soit des reconnu comme des caractere et c'est la mon gros probmeme :(

chris_27
chris_27
Niveau 10
10 mars 2012 à 12:54:34

Alors utilise bc. (de fait, je n'utilise plus expr depuis 2005 parce que je trouve que c'est de la merde. :-))) )

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 12:57:41

merci beaucoup chris, tu es mon dieu :rire:

Merci mille fois même, c'est une commande hyper simple mais je n'y arrivais pas et toi tu m'a résolu ça en 20 seconde ^^

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 13:04:33

ha et encore une petite question, je veux mettre le résultat dans une autre variable que je nomme x au hazard:

si je fait

x = $($ping_max - $ping_min | bc)

cela ne marche pas, serait tu pourquoi? ( en faisant un echo ça m'affiche bien le résultat pourtant :( )

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 13:18:27

je t'en pris reviens, j'ai meme tester de faire :

x = $( echo "$ping_max - $ping_min" | bc)

mais il me dis que bash: x: command not found

Je sais que ça te parrait simple et surement trop simple mais bon si je réussi à faire ça, j'ai casiment finis mon TP :fete:

Serait tu encore la ? :hap:

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 13:46:27

je suis encore coincé sur ça :rire: , il y a encore du monde sur le forum?

chris_27
chris_27
Niveau 10
10 mars 2012 à 13:48:58

chris@aiur:~% min=0.7
chris@aiur:~% max=1.4
chris@aiur:~% dif=`echo "$max - $min" | bc`
chris@aiur:~% echo $dif
.7

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 13:52:48

Chris tu m'a été super utile, encore merci et desoler de te déranger avec mes questions a la noix mais bon je suis vraiment partie de zero et voir enfin quelque chose marché ( en grande partie grace a toi, je te remerci :noel: )

chris_27
chris_27
Niveau 10
10 mars 2012 à 13:59:04

À la réflexion, je crois que je viens d'identifier la source des tes soucis? Je l'illustre sur un exemple, tu vas comprendre :

chris@aiur:~% x = 2
zsh: command not found: x
chris@aiur:~% x=2
chris@aiur:~% echo $x
2

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 14:05:43

je suis surement trop fatigué mais je ne vois absolument aucune difference entre tes deux commande :hap:

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 14:06:51

haaaaan ok, les fameux espaces... oula la difference est mince :rire:

chris_27
chris_27
Niveau 10
10 mars 2012 à 14:12:09

Oui, pour déclarer/définir/affecter une valeur à une variable, il faut impérativement mettre le = juste après le nom de la variable. Les espaces entre ce nom et le = sont interdis. :-)))

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 15:32:11

Chris si tu es encore la , j'ai le meme probleme que précédament mais cette fois ci c'est pour une comparaison, mon bout de code est les suivant :

if [ $seuil -lt $dif ]
then
echo ping trop haut, verifier votre réseau pour $ IP 1'>>TP4.xml
else
echo 'PING correct pour $IP1'>>TP4.xml
fi

je veux comparer si le seuil est plus petit que la difference entre les ping alors on met notre rapport d'erreur mais il me dis qu'il y a une erreur sur cette partie:

Voici les erreurs qu'il me dis:

./PING.sh: line 47: [: 0.10: unary operator expected ( c'est la ligne ou il y a les condition de mon if :noel: )

./PING.sh: line 55: unexpected EOF while looking for matching `''
./PING.sh: line 57: syntax error: unexpected end of file

et il me dis unexpected end of file alors que j'ai bien fermer la boucle if avec mon fi d'ou mon incomprehension :(

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 15:44:44

je pense que je vais mettre tous mon petit programmes comme ça l'erreur sautera peut etre au yeux d'une personne douée en UNIX :noel:

  1. !/bin/sh
  1. On choisie un seuil au hasard

seuil=0.10

echo ' <alertes ping >' >>TP4.xml

  1. On a copier au prealable ce qu'il y a dans le fichier host dans IP.txt
  1. On va prendre les adresses IP qui nous interesse

IP1=$(cat /home/students/carpentier_b/IP.txt | grep -e "ohm" |
cut -c 1-10)

IP2=$(cat /home/students/carpentier_b/IP.txt | grep -e "volt" |
cut -c 1-10)

IP3=$(cat /home/students/carpentier_b/IP.txt | grep -e "joule" |
cut -c 1-10)

IP4=$(cat /home/students/carpentier_b/IP.txt | grep -e "flops" |
cut -c 1-11)

  1. On va travailler sur le 1er ping soit IP1:

ping -c 5 -n $IP1 > ping.txt

  1. On va chercher les valeur qui nous interesse (ping max et ping min)

ping_min=$(cat /home/students/carpentier_b/ping.txt | grep -e "rtt" |
cut -c 24-28)

ping_max=$(cat /home/students/carpentier_b/ping.txt | grep -e "rtt" |
cut -c 36-40)

  1. On calcule la difference entre le max et le min

dif=`echo "$ping_max - $ping_min" | bc`

  1. On regarde si on a la difference plus grande que le seuil et si oui alerte (attention erreur viendrais d'ici :snif2: )

if [ $seuil -lt $dif ]
then
echo 'ping trop haut, verifier votre réseau pour $ IP 1'>>TP4.xml
else
echo 'Tout va bien pour $IP1' >> TP4.xml
fi

echo ' </alerte ping $IP1>

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 15:53:12

bon deja j'ai plus la derniere erreur :
./PING.sh: line 57: syntax error: unexpected end of file

car j'avais juste oublier de fermer mon echo et de le transporter dans mon fichier xml:

echo ' </alerte ping $IP1> ' >> TP4.xml

Mais j'ai encore cette histoire casse **** de difference qui ne ce fait pas :(

J'insiste beaucoup mais j'aimerais le terminer ce TP :noel:

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 16:17:25

alors j'ai mis :

if [ $seuil-le $dif ] |bc
et je n'ai plus d'erreur mais j'ai encore un probleme donc bon voula mon soucis, lorsque je lance mon petit programme. J'ai cette erreur :

[carpentier_b@lux ~]$ ./PING.sh
Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
[-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
[-M mtu discovery hint] [-S sndbuf]
[ -T timestamp option ] [ -Q tos ] [hop1 ...] destination
(standard_in) 2: parse error

Pourtant dans la commande, tout ce que j'avais testé sur le ping marchait parfaitement et donc je ne vois pas pourquoi il vient me faire chier (escusez moi du terme :hap: ) avec ça.... :(

leagueofeeder
leagueofeeder
Niveau 10
10 mars 2012 à 16:48:15

j'ai crée un forum sur le forum des profesionnel qui permet de rendre le code plus claire pour le commmun des mortel car sur les forum de JVC c'est assez moche, je me permet de poster le liens pour que tout soit plus claire :noel:

http://www.developpez.net/forums/d1195622/systemes/autres-systemes/unix/probleme-code/#post6553932

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment