Résolu le 14-01-24 Script en bash

Postez ici vos scripts Bash, Python, C++, etc...
salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Script en bash

Message par salinois »

bonjour,
un ami m'a donné un script en bash pour tester des valeurs sur un fichier de base de données
mais j'ai des erreurs quand je le lance. voici le script et les erreurs.

Code : Tout sélectionner

#!/bin/bash
#
#
cd /usr/lib/weewx   # le repertoire où se situe mon fichier de base de données
echo ""
for FILE in *.sdb
do
  DIFF="$(($(date +%s) - $(date -r ${FILE} +%s)))"
  if [ ${DIFF} -gt 600 ]
  then
      echo -n "ERROR"
  else
      echo -n "OK   "
  fi
  echo "   ${FILE} was last modified ${DIFF} seconds ago"
done
echo ""
et les erreurs:
/usr/local/nagios/libexec $ bash secs-since-modified.sh

secs-since-modified.sh: ligne 8: erreur de syntaxe près du symbole inattendu « $'do\r' »
'ecs-since-modified.sh: ligne 8: `do

je débute en programmation , j'ai essayé de chercher mais en vain.
dites-moi si la présentation du post est à améliorer.
merci à vous

salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
Avatar du membre
alain
Administrateur du site
Messages : 17181
Enregistré le : dim. 11 oct. 2015 23:41
Localisation : Chelles
Contact :

Re: Script en bash

Message par alain »

Bonjour Salinois
salinois a écrit : ven. 5 janv. 2024 20:43 secs-since-modified.sh: ligne 8: erreur de syntaxe près du symbole inattendu « $'do\r' »
'ecs-since-modified.sh: ligne 8: `do
je suis nul en script bash et en programmation en général.
Mais j'ai eu une fois ce problème en recopiant un script sur windows.
Le symbole inattendu est un retour chariot de windows et non un retour à la ligne de linux.
Ne me demande pas en quoi c'est différent, je n'en sais rien. Une recherche sur le web pourrait certainement nous le dire :l ;)
Bref la solution dans mon cas (merci Arghlub) à été de remplacer les retours chariot de windows par des retours linux:

Code : Tout sélectionner

sed -i 's/\r$//' ton_script.sh

ou plus précisément pour toi:

Code : Tout sélectionner

sed -i 's/\r$//' secs-since-modified.sh
Слава Україні _ слава героям махновщини
PC1 : CM : ASRock 990FX | CPU: AMD FX 8350-8 cores, 4 GHz | RAM: 16 Go DDR3 1600 MHz | CG: GTX 1080TI-11 Go | OS : LM 22 Xfce 4.18 | K: 6.8
PC2
:Core2 Quad Q9650 @ 3 GHz | CG: Nvidia GTX 650TI | OS: LM 22 Wilma Xfce 4.18| K: 6.8
PC3 :Core i7-2600 @ 3,5 GHz | CG: ATI HD 4650 | OS: Emmade5 Xfce 4.18.0 | K: 6.1
PC4 : AMD Ryzen 5 3500X 4GHz | CG: GTX 970 | Ram : 8GB |OS : Debian 12.8 | K: 6.1
In a world without walls and fences, who needs windows and gates?
salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

merci alain,
j'ai fais ça, effectivement bizarre;
bon maintenant , j'ai d'autres erreurs.

Code : Tout sélectionner

#!/bin/bash
#
# ref: https://stackoverflow.com/questions/19463334/how-to-get-time-since-file->
#
cd /var/lib/weewx
echo ""
for FILE in *.sdb
do
  DIFF="$(($(date +%s) - $(date -r"${FILE}"+%s)))"
  if [ ${DIFF} -gt 600 ]
  then
      echo -n "ERROR"
  else
      echo -n "OK   "
  fi
  echo "   ${FILE} was last modified ${DIFF} seconds ago"
done
echo ""
erreurs:bash secs-since-modified.sh
date: weewx.sdb+%s: Aucun fichier ou dossier de ce type
secs-since-modified.sh: ligne 9: 1704538488 - : erreur de syntaxe : opérande attendu (le symbole erroné est « -  »)

