[SOFTWARE] Script Shell erreur à l'exécution

bonsoir,

voilà, je suis nouveau dans le langage shell.
J’ai essayé de faire un petit script simple mais je me retrouve avec 2 erreur qui sont du au “case … in”.

sh addusersftp.sh : not found.sh: 2: addusersftp.sh: : not found.sh: 4: addusersftp.sh:

Voila mon script :

[code]#!/bin/sh

Script d’ajout d’un utilisateur avec saisi du nom, du mdp et du groupe

On demande la saisie d’un nom d’utilisateur et du mot de passe (2 fois)

echo -n "Nom d’utilisateur : "
read nom
echo "Mot de passe : "
read pass
echo "Mot de passe (le retour) : "
read pass2
echo "Groupe d’appartenance (siteclient : 1 / sitetech : 2 / centrale : 3 / tous: 4) : "
read groupe

On vérifie que les 2 mots de passe soient identiques

if test $pass = $pass2 ; then
# On vérifie qu’il n’existe pas déjà un autre utilisateur du même nom
if test -d /home/users/$nom ; then
echo "L’utilisateur existe deja"
else
# On crée les dossiers et on fixe les droits
mkdir /home/users/$nom
chown -R root:root /home/users/$nom
chmod -R 755 /home/users/$nom

			case $groupe in
			   1) 
					useradd $nom --groups siteclient --home /home/users/$nom --password $pass
					ln -s /home/sftp/siteclient /home/users/$nom
					chown -R $nom:siteclient /home/users/$nom/siteclient
					chmod -R 777 /home/users/$nom/siteclient
			   ;;
			   2)
					useradd $nom --groups sitetech --home /home/users/$nom --password $pass
					ln -s /home/sftp/sitetech /home/users/$nom
					chown -R $nom:sitetech /home/users/$nom/sitetech
					chmod -R 777 /home/users/$nom/sitetech
			   ;;
			   3) 
					useradd $nom --groups centrale --home /home/users/$nom --password $pass
					ln -s /home/sftp/centrale /home/users/$nom
					chown -R $nom:centrale /home/users/$nom/centrale
					chmod -R 777 /home/users/$nom/centrale
			   ;;
			   4)
					useradd $nom --groups siteclient[,sitetech,centrale] --home /home/users/$nom --password $pass
					ln -s /home/sftp/siteclient /home/users/$nom
					chown -R $nom:siteclient /home/users/$nom/siteclient
					chmod -R 777 /home/users/$nom/siteclient
				 	ln -s /home/sftp/sitetech /home/users/$nom
					chown -R $nom:sitetech /home/users/$nom/sitetech
					chmod -R 777 /home/users/$nom/sitetech
					ln -s /home/sftp/centrale /home/users/$nom
					chown -R $nom:centrale /home/users/$nom/centrale
					chmod -R 777 /home/users/$nom/centrale
				;;
			esac
	fi

else

    echo "Les 2 mots de passe ne sont pas identiques"

fi[/code]

Si je met le case en commentaire alors le script ne donne pas d’erreur.
Je lance le script de la façon suivante :

ou

le script est bien présent dans le dossier où je l’exécute.

Merci d’avance du temps passé à m’aider.

Cd, bigbrownies

Salut,

C’est pas les crochets dans la ligne useradd $nom --groups siteclient[,sitetech,centrale] --home /home/users/$nom --password $pass
qui font planter ton script par hasard ? :wink:

A part ça, pour moi le reste devrait fonctionner.

Je vais essayer ça.

J’ai regarder le man de useradd et je suis allé trop vite. Je ne m’étais arrêté que sur une seule source pour la syntaxe du useradd et c’étais éronné.

On verra le retour du script, je tiens au courant.

Edit: sudo sh addusersftp.sh : not found.sh: 1: addusersftp.sh: #!/bin/sh : not found.sh: 2: addusersftp.sh: : not found.sh: 4: addusersftp.sh:

Pas de changement, malgrès la correction de l’appartenance aux groupes :

[code]#!/bin/sh

Script d’ajout d’un utilisateur avec saisi du nom, du mdp et du groupe

On demande la saisie d’un nom d’utilisateur et du mot de passe (2 fois)

echo -n "Nom d’utilisateur : "
read nom
echo "Mot de passe : "
read pass
echo "Mot de passe (le retour) : "
read pass2
echo "Groupe d’appartenance (siteclient : 1 / sitetech : 2 / centrale : 3 / tous: 4) : "
read groupe

