rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[script shell ] petits scripts

tarikbenn, le jeudi 28 septembre 2006 à 13:00:19
Salut tous le monde



J'ai besoin de faire un script shell qui fait certaines fonctions . Je veux le faire moi même , mais je serai amener à poser des questions ( j'en ai deja une )

Mais je dois faire ce script dans un minimum de temps ( c'est trop urgent : avant la fin de la journée )



Je vous remercie tous pour votre compréhension

et à tout de suite.



Première question : Pourquoi le script suivant m'affiche des erreurs :



#!/usr/bin/ksh
echo "A?"
read A
while [ ! 'a' || ! 'z' ]
do
echo "A?"
read A
done



En gros je veux blinder la saisie , pour que l'utilisateur ne tape que soit a soit z.

les erreurs qu'il m'affiche sont les suivantes :

./test2[4]: test: ] missing
./test2[4]: z: not found

( ou alors , juste comment faire pour qu'il ne les affiche plus ... une option ou .. )
Répondre à tarikbenn  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le jeudi 28 septembre 2006 à 13:12:36
Salut,

en attendant la réponse de jipicy ;)

while [ ! 'a' || ! 'z' ]

tu dois tester le contenu de la variable, et tu ne le fait pas
'a' et 'z' ne sont que des caractères (donc tu testes des constantes)

Tu dois tester si le contenu de la variable et 'a' ou 'z'

A c'est la variable
$A c'est son contenu

je ne suis pas sous linux pour tester. A toi de faire les modifications ;)

lami20j
Répondre à lami20j

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tarikbenn, le jeudi 28 septembre 2006 à 13:47:21
Salut Lami20j
J'ai essayé plusieurs syntaxes ( $A != 'a' ...$A ! 'a' ... )
mais aucune ne marche ...
Donc pas de blindage pour le moment ...
Sinon j'ai une deuxieme question :
Comment faire pour creer , dans un script shell , un fichier dans lequel on ecrira "toto va a l'école" ?

Merci d'avance
Répondre à tarikbenn

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tarikbenn, le jeudi 28 septembre 2006 à 13:56:41
Le script qui répond à ma première question est le suivant :

#!/usr/bin/ksh
unset A
while $A != 'a' && $A != 'z'
do
echo "A?"
read A
done

Mais je n'ai pas celui qui répond à ma deuxième question :

Comment faire pour creer , dans un script shell , un fichier dans lequel on ecrira "toto va a l'école" ?

Merci d'avance :)
Répondre à tarikbenn

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le jeudi 28 septembre 2006 à 14:01:55
#!/bin/bash

echo "toto va à l'école?" > fichier


essaye -ne au lieu de !=

lami20j
Répondre à lami20j

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tarikbenn, le jeudi 28 septembre 2006 à 15:19:31
#!/bin/bash

echo "toto va à l'école?" > fichier


Cette technique marche , mais elle ne marche plus dès que le nombre de commande augmente. Comment faire par exemple pour envoyer a un fichier :
"titi va a l'ecole"
"toto est a la maison"
"tata ne fait rien"

merci
Répondre à tarikbenn

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 28 septembre 2006 à 15:25:56
Re-

echo "titi va a l'ecole" >> fichier
echo "toto est a la maison" >> fichier
echo "tata ne fait rien" >> fichier

Le double chevron ajoute au fichier (alors que le simple écrase).

;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 28 septembre 2006 à 15:45:02
En shell "ksh" (par rapport au shell bash), tu as aussi la possibilité de mettre un drapeau (noclobber) pour empêcher l'écrasement des fichiers en redirection (extrait du man ksh) :
       > file 
              standard output is redirected to file.  If file does not  exist,
              it  is  created;  if  it  does  exist, is a regular file and the
              noclobber option is set, an error occurs, otherwise the file  is
              truncated.   Note  that  this  means the command cmd < foo > foo
              will open foo for reading and then truncate it when it opens  it
              for writing, before cmd gets a chance to actually read foo.

       >| file
              same  as  >, except the file is truncated, even if the noclobber
              option is set.

       >> file
              same as >, except the file  an  existing  file  is  appended  to
              instead  of being truncated.  Also, the file is opened in append
              mode, so writes always go to the end of the file (see  open(2)).