on dirait que la commande "cd /var/lib/weewx " ne passe pas !!!
salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

bonjour cyril

c'est ce que j'ai fait, une erreur a disparu mais d'autres sont arrivées.
je vais regarder tes conseils.

patrick
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

re,
pardon, je croyais les avoir mises, les voici

bash secs-since-modified.sh

date: weewx.sdb+%s: Aucun fichier ou dossier de ce type
secs-since-modified.sh: ligne 9: 1704552999 - : erreur de syntaxe : opérande attendu (le symbole erroné est « -  »)

pour le GT 600 , à vrai dire je sais pas trop ( c'est un ami américain qui m'a passé le script ) ; en gros c'est pour vérifier le fichier de la base de données, si celui se met bien à jour toutes les 5 mn.

voici la traduction de ce qu'il m'a mis en anglais, pour le script.
[Voici un script rapide pour imprimer les secondes depuis la dernière modification d'un fichier et se plaindre si cela dure plus de 10 minutes, à titre d'exemple.
FWIW - Je vérifierais que l'archive est en cours de modification et que le dernier skin de votre ordre typique se termine avec succès.
Cet exemple vérifie simplement que le(s) fichier(s) sdb sont en cours de mise à jour.]
j'espere être assez clair. dis le moi.


salinois
Modifié en dernier par salinois le sam. 6 janv. 2024 16:05, modifié 1 fois.
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

voila le scrip apres avoir effectué les modifs conseillées par Alain.

Code : Tout sélectionner

#!/bin/bash
#
# ref: https://stackoverflow.com/questions/19463334/how-to-get-time-since-file-was-last-modified-in-seconds-with-bash
#
cd /var/lib/weewx
echo ""
for FILE in *.sdb
do
  DIFF="$(($(date +%s) - $(date -r"${FILE}"+%s)))"
  if [ ${DIFF} -gt 600 ]
  then
      echo -n "ERROR"
  else
      echo -n "OK   "
  fi
  echo "   ${FILE} was last modified ${DIFF} seconds ago"
done
echo ""
Pour le gt 600 ( ce n'est pas moi qui fait le script, pas assez bon en programmation) , je pense que cela doit correspondre à 600 sec ( 10 mn)
la base de données se met à jour toutes les 5 mn.

salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

re,
oui

le fichier s'appelle weewx.sdb dans le repertoire cité /var/lib/weewx/.

le programme "meteo" met à jour ce fichier toutes les 5 mn et ce plugin est censé verifier que la base de données
se mets bien à jour, en gros d'apres ce que j'ai compris, si au bout de 10 mn , il ne s'est pas mis à jour, c'est qu'il y a un pb.

voilà

salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

re,
j'ai fais ce que tu m'as dit, c'est bon; les valeurs affichées sont à peu pres comme les tiennes, cela depend de l'heure , evidemment.

donc apres je mets les lignes qu'il a mis pour la calculer difference et pour afficher "Error ou OK" , donc la fin de son script ?
j'ai bon ?

salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

script modifié

Code : Tout sélectionner

#!/bin/bash
#
# ref: https://stackoverflow.com/questions/19463334/how-to-get-time-since-file-was-last-modifi>
#
FILE=/var/lib/weewx/weewx.sdb
stat -c "%Y" $FILE
date +%s
do
  DIFF="$(($(date +%s) - $(date -r"${FILE}"+%s)))"
  if [ ${DIFF} -gt 600 ]
  then
      echo -n "ERROR"
  else
      echo -n "OK   "
  fi
  echo "   ${FILE} was last modified ${DIFF} seconds ago"
done
echo ""
erreur:
1704557717
1704557895
secs-since-modified_1.sh: ligne 8: erreur de syntaxe près du symbole inattendu « do »
secs-since-modified_1.sh: ligne 8: `do'

pb de parentheses !!!!

salinois
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
salinois
Messages : 35
Enregistré le : ven. 5 janv. 2024 16:55
Localisation : jura

Re: Script en bash

Message par salinois »

re,
je suis en train de chercher sur la ligne DIFF !!, je pense
Salinois
PCs: windows10, linux debian (differentes version)
Raspberry
Répondre