IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Lancer une commande SQL (postgreSQL) dans un shell


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut Lancer une commande SQL (postgreSQL) dans un shell
    Bonjour,

    j'ai besoin de faire ceci:

    1: Demader l'utilisateur et le mot de passe pour postgresql.
    2: Demander ou se trouve le fichier csv
    2: Me connecter à postgreSQL pour lancer ma commande.
    3: lancer mon insert into en passant 2 variables venant du fichie CVS (code_tiers_csv, libelle_groupe_csv) et pour toutes les lignes.

    voici ma commande SQL à lancer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT into rasso_grp_tiers (id_groupe, numbenef, idg_regie)
    SELECT group_tiers.id, tiers.numbenef, tiers.idg_regie 
    FROM rhabitue AS tiers, rgroupe_tiers AS group_tiers 
    WHERE tiers.numbenef IN (SELECT numbenef FROM rhabitue WHERE code_tiers = $code_tiers_csv) 
    AND tiers.idg_regie IN (SELECT idg_regie FROM rhabitue WHERE code_tiers = $code_tiers_csv) 
    AND group_tiers.id IN (SELECT id FROM rgroupe_tiers WHERE libelle = $libelle_groupe_csv AND idg_regie IN (SELECT idg_regie FROM rhabitue WHERE code_tiers = $code_tiers_csv));
    Comment faire?
    Merci pour votre aide.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    Le mot clé qu'il te manque est .

    Tu parles de shell, auquel cas "psql" te suffit pour passer en mode interactif dans une console.

    Mais j'ai l'impression que tu cherches à faire plus qu'utiliser un shell: un script. Dans ce cas, tu écriras un fichier du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    psql -U postgres -d database_name -c "INSERT into rasso_grp_tiers (id_groupe, numbenef, idg_regie)
    SELECT group_tiers.id, tiers.numbenef, tiers.idg_regie 
    FROM rhabitue AS tiers, rgroupe_tiers AS group_tiers 
    WHERE tiers.numbenef IN (SELECT numbenef FROM rhabitue WHERE code_tiers = $code_tiers_csv) 
    AND tiers.idg_regie IN (SELECT idg_regie FROM rhabitue WHERE code_tiers = $code_tiers_csv) 
    AND group_tiers.id IN (SELECT id FROM rgroupe_tiers WHERE libelle = $libelle_groupe_csv AND idg_regie IN (SELECT idg_regie FROM rhabitue WHERE code_tiers = $code_tiers_csv));"
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    j'ajouteai qu'il existe une variable d'env qui permet d'éviter les problèmatiques de passwords avec postgresql... PG_PASSWORD je crois....

  4. #4
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Bonjour,
    J'avance et tout fonctionne sauf la demande de mot de passe. Quelqu'un a-t-il une idée?

    Pur le moment j'ai ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    ##!/bin/sh
     
    echo -n "Entrez le nom d'utilisateur PostgreSQL "
    read UserPG
    echo -n "Mot de passe : "
    read PG_PASSWORD
    csv_DirectoryLocation=$(pwd)
    echo -n "Le fichier CSV se trouve-t-il dans le répertoire suivant? \n $csv_DirectoryLocation : [Oui] ou [Non]"
    read answer
    case $answer in
    	Oui|OUI|oui|O|o ) csv_location=$csv_DirectoryLocation/asso_tiers_groupe.csv
    		echo "Le fichier se trouve dans: $csv_location";;
    	Non|NON|non|N|n ) echo -n "Dans quel répertoire se trouve le fichier asso_tiers_regie.csv?"
    		read csv_EntryLocation
    		csv_location=$csv_EntryLocation/asso_tiers_groupe.csv
    		echo "Le fichier se trouve donc bien dans: $csv_location";;
    	*) "Au revoir...";;
    esac
     
    for ligne in `cat $csv_location`
    do
        echo $ligne
        code_tiers_csv=`echo $ligne | awk -F";" '{ print $1 }'`
        echo "code_tiers_csv = $code_tiers_csv"
        libelle_groupe_csv=`echo $ligne | awk -F";" '{ print $2 }'`
        echo "libelle_groupe_csv = $libelle_groupe_csv"
     
    psql lorrainng_db -U $UserPG << EOF
     
    INSERT into lorrainng_role.rasso_grp_tiers (id_groupe, numbenef, idg_regie)
     
    SELECT group_tiers.id, tiers.numbenef, tiers.idg_regie 
    FROM lorrainng_role.rhabitue AS tiers, lorrainng_role.rgroupe_tiers AS group_tiers 
    WHERE tiers.numbenef IN (SELECT numbenef FROM lorrainng_role.rhabitue WHERE code_tiers = '$code_tiers_csv') 
    AND tiers.idg_regie IN (SELECT idg_regie FROM lorrainng_role.rhabitue WHERE code_tiers = '$code_tiers_csv')
    AND group_tiers.id IN (SELECT id FROM lorrainng_role.rgroupe_tiers WHERE libelle = '$libelle_groupe_csv' AND idg_regie IN (SELECT idg_regie FROM lorrainng_role.rhabitue WHERE code_tiers = '$code_tiers_csv'));
    EOF
     
    done
     
    PG_PASSWORD=""

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vandman Voir le message
    Bonjour,
    J'avance et tout fonctionne sauf la demande de mot de passe. Quelqu'un a-t-il une idée?

    Pur le moment j'ai ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ##!/bin/sh
     
    echo -n "Entrez le nom d'utilisateur PostgreSQL "
    read UserPG
    echo -n "Mot de passe : "
    read PG_PASSWORD
    Salut

    Déjà c'est PGPASSWORD et non PG_PASSWORD, et en plus cette variable doit-être exportée pour que les processus fils (dont psql) puissent y accéder. Et tant qu'à faire t'as aussi PGUSER plus adéquat que UserPG...

    Citation Envoyé par vandman Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    case $answer in
    	Oui|OUI|oui|O|o )
    		csv_location=$csv_DirectoryLocation/asso_tiers_groupe.csv
    		echo "Le fichier se trouve dans: $csv_location";;
    	Non|NON|non|N|n )
    		echo -n "Dans quel répertoire se trouve le fichier asso_tiers_regie.csv?"
    		read csv_EntryLocation
    		csv_location=$csv_EntryLocation/asso_tiers_groupe.csv
    		echo "Le fichier se trouve dans: $csv_location";;
    	*) "Au revoir...";;
    esac
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    case $answer in
    	O|o|[oO][uU][iI] )
    		csv_location=$csv_DirectoryLocation/asso_tiers_groupe.csv;;
    	N|n|[nN][oO][nN] )
    		echo -n "Dans quel répertoire se trouve le fichier asso_tiers_regie.csv?"
    		read csv_EntryLocation
    		csv_location=$csv_EntryLocation/asso_tiers_groupe.csv;;
    	*)
    		echo "Au revoir..."
    		exit
    esac
    echo "Le fichier se trouve dans: $csv_location"

    Citation Envoyé par vandman Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for ligne in `cat $csv_location`
    do
    ...
    done
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cat $csv_location |while read ligne
    do
    ...
    done

    Citation Envoyé par vandman Voir le message
    Inutile vu qu'en fin de code le processus disparait ainsi que toutes ses variables. Mais si vraiment tu veux le faire alors passe par unset qui est fait pour ça
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    genres PG_PASSWORD="dfsdfsdfsdfs" dans l'environnement de l'utilisateur qui lance le script


    Pas dans le script..

    par exemple dans /home/tonuser/.profile ou /home/tonuser/.bshrc

    ne pas faire de read password

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par frp31 Voir le message
    genres PG_PASSWORD="dfsdfsdfsdfs" dans l'environnement de l'utilisateur qui lance le script , Pas dans le script..ne pas faire de read password
    Je ne sais pas trop si tu dis que ce n'est pas possible ou juste pas conseillé. Parce que techniquement c'est tout à fait possible de faire saisir PGPASSWORD dans un script, l'exporter puis appeler dans le même script psql qui prendra alors son contenu comme élément de travail. Et aucune collision avec l'environement perso puisque le script se déroule dans un environnement dédié.

    Mais effectivement c'est un peu abscons de faire saisir le mot de passe dans le script puis le stocker dans PGPASSWORD afin que psql ne le demande pas ensuite... alors qu'il est plus simple de ne pas s'embêter et laisser psql demander le mot de passe. Après-tout, que ce soit le script qui le demande ou psql, où est la différence ? Surtout si on saisi un mauvais mot de passe...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    non c'est tout à fait possible c'est juste que ça facilite les choses pour faire 2/3 sripts différents par exemple ou par fleme de tapper le password

  9. #9
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Réponse à Sve@r: c'est effectivement pas conseillé. Il est préconiser d'avoir un fichier .pgpass dans le home.

    Bonsoir à tous,

    Voila à quoi ressemble mon script. mais avant, quelques explication:

    Il s'agit d'un script que je donnerai au service informatique. Ils ne veullent pas se prendre la tête. Je les concidère donc comme des débutants et pose des questions simples.
    Login/mot de passe/hote du serveur postgre / port...

    Je fait en sorte que tout fonctionne sans qu'il n'ai rien à faire (sauf à lire mon script avant de le lancer)...

    Par contre je ne sais pas faire de lecture du clavier sans que ce qui est tapé soit affiché??? quelqu'un sait?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    #!/bin/sh
     
    #Demande de toutes les informaions dont nous avons besoin
    echo -n "Entrez le nom d'utilisateur PostgreSQL : "
    read UserPG
    #Vérification qu'un utilisateur à bien été renseigné pour la connection à PostgreSQL.
    case $UserPG in
    	"") echo "Pas d'utilisateur PostgreSQL définit\n"
    	    exit 1;; #exit shell script
     
    	* ) echo "Bienvenu $UserPG\n";;
    esac
     
    echo -n "Mot de passe : "
    read  PGpassword
    #Vérification qu'un mot de passe à bien été renseigné pour la connection à PostgreSQL.
    case $PGpassword in
    	"") echo "Pas de mot de passe PostgreSQL définit\n"
    	    exit 1;; #exit shell script
    	*) echo "Votre mot de passe à bien été pris en compte\n";;
    esac
     
    echo -n "Ip ou non du serveur PostgreSQL? "
    read PGhostname
    #Vérification qu'une IP ou un nom machine à bien été renseignée pour la connection à PostgreSQL.
    case $PGhostname in
    	"") echo "Pas d'hôte PostgreSQL définit\n"
    	    exit 1 ;; #exit shell script
    	*) echo "L'hôte ou l'IP PostgreSQL est $PGhostname\n";;
    esac
     
    echo -n "Port du serveur PostgreSQL? "
    read port_num
    #Vérification qu'un port à bien été renseigné pour la connection à PostgreSQL.
    case $port_num in
    	"") port_num=5432
    	    echo "Le port par défaut $port_num sera utilisé\n";;
     
    	*) echo "Le port par défaut $port_num sera utilisé\n";;
    esac
     
    echo -n "Nom de la base de donnée pour Appli? "
    read appli_db
    #Vérification qu'une base de donnée à bien été renseignée pour travailler dessus.
    case $appli_db in
    	"" ) echo "Pas de base de donnée PostgreSQL définit\n"
    	     exit 1;; #exit shell script
    	*) echo "L'hôte ou l'IP PostgreSQL est $PGhostname\n";;
    esac
    #Création du fichier permettant de s'identifier au serveur PostgreSQL.
    touch $HOME/.pgpass
    #Attribution des droits sur le fichier, pas d'autre choix que 0600, si non, ca ne fonctionne pas.
    chmod 0600 $HOME/.pgpass
    #Remplissage du fichier avec les bons parametres
    echo "$PGhostname:$port_num:$appli_db:$UserPG:$PGpassword" > $HOME/.pgpass
    #Récupération du répertoir courant
    csv_DirectoryLocation=$(pwd)
     
    echo -n "Le fichier CSV se trouve-t-il dans le répertoire suivant? \n $csv_DirectoryLocation : [Oui] ou [Non]"
    read answer
    #Chargement du chemin d'acces au fichier CSV dans la variable "csv_location". Le fichier CSV doit s'appeler "asso_tiers_groupe.csv" => Si non, fonctionne pas.
    case $answer in
    	Oui|OUI|oui|O|o ) csv_location=$csv_DirectoryLocation/asso_tiers_groupe.csv
    		echo "Le fichier se trouve dans: $csv_location";;
    	Non|NON|non|N|n ) echo -n "Dans quel répertoire se trouve le fichier asso_tiers_regie.csv?\n"
    		read csv_EntryLocation
    		csv_location=$csv_EntryLocation/asso_tiers_groupe.csv
    		echo "Le fichier se trouve donc bien dans: $csv_location\n";;
    	*) "Au revoir...\n"
    	   exit 1 ;;
    esac
    #Lecture du fichier CSV ligne par ligne.
    cat $csv_location |while read ligne
    do
        echo $ligne
        code_tiers_csv=`echo $ligne | awk -F";" '{ print $1 }'`
        echo "code_tiers_csv = $code_tiers_csv"
        libelle_groupe_csv=`echo $ligne | awk -F";" '{ print $2 }'`
        echo "libelle_groupe_csv = $libelle_groupe_csv"
    #Connection au serveur PostgreSQL
    # INSERT into = Insertion des données dans la bonne table.
    # SELECT = selectionne les données à intégrer.
    psql -h $PGhostname -p $port_num $appli_db -U $UserPG << EOF
     
    INSERT into lorrainng_role.rasso_grp_tiers (id_groupe, numbenef, idg_regie)
     
    SELECT group_tiers.id, tiers.numbenef, tiers.idg_regie 
    FROM lorrainng_role.rhabitue AS tiers, lorrainng_role.rgroupe_tiers AS group_tiers 
    WHERE tiers.numbenef IN (SELECT numbenef FROM lorrainng_role.rhabitue WHERE code_tiers = '$code_tiers_csv' AND numbenef_ref='0') 
    AND tiers.idg_regie IN (SELECT idg_regie FROM lorrainng_role.rhabitue WHERE code_tiers = '$code_tiers_csv')
    AND group_tiers.id IN (SELECT id FROM lorrainng_role.rgroupe_tiers WHERE libelle = '$libelle_groupe_csv' AND idg_regie IN (SELECT idg_regie FROM lorrainng_role.rhabitue WHERE code_tiers = '$code_tiers_csv' AND numbenef_ref='0'));
    EOF
     
    done
     
    #Efface le mot de passe dans la variable et le fichier.
    PGpassword=""
    rm $HOME/.pgpass

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vandman Voir le message
    Il est préconiser d'avoir un fichier .pgpass dans le home.
    Oui, en utilisation quotidienne. Mais si tu dois, dans ton script, créer .pgpass puis l'effacer en fin de script, déjà tu empiêtes sur les choix de l'utilisateur qui appelle ton script (peut-être que lui, plus averti, aurait envie de garder son .pgpass) et d'autre part c'est quand-même plus simple de passer par PGPASSWORD

    Citation Envoyé par vandman Voir le message
    Par contre je ne sais pas faire de lecture du clavier sans que ce qui est tapé soit affiché??? quelqu'un sait?
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo -n "Mot de passe"
    stty -echo
    read PGpassword
    stty echo

    Citation Envoyé par vandman Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    case $UserPG in
    	"") echo "Pas d'utilisateur PostgreSQL définit\n"
    	    exit 1;; #exit shell script
     
    	* ) echo "Bienvenu $UserPG\n";;
    esac
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if test -z "$UserPG"; then
    	echo "Pas d'utilisateur PostgreSQL définit\n"
    	exit 1
    fi
    echo "Bienvenu $UserPG\n"

    Citation Envoyé par vandman Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    case $port_num in
    	"") port_num=5432
    	    echo "Le port par défaut $port_num sera utilisé\n";;
     
    	*) echo "Le port par défaut $port_num sera utilisé\n";;
    esac
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    port_num=${port_num:-5432}
    echo "Le port par défaut $port_num sera utilisé\n"

    Citation Envoyé par vandman Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #Création du fichier permettant de s'identifier au serveur PostgreSQL.
    touch $HOME/.pgpass
    Inutile vu qu'il est créé juste en dessous par redirection

    Citation Envoyé par vandman Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	*) "Au revoir...\n"
    	   exit 1 ;;
    Mouais, si tu veux. Pourtant j'ai déjà fait une remarque à ce sujet !!!

    Citation Envoyé par vandman Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #Efface le mot de passe dans la variable et le fichier.
    PGpassword=""
    rm $HOME/.pgpass
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #Efface le mot de passe dans la variable et le fichier.
    unset PGpassword
    rm -f $HOME/.pgpass

    Citation Envoyé par vandman Voir le message
    Je les considère donc comme des débutants et pose des questions simples.
    Login/mot de passe/hote du serveur postgre / port...

    Je fait en sorte que tout fonctionne sans qu'il n'ai rien à faire (sauf à lire mon script avant de le lancer)...
    Et les infos comme hostname, port, bdd et user sont à ce point fluctuants qu'il faut les demander à chaque fois ???
    Admettons. Dans ce cas, tu ne voudrais pas, au lieu de poser des questions qui oblige celui qui utilise ton script à être présent pour y répondre, faire en sorte qu'on puisse passer l'un ou l'autre de ces éléments à ton script via les options comme on a l'habitude sur les outils Unix ? Ce qui permettrait de placer ton script dans un automate genre cron...

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    while getopts :u:x:h:p:b: opt
    do
    	case $opt in
    		u)	PGuser="$OPARG";;
    		x)	PGpassword="$OPTARG";;
    		h)	PGhostname="$OPTARG" ;;
    		p)	PGport="$OPTARG" ;;
    		b)	PGbdd="$OPTARG" ;;
    		*)
    			echo "Usage: `basename $0` [-h hostname] [-p port] -u user -x password -b bdd"
    			exit 1
    	esac
    done
     
    # Décalage des paramètres pour placer le premier argument non-optionnel en "$1"
    shift $(($OPTIND1))
     
    # Vérifiation paramètres
    if test -z "$PGuser"; then
    	echo "Pas d'utilisateur PostgreSQL définit\n"
    	exit 1
    fi
     
    if test -z "$PGpassword"; then
    	echo "Pas de mot de passe définit\n"
    	exit 1
    fi
     
    PGhostname=${PGhostname:-localhost}
    PGport=${PGport:-5432}
     
    # Travail
    psql ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par vandman Voir le message
    Par contre je ne sais pas faire de lecture du clavier sans que ce qui est tapé soit affiché??? quelqu'un sait?
    Non. Je ne sais pas... mais "man" est mon ami!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    man bash
     
           read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt]  [-t  timeout]
           [-u fd] [name ...]
                  One line is read from the standard input
    ...
                  -s     Silent mode.  If input is coming from a terminal, characters are not echoed.
    et, en plus, coup de bol, je maîtrise suffisamment l'angliche pour comprendre ce qu'il dit...

Discussions similaires

  1. [XL-2010] Intégrer une commande SQL (complexe) dans une macro
    Par urbandot dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 14/11/2011, 10h50
  2. Lancer une commande Perl dans un script Shell
    Par Ryo_san dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 02/06/2008, 11h01
  3. Réponses: 7
    Dernier message: 06/01/2007, 20h16
  4. Shell - Impossible de lancer une commande
    Par marocleverness dans le forum Linux
    Réponses: 2
    Dernier message: 05/06/2006, 10h14
  5. lancer une commande dos dans une page ASP
    Par noznoz78 dans le forum ASP
    Réponses: 4
    Dernier message: 13/02/2006, 19h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo