Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

heeelp SHELL

94 réponses
Avatar
yvslart
bonjour tout le monde,
J esp=E8re trouver r=E9ponse =E0 mes questions sur ce forum et j esp=E8re
que
vous aurez un peu de patience parce que je suis d=E9butante en
programmation et j aimerai faire un programme qui semble un
peu .....dur puisque je n ai pa encore trouver de r=E9ponses!
Bon on suppose qu on est l administrateur d un parc informatique et
qu on veut:
1.Etre alert=E9 par e mail si jamais :
-l un des utilisateurs a d=E9pass=E9 le quota ceci dit 1Mo
-ou bien s il a d=E9pass=E9 1000 copies d impression

2.Eteindre tous les ordinateurs chaque vendredi =E0 19h
3.Faire une sauvegarde de donn=E9es de chaque ordinateur et l
enregistrer dans un r=E9pertoire qui aura de nom la date du jour o=F9 la
sauvegarde a =E9t=E9 faite et ce r=E9pertoire doit avoir pour
extension .tgz
(archiv=E9 et compress=E9)
Je note que cette sauvegarde doit aussi se faire chaque dimanche =E0
minuit.
Voil=E0 ceci est le programme et j ai des difficult=E9s avec ....je sais
que je dois utiliser le CRONTAB pour les taches planifi=E9es mais =E0
part
sa....rien!!!
Plz help et je vous remercie =E0 l avance

10 réponses

Avatar
Cyrille Lefevre
Bruno Tréguier a écrit :

# Attention, il s'agit bien de "quotes inversées", ci-dessous. La sor tie
# de la commande sera affectée à la variable TAILLE
TAILLE=`commande`
if test $TAILLE -ge 1000
then
envoi_du_mail
fi



Bonjour,

autant partir sur du shell posix :

TAILLE=$(commande)

quand au test, toujours mettre les variables entre ", car si commande ne
renvoie rien du tout, il y aura une erreur de syntaxe... par ailleurs,
mettre les {} autour des variables n'est pas une mauvaise habitude :

if test "${TAILLE}" -ge 1000

alternative :

if [ "${TAILLE}" -ge 1000 ]

autre alternative, melheureusement non posix, qui plus est n'oblige pas
à protégé les variables par des " :

if [[ $TAILLE -ge 1000 ]]

pour finir, lors d'un test de type entier, il est même possible
d'écrire, mais cela ne fonctionne que sous certains shells (ksh
tout du moins) :

if [ TAILLE -ge 1000 ]

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Avatar
Bruno Tréguier
Bonsoir,

Le 14/01/2010 à 22:42, Cyrille Lefevre a écrit :

autant partir sur du shell posix :

TAILLE=$(commande)



C'est vrai.


quand au test, toujours mettre les variables entre ", car si commande ne
renvoie rien du tout, il y aura une erreur de syntaxe... par ailleurs,
mettre les {} autour des variables n'est pas une mauvaise habitude :

if test "${TAILLE}" -ge 1000



Aïe, piégé.

<MODE "excuse bidon">
Je les ai oubliées ce soir. je fais peu de shell ces derniers temps,
mais je les mets d'habitude, sisi... ;-)
</MODE>


alternative :

if [ "${TAILLE}" -ge 1000 ]



C'est d'ailleurs la forme que j'utilise pour ma part, et que l'on trouve
le plus souvent dans les scripts, mais "test" marche aussi.


autre alternative, melheureusement non posix, qui plus est n'oblige pas
à protégé les variables par des " :

if [[ $TAILLE -ge 1000 ]]

pour finir, lors d'un test de type entier, il est même possible
d'écrire, mais cela ne fonctionne que sous certains shells (ksh
tout du moins) :

if [ TAILLE -ge 1000 ]



Là je vous comprends moins par contre: si ces solutions sont moins
bonnes, pas POSIX voire limitées à certains shells, pourquoi en parler ?
Cela risque de semer la confusion dans l'esprit déjà bien sollicité de
notre jeune recrue. ;-)

Bonne soirée !

Cordialement,

Bruno
Avatar
yvslart
Salut tout le monde je voulais vois dire qu'en surfant (afin de
trouver cette fameuse commande de "du") j'ai trouvé un programme qui
permet de déterminer un pourcentage de l'espace utilisé de mon
répertoire et d'envoyer un mail si je l'atteins :
Le voilà

#! /usr/bin/ksh

typeset fs_to_look="/soft /data"
typeset -i percent_used_warn
typeset result=""
typeset tmp=""
typeset msg="l'espace utilise sur $curr_to_look est supp a
$percent_used_warn%"

df -k |
while read curr_fs
do
for curr_to_look in $fs_to_look
do
tmp=$(
echo $curr_fs |
awk ' $( NF )=="'"$curr_to_look"'" { print $4 } '
)

[ -z "$tmp" ] && continue

[ "`echo $tmp | sed 's:%::g'`" -ge "$percent_used_warn" ] &&
result="$result `eval echo $msg`"
done
done

[ ! -z "$result" ] && echo "`date +%D`: $result"



Qu'est-ce que vous en pensez?( à la place de /soft/data je mets /
home)
Alors maintenant soit :
-je cherche une commande pour entrer à la place du pourcentage
une valeur (comme sa je mets 1 Mo)
-soit je cherche une commande pour limiter l'espace du /home à
1Mo et je laisse les pourcentages

Il y a certainement de l'idée ;) ......mais à vous de me mettre
sur la bonne voie.

Sinon d'après vos commentaires et suggestions :

TAILLE=$(`du -s -k /home | cut -f1`)
if [ "${TAILLE}" -ge 1000 ]
then
mail -s "attention" <sujet_mail
fi

