Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/07/2009, à 18:12

Xun

[Résolu] Bash: ne comprend désespérément pas if et fi

Bonjour,

Aujourd'hui j'ai décidé de coder du bash, n'ayant aucune connaissance.
Je regarde dans quelques scripts que j'ai, et j'en prends certains pour model.

Les scripts models marchent sans erreur, alors que les miens me retournent

/home/alex/Bureau/OpenSSH-serveur1.sh: 18: [[: not found

et provoquent l'arrêt du script.

Voici mes scripts:

OpenSSH-serveur.sh

#!/bin/bash
# By Xun
# 07-19-09
# GPL v3

# Installation du serveur Openssh
read -p "Voulez-vous installer Openssh sur votre ordinateur {(O)ui/(N)on}?" answer_ssh

 
if [[ ${answer_ssh} = [oOyY] ]]; then
   sudo apt-get --assume-yes install openssh-server
    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
fi
clear

echo "Où se situe le fichier authorized_keys ?"
echo "Exemple: /media/disk/authorised_keys"
read authorizedwhere
sudo cp $authorizedwhere ~/.ssh

sh $PWD/OpenSSH-serveur1.sh
 
    sed -i 's/^\(HostKey.*rsa.*\)$/#\1/' /etc/ssh/sshd_config
    sed -i 's/^\(LoginGraceTime\).*$/\1 30/' /etc/ssh/sshd_config
    sed -i 's/^\(PermitRootLogin\).*$/\1 no/' /etc/ssh/sshd_config
    sed -i 's/^#\(MaxStartups.*\)$/\1/' /etc/ssh/sshd_config
    /etc/init.d/ssh restart

exit
fi

echo "OpenSSH-serveur.sh n'a pas pu déterminer si Openssh était présent ou pas."
echo "Echec de l'installateur"
exit

et OpenSSH-serveur1.sh

#!/bin/bash
# By Xun
# 07-19-09
# GPL v3

clear
echo ""
echo "Veuillez m'indiquer le nom de votre utilisateur afin d'attibuer les droits sur les clés"
echo "Exemple: $user /home/$user"
read user

echo "Votre nom d'utilisateur est" $user
read -p "Confirmez-vous ? (o/N)" confirmation
	if [[ ${confirmation} = [oOyY] ]]; then
sudo chown -R $user:$user ~/.ssh

exit
fi

sh $PWD/OpenSSH-serveur1.sh
exit
fi

Le problème est que je n'arrive pas à finir mes scripts, ils bugent avant. Le problème doit être if ...
Je me prends la tête depuis 15h... Je pensais pouvoir éviter le problème en exécutant un autre script, mais non ...

Si vous pouviez m'expliquer mon erreur, puis me dire comment réintégrer mes 2 fichiers sh en un, ça serait gentil smile
Merci d'avance,

Xun

Dernière modification par Xun (Le 19/07/2009, à 19:53)

Hors ligne

#2 Le 19/07/2009, à 18:15

vincentp010

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Salut,

pour moi le probleme viens du crochet répété 2 fois

if [[ ${answer_ssh} = [oOyY] ]]; then

serait plutôt

if [ ${answer_ssh} = [oOyY] ]; then

Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go

Hors ligne

#3 Le 19/07/2009, à 18:17

Qid

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

sache deja que j'y connais rien de rien
moi ce que je vois et ce que je peu en comprendre
c'est qu'a toute ouverture (if) il y a une fermeture (fi)
bah relis tes script et tu verras qu'à mon avis
oui il y a un souci de correspondance

enfin audelas de ça c'est quoi l'interet de ton truc ?


"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil

Hors ligne

#4 Le 19/07/2009, à 18:24

Xun

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Un petit script perso pour apprendre à manier Bash, j'étais sûr qu'on allait me rabacher sur l'intérêt de mes scripts ...

@ vincentp010, Je vais essayer. Merci beaucoup wink

Xun

Hors ligne

#5 Le 19/07/2009, à 18:50

Xun

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Maintenant j'ai une autre erreur;

./OpenSSH-client.sh: line 12: [: = : opérateur unaire attendu
Vous avez arrêté l'installateur.
Voulez-vous le relancer ? (o/N)
./OpenSSH-client.sh: line 22: [: = : opérateur unaire attendu
alex@alex-laptop:~/Bureau$

Voici le code en question:

#!/bin/bash
#
# By Xun,
# GPL v3
# 07-19-09

echo "Bienvenue dans l'installateur d'OpenSSH"
echo "Bienvenue dans l'installateur d'OpenSSH"
echo ""
echo "Je vais créer une paire de clé RSA en 4096 bits."
read -p " Voulez-vous continuer ? (o/N)" clefgen
	
	if [ ${clefgen} = [oOyY] ]; then
		ssh-keygen -b 4096
clear

fi

echo "Vous avez arrêté l'installateur."
read -p "Voulez-vous le relancer ? (o/N)" ouinon

	if [ ${ouinon} = [oOyY] ] ; then
sh $PWD/OpenSSH-client.sh
exit
fi

Les lignes 12 et 22 sont les lignes où il y a des "if", "forcement" ...

Xun

Dernière modification par Xun (Le 19/07/2009, à 18:53)

Hors ligne

#6 Le 19/07/2009, à 19:10

vincentp010

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

C'est le [oOyY] qui ne lui plait pas.
tu peux remplacer

if [ ${clefgen} = [oOyY] ]; then
        ssh-keygen -b 4096
clear

fi

par

if [ ${clefgen} = o ]; then
        ssh-keygen -b 4096
clear

fi

if [ ${clefgen} = O ]; then
        ssh-keygen -b 4096
clear

fi

if [ ${clefgen} = y ]; then
        ssh-keygen -b 4096
clear

fi

if [ ${clefgen} = Y ]; then
        ssh-keygen -b 4096
clear

fi

Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go

Hors ligne

#7 Le 19/07/2009, à 19:43

Xun

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Avec le code que tu me donnes, ça ne marche pas mieux:

./OpenSSH-client.sh: line 12: [: = : opérateur unaire attendu
./OpenSSH-client.sh: line 18: [: = : opérateur unaire attendu
./OpenSSH-client.sh: line 24: [: = : opérateur unaire attendu
./OpenSSH-client.sh: line 30: [: = : opérateur unaire attendu

hmm
Xun

Hors ligne

#8 Le 19/07/2009, à 19:49

Xun

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

J'ai trouvé la solution tongue
Avec:

if [ "$clefgen" = "o" ]; then
        ssh-keygen -b 4096
clear
fi

Ça marche sans erreur wink

Voilou.
Donc le if se finit toujours par fi ?

Xun

Hors ligne

#9 Le 19/07/2009, à 19:52

vincentp010

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Je ne sais pas ce que tu as écrit mais moi ça marche avec ça:

#!/bin/bash
#
# By Xun,
# GPL v3
# 07-19-09

echo "Bienvenue dans l'installateur d'OpenSSH"
echo ""
echo "Je vais créer une paire de clé RSA en 4096 bits."
read -p " Voulez-vous continuer ? (o/N)" clefgen
    
    if [ ${clefgen} = o ]; then
        echo OK
clear

fi

if [ ${clefgen} = O ]; then
        echo OK
clear

fi

if [ ${clefgen} = y ]; then
        echo OK
clear

fi

if [ ${clefgen} = Y ]; then
        echo OK
clear

fi

echo "Vous avez arrêté l'installateur."
read -p "Voulez-vous le relancer ? (o/N)" ouinon

    if [ ${ouinon} = o ] ; then
sh $PWD/OpenSSH-client.sh
exit
fi

    if [ ${ouinon} = O ] ; then
sh $PWD/OpenSSH-client.sh
exit
fi

    if [ ${ouinon} = y ] ; then
sh $PWD/OpenSSH-client.sh
exit
fi

    if [ ${ouinon} = Y ] ; then
sh $PWD/OpenSSH-client.sh
exit
fi

Edit: tu as posté ton message entre temps
Oui bien sur le if se finit toujours par fi, on peut le voir dans mon message du dessus

Dernière modification par vincentp010 (Le 19/07/2009, à 19:55)


Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go

Hors ligne

#10 Le 19/07/2009, à 19:54

Xun

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

vincentp010 a écrit :

Je ne sais pas ce que tu as écrit mais moi ça marche avec ça:
...code....

Les erreurs venaient quand on ne répondait pas par oOyY justement.

Mais maintenant ça marche, qu'on réponde oui ou non (= rien)

Xun

Hors ligne

#11 Le 19/07/2009, à 20:36

HP

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

vincentp010 a écrit :

pour moi le probleme viens du crochet répété 2 fois

pffffffff ! roll


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#12 Le 19/07/2009, à 20:41

Totor

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Bonsoir,
La notation [oOyY] est tout à fait valable mais il faut utiliser les doubles [[ et ]] pour réaliser le test.
Par ailleurs, il faut absolument encadrer ${clefgen}, ${confirmation} et  ${answer_ssh} par des guillements (et c'est loin d'être la 1ère fois que je le dis... roll)

A noter que dans les 2 scripts, il y a des "fi" en trop.


-- Lucid Lynx --

Hors ligne

#13 Le 19/07/2009, à 21:22

Qid

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Totor a écrit :

A noter que dans les 2 scripts, il y a des "fi" en trop.

c'est bien ce qu'il me semblait je l'avais vu des le depart


"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil

Hors ligne

#14 Le 19/07/2009, à 21:44

Xun

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Totor a écrit :

Bonsoir,
La notation [oOyY] est tout à fait valable mais il faut utiliser les doubles [[ et ]] pour réaliser le test.
Par ailleurs, il faut absolument encadrer ${clefgen}, ${confirmation} et  ${answer_ssh} par des guillements (et c'est loin d'être la 1ère fois que je le dis... roll)

A noter que dans les 2 scripts, il y a des "fi" en trop.

Quand faut-il en mettre alors (des fi) ? Parce que pour le moment, dès que je fais un "if" je mets automatiquement un "fi".
Je tiens à préciser que je commence le bash tongue pour le moment ça marche très bien comme ça:

read -p "Choisissez votre cas: => " choix_menu

	if [ "$choix_menu" = "1" ]; then
cd $PWD/script-client
clear
./OpenSSH-client.sh
fi

Est-ce grave si ce n'est pas comme vous dites ?

Peut-on me donner la syntaxe exacte ? smile
Merci encore big_smile

Xun

Hors ligne

#15 Le 19/07/2009, à 21:54

Totor

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Dans les scripts que tu as posté en premier, il y a des fi en trop car ils ne sont pas associés à des if :
Pour le 1er script, il se trouve après le 1er "exit"
Pour le 2nd script, il se trouve en dernière ligne

Cela dit, comme ils se trouvent après des "exit", ils n'ont pas d'incidence car ils ne seront pas interprétés.

Pour la syntaxe et à propos des guillemets (et comprendre pourquoi ça ne fonctionnait pas) : voir ce post

En complément : Les doubles crochets sont nécessaires lors de l'utilisation des possibilités d'expansion ou de l'utilisation de l'opérateur =~ (je ne pense pas oublier des cas).
Dans ton cas, le pattern étant [oOyY], l'expansion est utilisé.
EDIT : correction orthographe

Dernière modification par Totor (Le 20/07/2009, à 10:38)


-- Lucid Lynx --

Hors ligne

#16 Le 19/07/2009, à 22:23

Xun

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Merci Totor, je vois que tu es très réputé ici wink

Je ne te demanderai plus qu'une chose ici, sais-tu s'il existe une commande pour savoir le nom d'utilisateur qui est actuellement utilisé ? Une commande bash qui me dirait le nom d'utilisateur/le nom du home de celui qui est actuellement logué ...

Je ne sais pas si tu me comprends, si ce n'est pas le cas je me débrouillerai autrement wink

Xun

Hors ligne

#17 Le 19/07/2009, à 22:29

Qid

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

il faut voir dans les variable bash ce que tu cherche y est surement (avec un $ devant de memoir)


"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil

Hors ligne

#18 Le 19/07/2009, à 22:32

vincentp010

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Totor a écrit :

En complément : Les doubles crochets sont nécessaires lors de l'utilisation des possibilités d'expansion ou de l'utilisation de l'opérateur =~ (je ne pense pas oublier des cas).
Dans ton cas, le pattern étant [oOyY], l'expansion est utilisé.

Ok, je ne connaissais pas ça, j'aurais appris quelque chose.

Pour avoir le nom d'utilisateur $USER
Pour le home $HOME


Desktop: Archlinux OpenBox
Laptop: Dualboot Ubuntu-Studio 9.10 / Archlinux OpenBox
Server: EeeBox Ubuntu-Server 8.10 500Go

Hors ligne

#19 Le 19/07/2009, à 22:37

Xun

Re : [Résolu] Bash: ne comprend désespérément pas if et fi

Je suis dégouté de la simplicité ... j'avais pourtant essayé un genre de $USER mais ça n'avait pas marché (forcement, sinon je n'aurai pas posé la question).

Merci beaucoup beaucoup big_smile !

Xun

Hors ligne