Aller au contenu

[Tuto] Les Scripts Bash


P-A

Messages recommandés

Humm tu viens de me faire découvrir un bug... merci :D

Alors oui ça marche avec tr -d , mais est-ce mieux de refaire appel à sed (déjà utiliser avant) ou d'appeler tr ? Qu'est-ce qui est le plus léger ?

La ligne que j'aimerai arriver à grepper à chaque fois ressemble à ça : Project: 1850 (Run 25, Clone 106, Gen 0)

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 101
  • Créé
  • Dernière réponse
Alors oui ça marche avec tr -d , mais est-ce mieux de refaire appel à sed (déjà utiliser avant) ou d'appeler tr ? Qu'est-ce qui est le plus léger ?

à mon avis tr est beaucoups plus léger (et rapide)

La ligne que j'aimerai arriver à grepper à chaque fois ressemble à ça : Project: 1850 (Run 25, Clone 106, Gen 0)

RUN=$(grep -i run $1/FAHlog.txt | tail -n 1 | awk {'print $5'} | sed -e "s/,//")
CLONE=$(grep -i clone $1/FAHlog.txt | tail -n 1 | awk {'print $7'} | sed -e "s/,//")
GEN=$(grep -i gen $1/FAHlog.txt | tail -n 1 | awk {'print $9'} | sed -e "s/)//")

RUN=$(grep Run $1/FAHlog.txt | tail -n 1 | tr '(,)' '   ' | awk {'print $4'})
CLONE=$(grep Clone $1/FAHlog.txt | tail -n 1 | tr '(,)' '   ' | awk {'print $6'})
CLONE=$(grep Gen $1/FAHlog.txt | tail -n 1 | tr '(,)' '   ' | awk {'print $8'})

1) à mon avis "grep -i" est plus lent que "grep"

2) on change "(", "," et ")" en espace

4) on utilise un awk avec -F " " (par défaut) et on prend ce qu'on a besoin...

Lien vers le commentaire
Partager sur d’autres sites

Wahou OK je vais tester ça, j'arrive déjà à grepper la ligne que je veux à chaque fois (mauvais pattern pour le grep en fait, "Project:" est beaucoup mieux)

:craint:

edit: ça marche au poil, tu viens de m'apprendre et l'éxistence de tr et sa syntaxe et en plus tu intègres la liste des personnes remerciées, c'est-y pas bô ? :D

et même pas besoin de convertir "(" en espace, ce que je voulais virer c'était juste les virgules et la paranthèse fermante finale :)

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

Ce n'est pas un script bash a vrai dire, c'est plus de la configuration du prompt de bash

Utilisation

rajoutez ca dans /etc/bash.bashrc, ou bien dans chacun de vos ~/.bashrc (mais le mettre sur le systeme entier, ca reste plus pratique).

Si vous l'avez mis dans /etc, il faut virer les export PS1 dans vos fichiers .bashrc respectifs.

# Code couleur de l'host
export PS_HOST_COLOR='\[\e[01;32m\]'

# Code couleur du user (selon si il est root ou pas)
if [ $(id -u) -eq 0 ]
then
	export PS_USER_COLOR='\[\e[01;31m\]'
else
	export PS_USER_COLOR='\[\e[01;34m\]'
fi

export PS1='\007'$PS_USER_COLOR'\u'$PS_HOST_COLOR'@\h:\[\e[01;35m\]\w\[\e[33;01m\]\$\[\e[00m\] '


Je mettrais a jour avec les codes couleurs :)

Si jamais vous savez comment faire un include dans un fichier script bash, ca m'interesse :)

en gros, pour, la config de base, en root, on aura un prompt de cette forme

root@hostname:/root/#

et pour un utilisateur normal

user@hostname:/home/user$

Lien vers le commentaire
Partager sur d’autres sites

padprobz, le tout est de trouver la bonne commande ...

ensuite pour faire un archivage automatique, tu peux faire un script du style :

[ -d $arcpath ] || mkdir $arcpath
[ -d $arcpath/$year ] || mkdir $arcpath/$year
[ -d $arcpath/$year/$monthyear ] || mkdir $arcpath/$year/$montyear