-->J'ai trouvé que pour GNU -k permet de donner les résultats en
kilo bytes et puis le -s affichait seulement le total pour chaque
argument.(plus besoin de cut je pense!)
-->Est- ce que je dois mettre les `` ou non?

Je vous remercie tous et toutes pour votre aide .
Avatar
Bruno Tréguier
yvslart wrote:
Salut tout le monde je voulais vois dire qu'en surfant (afin de
trouver cette fameuse commande de "du") j'ai trouvé un programme qui
permet de déterminer un pourcentage de l'espace utilisé de mon
répertoire et d'envoyer un mail si je l'atteins :
Le voilà



[ couic le script ]

Personnellement (mais vous faites ce que vous voulez), je n'emploierais
pas un tel script: il y a de grandes chances que vous ne compreniez pas
tout ce qu'il fait, et il y a aussi de grandes chances qu'il ne fasse
pas exactement ce que vous attendez. Donc, mon conseil serait de vous
cantonner à un script simple, que vous comprenez à 100%, et pour lequel
vous serez capable d'expliquer vos choix à votre prof.


Sinon d'après vos commentaires et suggestions :

TAILLE=$(`du -s -k /home | cut -f1`)
if [ "${TAILLE}" -ge 1000 ]
then
mail -s "attention" <sujet_mail
fi



S'il vous plaît, faites le nécessaire pour pouvoir *tester* vos
hypothèses, faute de quoi je jette l'éponge, pour ma part. Si vous aviez
testé le script ci-dessus, vous auriez vu qu'il ne peut pas marcher.


-->J'ai trouvé que pour GNU -k permet de donner les résultats en
kilo bytes et puis le -s affichait seulement le total pour chaque
argument.(plus besoin de cut je pense!)



Si, toujours besoin de cut, mais plus besoin de tail. ;-)


-->Est- ce que je dois mettre les `` ou non?



C'est un choix: soit:

VARIABLE=`commande`

soit

VARIABLE=$(commande)

La dernière forme est plus académique, car conforme à un standard
dénommé POSIX.

Vous comprenez mieux pourquoi votre script ne peut pas marcher maintenant ?

Cordialement,

Bruno
Avatar
yvslart
>Donc, mon conseil serait de vous


cantonner à un script simple, que vous comprenez à 100%, et pour
lequel
vous serez capable d'expliquer vos choix à votre prof.
-->Tu as tout à fait raison Bruno.

S'il vous plaît, faites le nécessaire pour pouvoir *tester* vos


hypothèses, faute de quoi je jette l'éponge, pour ma part. Si vous
aviez
testé le script ci-dessus, vous auriez vu qu'il ne peut pas marcher.
-->Je sais mais c'est que je suis en train de passer mes examens
et entre la physique ,langage C,codage........je n'ai pas vraiment le
temps mais maintenant que je suis en train de préparer mon exam de
shell je vais pouvoir tester sur machine.

(PS:je sais que vous êtes plus occupé que moi et que malgré tout vous
prenez bien le temps de me répondre alors "je vous en supplie" ne
déclenchez pas une guerre à cause de ça et soyez juste compréhensif s).

-->Bon j'ai testé et tu as raison ça ne marche pas!! pourtant j'ai
lancé un vi et j'ai écrit le: #!/bin/bash
la commande: du -s -k ubuntu | cut -f1 marche parfaitement
bien mais je ne vois pas où est le problème!!(peut-être de la variabl e
taille?)
Avatar
yvslart
J'ai oublié de mentionner que j'ai utilisé la forme académique .
Merci Bruno :)
Avatar
Bruno Tréguier
Le 15/01/2010 à 19:19, yvslart a écrit :
J'ai oublié de mentionner que j'ai utilisé la forme académique .



Oui, mais en vous trompant, et c'est la raison pour laquelle ça ne
marche pas... Regardez mieux ce que vous avez écrit, ce que j'ai
proposé, et ce que Cyrille a proposé, vous verrez que vous avez fait un
joyeux mélange...

Pour ce qui est d'être compréhensif (puisque vous abordez le sujet dans
votre message précédent), le meilleur moyen de ménager vos
interlocuteurs et d'éviter les remarques désagréables est de ne pas
abuser de leur patience, en faisant votre part du boulot, c'est à dire
en testant vos solutions *avant* de les soumettre en retour dans ce
newsgroup... Comme ça, à l'échange suivant, on peut aller un peu plus
loin au lieu de piétiner en vous disant "ben non, là y'a encore une
erreur"... ;-)

Cordialement,

Bruno
Avatar
yvslart
Je prenderai ce que vous dîtes en considération mais pour la commande
if [ "${TAILLE}" -ge 1000 ] c'est Cyrille qui l'a posté :o !
Comment sa se fait qu'elle ne soit pas correcte?
Avatar
Bruno Tréguier
Le 15/01/2010 à 20:59, yvslart a écrit :
Je prenderai ce que vous dîtes en considération mais pour la commande
if [ "${TAILLE}" -ge 1000 ] c'est Cyrille qui l'a posté :o !
Comment sa se fait qu'elle ne soit pas correcte?



Ce n'est pas ça qui n'est pas correct... Cherchez mieux. ;-)

Cordialement,

Bruno
Avatar
yvslart
Vraiment désolée mais je ne vois pas sauf que peut-être j'ai oubli é
UUOC.
Mais j'ai fait un test sans le mail j'ai tout simplement utilisé echo
hello mais sa ne marche pas!
Donc erreur dans TAILLE=$(du -s -k /home |cut -f1) ?