On vérifie que les 2 mots de passe soient identiques

if test $pass = $pass2 ; then
# On vérifie qu’il n’existe pas déjà un autre utilisateur du même nom
if test -d /home/users/$nom ; then
echo "L’utilisateur existe deja"
else
# On crée les dossiers et on fixe les droits
mkdir /home/users/$nom
chown -R root:root /home/users/$nom
chmod -R 755 /home/users/$nom

			case $groupe in
			   1) 
					useradd $nom -G siteclient -d /home/users/$nom -p $pass
					ln -s /home/sftp/siteclient /home/users/$nom
					chown -R $nom:siteclient /home/users/$nom/siteclient
					chmod -R 777 /home/users/$nom/siteclient
			   ;;
			   2)
					useradd $nom -G sitetech -d /home/users/$nom -p $pass
					ln -s /home/sftp/sitetech /home/users/$nom
					chown -R $nom:sitetech /home/users/$nom/sitetech
					chmod -R 777 /home/users/$nom/sitetech
			   ;;
			   3) 
					useradd $nom -G centrale -d /home/users/$nom -p $pass
					ln -s /home/sftp/centrale /home/users/$nom
					chown -R $nom:centrale /home/users/$nom/centrale
					chmod -R 777 /home/users/$nom/centrale
			   ;;
			   4)
					useradd $nom -G siteclient,sitetech,centrale -d /home/users/$nom -p $pass
					ln -s /home/sftp/siteclient /home/users/$nom
					chown -R $nom:siteclient /home/users/$nom/siteclient
					chmod -R 777 /home/users/$nom/siteclient
				 	ln -s /home/sftp/sitetech /home/users/$nom
					chown -R $nom:sitetech /home/users/$nom/sitetech
					chmod -R 777 /home/users/$nom/sitetech
					ln -s /home/sftp/centrale /home/users/$nom
					chown -R $nom:centrale /home/users/$nom/centrale
					chmod -R 777 /home/users/$nom/centrale
				;;
			esac
	fi

else

    echo "Les 2 mots de passe ne sont pas identiques"

fi
[/code]

A savoir que dans un editeur avec couleurs, le chown n’apparait pas commune commande connue comme chmod ou ln. Je ne sais pas si c’est vraiment un problème en soi.

Cd,

Ce script étant sans risque, j’ai testé sa deuxième version (celle sans les crochets) sur une de mes bécanes ( Debian 7.8 ) :

1°) j’ai crée 3 nouveaux groupes siteclient, sitetech et centrale : root@host:/tmp# addgroup siteclient Ajout du groupe « siteclient » (GID 1001)... Fait. root@host:/tmp# addgroup sitetech Ajout du groupe « sitetech » (GID 1002)... Fait. root@host:/tmp# addgroup centrale Ajout du groupe « centrale » (GID 1003)... Fait. root@host:/tmp#

2°) j’ai crée l’arborescence nécessaire : [code]root@host:/tmp# mkdir -p /home/sftp/{siteclient,sitetech,centrale}
root@host:/tmp# tree /home/sftp/
/home/sftp/
├── centrale
├── siteclient
└── sitetech

3 directories, 0 files
root@host:/tmp# mkdir /home/users
root@host:/tmp# tree /home/users/
/home/users/

0 directories, 0 files
root@host:/tmp#[/code]

3°) j’ai lancé ton script : [code]root@host:/tmp# ./test.sh
Nom d’utilisateur : toto
Mot de passe :
toto
Mot de passe (le retour) :
toto
Groupe d’appartenance (siteclient : 1 / sitetech : 2 / centrale : 3 / tous: 4) :
1
root@host:/tmp# ./test.sh
Nom d’utilisateur : tata
Mot de passe :
tata
Mot de passe (le retour) :
tata
Groupe d’appartenance (siteclient : 1 / sitetech : 2 / centrale : 3 / tous: 4) :
2
root@host:/tmp# ./test.sh
Nom d’utilisateur : titi
Mot de passe :
titi
Mot de passe (le retour) :
titi
Groupe d’appartenance (siteclient : 1 / sitetech : 2 / centrale : 3 / tous: 4) :
3
root@host:/tmp# ./test.sh
Nom d’utilisateur : tutu
Mot de passe :
tutu
Mot de passe (le retour) :
tutu
Groupe d’appartenance (siteclient : 1 / sitetech : 2 / centrale : 3 / tous: 4) :
4
root@host:/tmp# tree /home/sftp/
/home/sftp/
├── centrale
├── siteclient
└── sitetech

