2013-05-01 13 views
15

Ho uno script che ha diversi file di input, generalmente questi sono i valori di default memorizzati in un posto standard e richiamati dallo script.argomenti della riga di comando bash che sostituiscono i valori predefiniti per le variabili

Tuttavia a volte è necessario eseguirlo con ingressi modificati.

Nella sceneggiatura attualmente dico 3 variabili $ A $ B e $ C, ora voglio eseguirlo con un non predefinito $ B, domani potrei voler eseguirlo con un non predefinito $ A e $ B .

ho avuto uno sguardo intorno a come analizzare gli argomenti della riga di comando: How do I parse command line arguments in Bash?

Ma io non sono sicuro come trattare con avere qualche insieme da riga di comando aruguments parte del tempo?

Non ho abbastanza rappresentante di rispondere alla mia domanda però ho una soluzione:

https://stackoverflow.com/a/4610469/2339623

#!/bin/bash 
a=input1 
b=input2 
c=input3 
while getopts "a:b:c:" flag 
do 
    case $flag in 
     a) a=$OPTARG;; 
     b) b=$OPTARG;; 
     c) c=$OPTARG;; 
    esac 
done 

Scuse Io, ovviamente, non ha cercato come accuratamente come pensavo ...

+4

È possibile utilizzare 'getopts' per questo scopo. Ci sono molti tutorial, qualcosa come http://aplawrence.com/Unix/getopts.html può essere utile per iniziare. – fedorqui

+0

Grazie, ho visto questo sulle domande che ho collegato. Mi chiedevo se esiste un modo standard per fare in modo che gli argomenti dei comandi sovrascrivano le variabili. Ad esempio, quando si definiscono le funzioni in python è possibile impostare un valore predefinito. Posso vedere che con un controllo if posso sostituire il valore predefinito con l'argomento della riga di comando, ma non ero sicuro che esistesse un modo standard per farlo? – Lanrest

risposta

6

Invece di utilizzare gli argomenti della riga di comando per sovrascrivere i valori predefiniti, è anche possibile impostare le variabili all'esterno dello script. Ad esempio, il seguente script può essere richiamato con foo=54 /tmp/foobar o bar=/var/tmp /tmp/foobar:

#! /bin/bash 
: ${foo:=42} 
: ${bar:=/tmp} 
echo "foo=$foo bar=$bar" 
+0

Ho pensato a questo, tuttavia la sceneggiatura che sto modificando è per le persone con meno familiarità di me. Voglio renderlo il più semplice possibile, e penso che gli argomenti della riga di comando siano qualcosa con cui sono più familiari. – Lanrest

35

si può fare in questo modo, vedere Shell Parameter Expansion nella pagina man di bash

#! /bin/bash 

value=${1:-the default value} 
echo value=$value 

Sulla riga di comando:

$ ./myscript.sh 
value=the default value 
$ ./myscript.sh foobar 
value=foobar 
Problemi correlati