;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le jeudi 28 septembre 2006 à 15:43:12
Re,

ou encore
echo -e "titi va a l'ecole\ntoto est a la maison\ntata ne fait rien"  > fichier

Mais garde à l'esprit le double chevron :-)

lami20j
Répondre à lami20j

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tarikbenn, le jeudi 28 septembre 2006 à 16:09:42
Merci les gars pour vos réponses !
Il me reste une dernière question avant la fin de la journée :
Comment, a partir d'un script shell, faire pour aller dans un fichier
qui contient les choses suivantes:
titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/
QSdsfdsfqdf/
Qqsdqfdg/


et ajouter a la suite des lignes 8 , 9 et 10 les mots suivants: abc , def et gki.

Merci d'avance
Répondre à tarikbenn

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 28 septembre 2006 à 16:15:27
Ajouter comment ?

Donne un exemple du résultet final s'il te plaît, histoire qu'on soit bien d'accord sur l'interprétation ;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 28 septembre 2006 à 16:25:06
Voilà ce que ça pourrait donner, si j'ai bien tout compris ce que tu veux faire :
[jp@MDK tmpfs]$ cat fich.txt

titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/
QSdsfdsfqdf/
Qqsdqfdg/

[jp@MDK tmpfs]$ sed -i.bak '8s/.*/&abc/;9s/.*/&def/;10s/.*/&gkl/' fich.txt

[jp@MDK tmpfs]$ cat fich.txt

titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/abc
QSdsfdsfqdf/def
Qqsdqfdg/gkl

[jp@MDK tmpfs]$
;-) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tarikbenn, le jeudi 28 septembre 2006 à 17:17:58
Salut Jipicy
J'espere que t'es encore là
En utilisant ta ligne de commande avec sed ,
j'obtiens l'erreur suivante :
sed: illegal option -- i

Je te donne le script que je lance


#!/usr/bin/ksh
echo "taper le nom "
read NOM
echo "taper la version "
read VERSION
echo "taper la version du machin"
read VERSION_M
sed -i.bak '8s/.*/&${NOM}/;9s/.*/&${VERSION}/;10s/.*/&${VERSION_M}/'/start/test/fichier.conf
cat /start/test/fichier.conf


Mais ca ne marche malheureusement pas.
Please help ;)
Répondre à tarikbenn

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 28 septembre 2006 à 17:25:04
Il faut que la commande sed et le reste de la commande soit sur la même ligne.

