#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
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
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
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
Avec:
if [ "$clefgen" = "o" ]; then
ssh-keygen -b 4096
clear
fi
Ça marche sans erreur
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
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
pour moi le probleme viens du crochet répété 2 fois
pffffffff !
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... )
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
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
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... )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 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 ?
Merci encore
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
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
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
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 !
Xun
Hors ligne