Entrée d'un valeur au clavier dans un script

Fermé
noaho - 14 mars 2009 à 10:24
 noaho1143 - 14 mars 2009 à 17:25
Bonjour,
nouveau sur ce forum, je souhaite entrer une valeur - le nom d'un dossier - dans un script Shell (BASH) destiné à créer des dossiers dans divers volumes, locaux et distants. Comment provoquer une entrée à l'invite (comme dans ssh). Je n'ai pas trouvé en tapant des mots clefs. Merci à tous.
PS : Il s'agit d'histoire de redirections < et de pipe mais je ne trouve pas la synthaxe.
% Entrer le nom du dossier : (ici, l'utilisateur entre le nom) NomDe Dossier
% Créer le dossier etc....

Plate forme; Mac OS X Shell Bash
A voir également:

2 réponses

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
14 mars 2009 à 10:51
Salut,
[tmpfs]$ ls
foo.sh*

[tmpfs]$ cat foo.sh
#! /bin/sh

#set -xv

echo "Entrez le nom du répertoire à créer : "
read nom
echo "Création du répertoire $nom"
mkdir "$nom" && echo "Répertoire $nom créé..."

[tmpfs]$ ./foo.sh
Entrez le nom du répertoire à créer :
Nouveau_repertoire
Création du répertoire Nouveau_repertoire
Répertoire Nouveau_repertoire créé...

[tmpfs]$ ls -1
foo.sh*
Nouveau_repertoire/

[tmpfs]$ ./foo.sh
Entrez le nom du répertoire à créer :
Mon Dossier
Création du répertoire Mon Dossier
Répertoire Mon Dossier créé...

[tmpfs]$ ls -1
foo.sh*
Mon Dossier/
Nouveau_repertoire/
[tmpfs]$
;-))
0
Merci.
voila ce que ça donne et ça marche (c'est mon premier :=))

J'ai deux questions:
- que veut dire && dans : "$nom" && echo "Répertoire $nom créé..."
- ou le mettre chez moi, dans : cp -R mt-nomdedossier-4.23 ${webserver}CGI-Executables/$dossiermt
- et virer :
echo "Install MT locale"
echo "Dossier [$dossiermt] dans CGI-Executables"
echo "Dossier [$nom] dans WebServer/Documents"

Ensuite je veux lancer le même ( localmt) sur un serveur avec ssh ip
Mais le script est sur le local
Si je copie sur le distant, je dois ressaisir.
Comment pour faire propre garder $nom dans la nouvelle connexion ?
Si la réponse est aussi claire, j'ai passé un bon WE et je gagne une heure par install


#! /bin/bash
######################################################
# localmt
######################################################
echo "Entrez le nom du repertoire à creer: "
read nom
echo "Création du répertoire $nom"
######################################################
# Mise en place des variables - dossier sera calculé
######################################################
version="4.23"
webserver=/Volumes/Noaho/Library/WebServer/
dossiermt=mt${nom}-${version}
######################################################
# Explications au terminal
######################################################
echo "Install MT locale"
echo "Dossier [$dossiermt] dans CGI-Executables"
echo "Dossier [$nom] dans WebServer/Documents"
######################################################
# Création dans Documents
######################################################
# cd ${webserver}Documents
cd ${webserver}
cp -R mt-static-4.23 ${webserver}Documents/$nom
######################################################
# Création dans CGI-Executables
######################################################
cd ${webserver}
cp -R mt-nomdedossier-4.23 ${webserver}CGI-Executables/$dossiermt
0
#! /bin/bash
######################################################
# localmt
######################################################
echo "Entrez le nom du repertoire à créer: "
read nom
echo "Création du répertoire $nom"
######################################################
# Mise en place des variables - dossier sera calculé
######################################################
version="4.23"
webserver=/Volumes/Noaho/Library/WebServer/
dossiermt=mt${nom}-${version}
######################################################
# Explications au terminal
######################################################
echo "Install MT locale"
######################################################
# Création dans Documents
######################################################
# cd ${webserver}Documents
cd ${webserver}
cp -R mt-static-4.23 ${webserver}Documents/$nom && echo "Dossier [$nom] crée dans WebServer/Documents..."
######################################################
# Création dans CGI-Executables
######################################################
cd ${webserver}
cp -R mt-nomdedossier-4.23 ${webserver}CGI-Executables/$dossiermt && echo "Dossier [$dossiermt] crée dans CGI-Executables..."
0
#! /bin/bash
######################################################
# fullmt
# Alain Xicluna le 14-03-08
######################################################

# J'entre le nom de dossier
echo "Entrez le nom du repertoire à créer: "
read nom
echo "Création du répertoire $nom"

# J'exécute en local (sans la saisie précédente)
./localmt
# Je me connecte sur le serveur
ssh 85.31.196.xx
# Même combat ou presque à part les chemins
./localmt

Je ne veux pas faire deux fois la saisie, pas par flemme pamis pour éviter l'erreur de frappe.:=)
Merci par avance
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
14 mars 2009 à 16:33
que veut dire && dans : "$nom" && echo "Répertoire $nom créé..."
En fait c'est une condition qui teste le code retour de la commande qui précède (dans ton cas la création du répertoire) et qui en fonction de la valeur de ce code de retour (0 pour vrai ou 1 pour faux) exécute la commande qui suit (le contraire de && est ||).

D'ailleurs en parlant de création de répertoire, je ne vois nulle part dans ton script la création du répertoire issu de la question de départ ?? ;-\

Après pour la question de "ssh", il faudrait savoir comment tu te connectes sur le serveur (password ou clé) ?
Pour pouvoir exporter la variable représentant le nom du répertoire, il faudra sûrement passer par la commande "expect" (enfin je pense et c'est la seule solution qui me vienne à l'esprit)...

A suivre... ;-))
0
Merci, je vais essayer de comprendre demain
J'ai fini comme ça pour les deux dossiers :

######################################################
# Création dans CGI-Executables
######################################################
cd ${webserver}
cp -R mt-nomdedossier-4.23 ${webserver}CGI-Executables/$dossiermt
echo "Dossier [$dossiermt] crée dans CGI-Executables..."

Pour le ssh, c'est un mot de passe demandé, celui de l'admin serveur (Un XServe Apple qui est à moi, je peux faire ce que je veux :=))
Mias il ne veux rien savoir pour executer ./servermt
Servermt fonctionne sur le distant (avec Apple Remote Acces, je prends le contrôle et le lance, pas de pb)
Mais il ne fait rien après un lancement ssh comme ça :

ordinateur-de-alain-xicluna:~ alainxicluna$ ssh 85.31.196.29
Password:
Last login: Sat Mar 14 15:22:02 2009 from lns-bzn-37-82-2
Welcome to Darwin!
conexion-server:~ alainxicluna$ PATH=/Library/WebServer:$PATH:
conexion-server:~ alainxicluna$ $PATH
-bash: /Library/WebServer:/bin:/sbin:/usr/bin:/usr/sbin:: No such file or directory
conexion-server:~ alainxicluna$ ./servermt
-bash: ./servermt: No such file or directory

J'ai mis ./servermt dans /WebServer...bien sur
Autre chose, comme ajouter au PATH en permanent.
Après chaque cession, je dois le refaire.
Mais en gros, mes problèmes sont résolus, le reste c'est pour progresser.

Merci pour l'initiation
0