Si c'est une question d'esthétisme pour ton script, il faut rajouter un anti-slash avant le retour à la ligne du genre :
sed -i.bak\ '8s/.*/&${NOM}/;9s/.*/&${VERSION}/;10s/.*/&${VERSION_M}/'/start/test/fichier.conf 
;-) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tarikbenn, le jeudi 28 septembre 2006 à 17:30:31
Mais c'est sur la même ligne
( c'est juste au niveau du copié collé que ca a découpé la ligne )
Répondre à tarikbenn

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 28 septembre 2006 à 17:39:26
Change les 'quotes simples' par des "quotes doubles" (guillemets), ça devrait aller mieux ;-))
sed -i.bak "8s/.*/&${NOM}/;9s/.*/&${VERSION}/;10s/.*/&${VERSION_M}/" fichier.conf
--
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tarikbenn, le jeudi 28 septembre 2006 à 17:44:00
Toujours la même erreur... :(
Répondre à tarikbenn

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 28 septembre 2006 à 17:52:28
Pas possible j'ai testé chez moi et ça marche nickel !!!

Colle ton script ici entre lez balises "code" (le dernier bouton à droite là haut dessus quand tu rédiges ton message), qu'on puisse voir où est le 'blème !!!

Au cas ou, il faut un espace à la fin de la commande sed, entre la fin de la commande et le nom du fichier (surtout que tu as un chemin absolu commençant par un slash). Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tarikbenn, le jeudi 28 septembre 2006 à 18:10:46
Voila le script que j'utilise ( sous Solaris 8 ) :

#!/usr/bin/ksh
echo "taper le nom  "
read NOM
echo "taper la version du produit "
read VERSION
echo "taper la version du ma"
read VERSION_M
sed -i.bak "8s/.*/&${NOM}/;9s/.*/&${VERSION}/;10s/.*/&${VERSION_M}/" /start/test/restore.conf
cat /start/test/restore.conf
Répondre à tarikbenn

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 28 septembre 2006 à 18:22:53
Ben je comprends toujours pas !!!
Un copier/coller de ton script chez moi (j'ai juste changé le nom du fichier à modifier en "fichier.txt") et tout baigne...
[jp@MDK tmpfs]$ cat fichier.txt

titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/
QSdsfdsfqdf/
Qqsdqfdg/

[jp@MDK tmpfs]$ ksh tarikbenn.sh

taper le nom
jipicy
taper la version du produit
1er du nom
taper la version du ma
CCM

titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/jipicy
QSdsfdsfqdf/1er du nom
Qqsdqfdg/CCM

[jp@MDK tmpfs]$ 
J'comprends pô ;-\

Mais au fait c'est quoi l'erreur chez toi ?
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tarikbenn, le jeudi 28 septembre 2006 à 18:29:49
Bein oui :/
c vraiment bizarre
l'erreur que je recois est la suivante :

sed: illegal option -- i


voila , j'espere que ca t'aidera à debugger ;)
Répondre à tarikbenn

22


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 28 septembre 2006 à 18:48:22
Apparemment ta version de sed (aficche la d'ailleurs : sed --version) ne prend pas en compte le paramètre "-i" !!!

Dans ce cas là, essaie dans un premier temps de faire juste l'affichage sur la sortie standard (l'écran) et si y'a pas d'erreur, il faudra alors passer par un fichier temporaire.
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le jeudi 28 septembre 2006 à 14:07:27
Salut,

J'étais en train de faire les tests et j'ai pondu le même script que le tien à quelques crochets prés ;-))
echo "A?"
read A
while [ "$A" != "a" ] && [ "$A" != "z" ]
do
	echo "A?"
	read A
done
Voilou :-) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

23


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 lami20j, le jeudi 28 septembre 2006 à 19:13:19
Re,

et si tu remplaces la ligne avec sed avec une ligne avec perl?!
$ cat tarikkben.txt
titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/
QSdsfdsfqdf/
Qqsdqfdg/
$ perl -pi.bak -e '8..8?s/(.*)/$1abc/:9..9?s/(.*)/$1def/:10..10?s/(.*)/$1ghi/:­s/(.*)/$1/' tarikkben.txt
$ cat tarikkben.txt
titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/abc
QSdsfdsfqdf/def
Qqsdqfdg/ghi
lami20j@debian:~/trash$
lami20j
Répondre à lami20j
Logiciels pertinents trouvés dans les téléchargements
Télécharger All In One Video Script 1.0All In One Video Script - All In One Video Script est un script pour l'extension GreaseMonkey pour le navigateur Firefox permettant de détecter la...Catégorie: Vidéo
Licence: Freeware/gratuit
Télécharger SSH Secure Shell 3.0 build 203SSH Secure Shell - SSH secure shell for workstations est un client SSH flexible permettant de se connecter de façon sécurisée à des...Catégorie: Telnet/SSH
Licence: Open Source
Télécharger GreaseMonkey 0.8.20080609.0GreaseMonkey - GreaseMonkey permet de bidouiller à la volée les pages web que vous consultez. C'est à dire qu'il va modifier la page...Catégorie: Extensions Firefox
Licence: Open Source
Télécharger ShellEnhancer  3.0.0.91ShellEnhancer - ShellEnchancer est un programme d'amélioration des fonctions de base de Windows. Il rend les interfaces plus stables et plus...Catégorie: Personnalisation
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [script shell ] petits scripts »