[script shell ] petits scripts

Fermé
tarikbenn Messages postés 110 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 27 juin 2007 - 28 sept. 2006 à 13:00
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 28 sept. 2006 à 19:13
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 .. )
A voir également:

6 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
28 sept. 2006 à 13:12
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
0
tarikbenn Messages postés 110 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 27 juin 2007 1
28 sept. 2006 à 13:47
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
0
tarikbenn Messages postés 110 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 27 juin 2007 1
28 sept. 2006 à 13:56
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 :)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
28 sept. 2006 à 14:01
#!/bin/bash

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


essaye -ne au lieu de !=

lami20j
0
tarikbenn Messages postés 110 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 27 juin 2007 1
28 sept. 2006 à 15:19
#!/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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > tarikbenn Messages postés 110 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 27 juin 2007
28 sept. 2006 à 15:25
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).

;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
28 sept. 2006 à 15:43
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > tarikbenn Messages postés 110 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 27 juin 2007
28 sept. 2006 à 15:45
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)).
;-))
0
tarikbenn Messages postés 110 Date d'inscription jeudi 13 juillet 2006 Statut Membre Dernière intervention 27 juin 2007 1 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
28 sept. 2006 à 16:09
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
28 sept. 2006 à 14:07
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 :-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
28 sept. 2006 à 19:13
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
0