ou bien:

[ -d $arcpath/$year/$monthyear ] || mkdir -p $arcpath/$year/$montyear

Sinon quelques liens en Anglais pour des sauvegardes incrémentales avec rsync.

http://www.mikerubel.org/computers/rsync_snapshots/

http://www.macosxhints.com/article.php?sto...31024013757927/ (inutile d'utiliser find/cpio, utiliser ls)

A noter qu'il existe une option --link-dest pour rsync qui peut dispenser d'utiliser cp -al.

A+

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...
  • 2 mois après...

Je déterre un peu ce topic bien interressant...

Je cherche à faire un script qui me permette de lance une série de commande ftp ou ssh dans un script par exemple:

Ca je sais faire

- créer un répertoire local à partir de la date du système (mkdir ...)

- se déplacer dedans (cd ...)

- se connecter à un serveur ftp ou ssh (ftp ... ou ssh ...)

Mais après je bloque, comment continuer le script pour récupérer des fichiers sur le ftp se déplacer dasn les répertoire ou lancer des commandes dans la sessions ssh ??? (commandes ftp ou ssh pas forcement que de copie de fichiers)

Est-ce que c'est faisable, ou est-ce qu'il faut que je me rabatte vers un autre langage de script plus évolué (python ...)

Lien vers le commentaire
Partager sur d’autres sites

et ssh tu peux passer en argument les commandes à exécuter, genre