3 directories, 0 files
root@host:/tmp# tree /home/users/
/home/users/
├── tata
│ └── sitetech -> /home/sftp/sitetech
├── titi
│ └── centrale -> /home/sftp/centrale
├── toto
│ └── siteclient -> /home/sftp/siteclient
└── tutu
├── centrale -> /home/sftp/centrale
├── siteclient -> /home/sftp/siteclient
└── sitetech -> /home/sftp/sitetech

10 directories, 0 files
root@host:/tmp# id toto
uid=1001(toto) gid=1004(toto) groupes=1004(toto),1001(siteclient)
root@host:/tmp# id tata
uid=1002(tata) gid=1005(tata) groupes=1005(tata),1002(sitetech)
root@host:/tmp# id titi
uid=1003(titi) gid=1006(titi) groupes=1006(titi),1003(centrale)
root@host:/tmp# id tutu
uid=1004(tutu) gid=1007(tutu) groupes=1007(tutu),1001(siteclient),1002(sitetech),1003(centrale)
root@host:/tmp#[/code]
:arrow_right: Je ne sais pas s’il réalise exactement ce que tu souhaites faire, mais chez moi il fonctionne sans erreur !

[quote=“bigbrownies”]Je lance le script de la façon suivante :
Code:
sudo sh addusersftp.sh

ou
Code:
sh addusersftp.sh

le script est bien présent dans le dossier où je l’exécute.[/quote]
Et en mettant le [mono]./[/mono] devant le nom du script ?

Merci,

J’ai touché quelques trucs car mon arborescence a changé et ma création d’utilisateur aussi à travers mysecureshell.
Maintenant il fonctionne.

Par contre j’ai testé de faire un script pour la modif automatique toutes les 5min de mon fichier /etc/motd.
mon script est simple mais ne fonctionne pas.
Enfin, aucun message d’erreur et pourtant rien ne s’écrit dans /etc/motd.


#! /bin/sh
#Write on /etc/motd
echo "\033[0;34m

\033[1;34m-- \033[0;37mVersion : 0.2b
\033[2;34m-------- \033[0;37mServeur HTTP (apache2,php5)
\033[4;34m-------- \033[0;37mBassDD SQL(Mysql,Phpmyadmin)
\033[5;34m-------- \033[0;37mServeur SFTP (OpenSSH,Mysecureshell)

\033[0;34m-- \033[0;31m`date +"%A, %e %B %Y, %R"`

\033[0;34m-- \033[0;37mInfo :
\033[0;34m-------- \033[0;37mDistribution.......: \033[0;32m`uname -srmo`
\033[0;34m-------- \033[0;37mMemory.............: \033[0;32m$((`cat /proc/meminfo | grep MemFree | awk {'print $2'}`/1024))\033[0;37m MB (Free) / \033[0;32m$((`cat /proc/meminfo | grep MemTotal | awk {'$
\033[0;34m-------- \033[0;37mRunning Processes..: \033[0;32m`ps ax | wc -l | tr -d " "`

\033[0;34m-------- \033[0;37mIP Addresses.......: \033[0;32m`/sbin/ifconfig | /bin/grep "Bcast:" | /usr/bin/cut -d ":" -f 2 | /usr/bin/cut -d " " -f 1`\033[0;37m / \033[0;32m`wget -q -O - http://icanhaz$
\033[0;34m-------- \033[0;37mTemperature........: \033[0;32m`vcgencmd measure_temp | sed "s/temp=//"`
\033[0;34m

\033[0;34m-- \033[0;31mUptime........:
\033[0;34m-- \033[0;31mSSH Logins....: There are currently $log(c) users logged in.
\033[0m

" > /etc/motd

Le fichier /etc/motd a les droits 655 et mon script a les droits 777

Pour la mise à jour auto j’ai rajouter dans le fichier “crontab” : sudo crontab -e

*/5 * * * * sh /home/scripts/update_motd.sh

Voilà, je suis un peu perdu puisqu’il n’y a pas de message d’erreur.

[quote=“bigbrownies”]mon script est simple mais ne fonctionne pas.
Enfin, aucun message d’erreur et pourtant rien ne s’écrit dans /etc/motd.[/quote]
En l’état, il ne peut pas fonctionner car il manque au moins deux fins de ligne dans ton code :

Mauvais copié/collé ?

Tes premières erreurs me laissent penser que sh est lié à un mauvais interpréteur.
Que te renvoie la commande suivante ?