2010-05-30 4 views
3

Je l'extrait de code suivant dans un script bash écrit dans Solaris 10:Comment définir une valeur par défaut dans un extrait IF?

printf "port(389)=" 
read PORT 
    if [[ $PORT == "" ]]; then 
    PORT=389 
    fi 

Ce que je suis en train d'obtenir que si l'utilisateur touche la touche entrée, le port doit être réglé sur 389. L'extrait ci-dessus ne semble pas fonctionner.

Des suggestions?

+0

Pouvez-vous être plus précis que « ne fonctionne pas »? –

+0

Fonctionne bien ici. Tu fais quelque chose d'autre qui ne va pas. –

Répondre

0

Ce n'est pas exactement ce que vous avez demandé, mais Solaris a un ensemble d'utilitaires pour ce genre de choses.

PORT=`/usr/bin/ckint -d 389 -p 'port(389)=' -h 'Enter a port number'` 

Découvrez l'autre/usr/bin/ck * utilitaires pour inviter l'utilisateur pour d'autres types de données, y compris des choses comme des fichiers ou des noms d'utilisateur.

+0

C'est en fait ce que j'essayais d'obtenir. Merveilleux, merci. – kuti

1

Cela demande à l'utilisateur pour l'entrée et si vous appuyez sur Entrée par lui-même, définit la valeur de port à un défaut de « 389 »:

read -rp "port(389)=" port 
port="${port:-389}" 
+0

Je ne pouvais pas coller le code du trou ici car il fait partie d'un script plus grand qui traite de la création de certificats pour un serveur d'annuaire. Mais j'utilise "certutil" pour Directory Server pour accepter les entrées de l'utilisateur basé sur des questions comme "Organisation", "Ville", "Pays", etc. Le port est l'un d'entre eux. Utilisé de la manière suivante: $ DSBIN/certutil -d $ BASE_DIR/'nomhôte'/alias -P slapd- -x -S -n $ NAME -s cn = $ CN, cn = $ PORT, st = $ ÉTAT Avec mon instruction if d'origine, le système lance une erreur de "mauvaise base de données" et cela se produit si une ou plusieurs entrées sont invalides – kuti

+0

Et votre extrait fonctionne sans problème pour une raison quelconque ... – kuti

+0

En réalité, mon extrait et votre extrait de code fonctionnent essentiellement de la même manière (à l'exception du mien qui a l'option '-r' pour' read'). Vous pourriez essayer de mettre un 'set -x' avant et un' set + x' après la section de votre code qui cause des problèmes. Cela entraînera l'affichage d'une trace qui montre entre autres des expansions variables. Cela pourrait aider à localiser le problème. –

0

Si vous passez -e-read vous pouvez ensuite utiliser -i à spécifiez une valeur initiale pour l'invite.

+0

L'option '-i' de' read' est nouvelle dans Bash 4. –

0

Si l'utilisateur entre rien alors $PORT est remplacé par rien - la convention ancienne pour faire ce travail avec le shell Bourne original est:

if [ "x$PORT" == "x" ]; then 

Bien que des coquilles plus modernes (c.-à-bash réelle, mais pas Solaris 10/bin/sh qui est une coquille ancienne Bourne) devrait être en mesure de traiter:

if [[ "$PORT" == "" ]]; then 

ou même

if [[ -z "$PORT" ]]; then 
0

Une autre façon avec juste la coquille - substitution de paramètres essayer:

read port 
port=${port:-389} 
Questions connexes