ssh lorinc@grossescochones.com ls ~/XXX/*.jpeg

:craint:

Je te reconnais bien la :transpi:

Salut

pour le ftp tu peux fournir un fichier contenant les commandes à executer en passant je ne sais plus quel argument, mais c'est possible :) .

c'est pas @ ?

Lien vers le commentaire
Partager sur d’autres sites

sleep x

avec x un nombre de secondes

Aussi, sleep supporte le paramètre s, m, h, d.

Tu peux écrire sleep 5s (pour 5 secondes) ou sleep 5h (pour 5 heures)

Mais je répète, c'est écrit dans man sleep :iloveyou:

Il y a aussi lftp qui gère les commandes à lancer directement sur la ligne de commande, exemple : lftp -u user,pass ftp.groscochons.org -c "cd /groins; mirror -R .; exit"

Sinon, il y a toujours ce bon vieux expect.

Moi j'utilise ncftp (+ ncftpget et ncftpput) qui est pas mal non plus. C'est pratiquement pareil à lftp.

Lien vers le commentaire
Partager sur d’autres sites

Salut

Je suis en train de finir un script, mais j'ai un soucis de syntaxe avec une boucle :


echo "combien de comptes souhaitez vous ajouter ?"
	read i


		while [ $i != 0 ]
			   do 
			echo "creation du compte n°"   #ici numero du compte
			echo "quelle est le nom de l'utilisateur ?"
			echo "donnez un mot de passe "
			i=='expr $i - 1'

		done

En fait c'est a la fin que çà bloque, je voudrais augmenter la valeur de $i a chaque tous de boucle, mais une erreur de syntaxe bloque mon affaire.

Si quelqu'un pouvais m'aider ça serais super :) .

a+

Lien vers le commentaire
Partager sur d’autres sites

echo "combien de comptes souhaitez vous ajouter ?"
read i

 while [ "$i" -ne "0" ]
 do
echo "creation du compte n°"   #ici numero du compte
echo "quelle est le nom de l'utilisateur ?"
echo "donnez un mot de passe "
((i=i-1))
done

Compatible avec le bourne shell historique pour les machines qui n'ont pas bash (/bin/sh) :yes:

Ou pour pas se faire chier

for j in `seq $i`; do...done

(Ou avec $() si c'est bash/ksh/zsh only sans soucis de rétrocompatibilité)

Lien vers le commentaire
Partager sur d’autres sites

echo "combien de comptes souhaitez vous ajouter ?"
read i

 while [ "$i" -ne "0" ]
 do
echo "creation du compte n°"   #ici numero du compte
echo "quelle est le nom de l'utilisateur ?"
echo "donnez un mot de passe "
((i=i-1))
done

Compatible avec le bourne shell historique pour les machines qui n'ont pas bash (/bin/sh) :yes:

salut

Merci beaucoup :).

Quand j'aurais un peu de temps je donnez le reste du script, c'est a dire ce week end, c'est pour creer des htacces :)

a+

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

humm, je sais pas trop où je dois mettre ca, j'hésitais avec le topic des exercices ....

enfin, j'ai un peu de temps donc j'ai décidé de me mettre sérieusement à l'écriture de scripts

j'ai un peu joué avec zenity, c'est plutot sympa :yes:

donc un petit exemple tout simple de ce que j'ai fait. On peut sans doute améliorer...

#!/bin/sh

URL="$(zenity --entry \
 --title="Enregister le flux" \
 --text="Saisir le lien vers le flux :")"
FILENAME="$(zenity --entry \
 --title="Enregister le flux" \
 --text="Saisir le nom du fichier (chemin complet)"

mplayer -noframedrop -dumpfile $FILENAME -dumpstream $URL  | zenity --text-info --title "Capture du Flux -- Merci de patienter;)"$

c'est tout simple le script demande l'url du flux puis le nom de fichier pour l'enregistrement.

bon c'est vraiment pas grand chose mais c'est marant de faire des scripts avec de jolies boites de dialogue gtk+ ;)

puis accessoirement ca peut etre util pour certains. A priori ca capture aussi bien le real que le média player. La conversion viendra pluls tard, j'ai pas encore réussi à me décider sur le format de capture ;)

Voilà, un message, pour les idiots comme moi qui ne connaissaient pas :transpi:

Lien vers le commentaire
Partager sur d’autres sites

bone je ne dois pas etre encore bien réveillé...

je voudrais utiliser ca http://www.tldp.org/LDP/Bash-Beginners-Gui...sect_07_01.html

pour vérifier si des fichiers existent....

mais impossible d'arriver à écrire le test, j'ai essayé :

if [ (-e /tmp/outvid.avi) -a (! (-e /tmp/outaud.ogg)) ]

je souhaite que ca renvoie vrai, si /tmp/outvid.avi existe et

/tmp/outaud.ogg n'existe pas ....

mais ca ne marche poa :(

si je mets les parenthèses, j'ai droit à une erreur sur les parenthèses et si je les mets pas, il me sort une erreur su le -e ( "syntax error near unexpected token `-e' ")

Lien vers le commentaire
Partager sur d’autres sites

bone je ne dois pas etre encore bien réveillé...

je voudrais utiliser ca http://www.tldp.org/LDP/Bash-Beginners-Gui...sect_07_01.html

pour vérifier si des fichiers existent....

mais impossible d'arriver à écrire le test, j'ai essayé :

if [ (-e /tmp/outvid.avi) -a (! (-e /tmp/outaud.ogg)) ]

je souhaite que ca renvoie vrai, si /tmp/outvid.avi existe et

/tmp/outaud.ogg n'existe pas ....

mais ca ne marche poa :(

si je mets les parenthèses, j'ai droit à une erreur sur les parenthèses et si je les mets pas, il me sort une erreur su le -e ( "syntax error near unexpected token `-e' ")

Ça ça marche :

if [ -e /tmp/outvid.avi -a ! -e /tmp/outvid.ogg ]

Mais bon globalement c'est pas très facile à lire...

Moi j'utiliserais des trucs plutôt du genre :

if [ -e /tmp/outvid.avi ] && [ ! -e /tmp/outvid.ogg ]

Lien vers le commentaire
Partager sur d’autres sites

Ça ça marche :

if [ -e /tmp/outvid.avi -a ! -e /tmp/outvid.ogg ]

ben t'as du bol, j'y ai tourné dans tous les sens ca a jamais voullu avec le "!" faudra que j'éclaircisse ce mistère). Du coup j'ai évité les "!" et ca marche...

bon en tout ca, le script est quasiment fini, il reste juste à ajuster les choix au niveaux des taux de compression... à part ca ca marche du tonerre :fete:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.


×
×
  • Créer...