2015-11-17 6 views
0

Je dois modifier un de mes scripts. Jusqu'à présent, il a deux paramètres obligatoires qui pointent vers la version de mise à jour et base de données où cette mise à jour va être appliquéeparamètres et commutateurs dans le script bash

./script.sh version db_name 

Maintenant, je veux ajouter deux nouveaux paramètres facultatifs, en fait, je devrais l'appeler passe. Ces commutateurs l'étendent à: 1. avant l'installation arrêtez (ou non) mon serveur Web 2. installez également quelques nouveaux fichiers sur le système de fichiers Les deux valeurs retournent la valeur booléenne. Tous les détails sont à l'intérieur du script. donc je pense quelque chose comme:

./script.sh version db_name -stopweb -copyfiles 

J'ai compris getopts est commande appropriée. Le problème est de savoir comment «joindre» les paramètres (obligatoires) et les commutateurs (facultatifs) ensemble. Je ne peux pas l'obtenir :( Pourriez-vous me donner quelques conseils s'il vous plaît

+1

vous pouvez jeter un oeil ici: http://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash –

+0

à droite, c'est une solution. Mais mon script a été utilisé par plusieurs personnes (et probablement appelé par quelques autres scripts) donc il serait bon de garder les deux premiers paramètres inchangés. Il est donc important pour moi de conserver les deux premiers paramètres tels qu'ils sont et d'ajouter éventuellement deux nouveaux commutateurs. – user3863616

+0

alors regarde ma réponse qui te permet de faire ça ... –

Répondre

0

Vous devriez envisager d'utiliser getopts Voici un échantillon de ce que je l'utilise pour l'analyse des options dans mes scripts bash:..

TEMP=$(getopt -o dp:v --long dev,publish:,verbose -- "[email protected]") 

# Note the quotes around '$TEMP': they are essential! 
eval set -- "$TEMP" 

#default values 
DEV=0 
VERBOSE= 
while true; do 
    case "$1" in 
     -d | --dev) DEV=1; shift ;; 
     -p | --publish) PUBLISH="$2" ; shift 2;; 
     -v | --verbose) VERBOSE="-v" ; shift ;; 
     --) if [ -n "$2" ] 
      then 
       ARGUMENT1=$2 
       if [ -n "$3" ] 
       then 
        ARGUMENT2=$3 
        if [ -n "$4" ] 
        then 
         shift 3 
         echo "Unexpected options: \"[email protected]\" . exiting." 
         exit 1; 
        fi 
       fi 
      fi 
      shift 2; break;; 
     *) break ;; 
    esac 
done 

# you can add some checks here that ARGUMENT1 and ARGUMENT2 were effectively set, if they are mandatory 

quelques caractéristiques:

  • utiliser les options courtes et longues
  • certaines options ont besoin d'un argument
  • utiliser une option argu ments (un dans ce cas), qui ne commence pas avec -

NOTE: pour getopts pour pouvoir distinguer -dv étant deux options courtes et --dev étant une option longue; toutes vos longues options devraient commencer par deux traits d'union.

+0

Ceci utilise 'getopt (1)' et non 'getopts' (ce sont des choses différentes) et alors que' getopt (1) 'supporte de longues options, de nombreuses anciennes versions de' getopt' sont brisées avec des options contenant des espaces et/ou blanc. –

+0

@ user3863616: Si ma réponse vous a aidé, veuillez envisager de l'accepter. –