Come passare i parametri per funzionare in uno script bash?


14

Vorrei scrivere una funzione che posso chiamare da uno script con molte variabili diverse. Per alcuni motivi sto avendo molti problemi a farlo. Gli esempi che ho letto usano sempre solo una variabile globale, ma ciò non renderebbe il mio codice molto più leggibile per quanto posso vedere.

Esempio di utilizzo previsto:

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
result=$para1 + $para2
}

add $var1 $var2
add $var3 $var4
# end of the script

./myscript.sh 1 2 3 4

Ho provato a usare $1e simili nella funzione, ma poi ci vuole solo quello globale da cui è stato chiamato l'intero script. Fondamentalmente quello che sto cercando è qualcosa di simile $1, $2e così via, ma nel contesto locale di una funzione. Come sai, le funzioni funzionano in qualsiasi linguaggio corretto.


Usando $ 1 e $ 2 nel tuo esempio aggiungi la funzione "funziona". Prova echo $1e echo $2dentro.
Wieland,

Il mio esempio era orribilmente incompleto, l'ho aggiornato un sacco. Ora dopo non funzionerà più.
user181822

Sostituisci il tuo result = con result=$(($1 + $2))e aggiungi echo $resultdopo di esso e funziona correttamente, $ 1 e $ 2 sono gli argomenti delle tue funzioni.
Wieland,

Risposte:


18

Per chiamare una funzione con argomenti:

function_name "$arg1" "$arg2"

La funzione si riferisce agli argomenti passati per la loro posizione (non per nome), ovvero $ 1, $ 2 e così via. $ 0 è il nome dello script stesso.

Esempio:

#!/bin/bash

add() {
    result=$(($1 + $2))
    echo "Result is: $result"
}

add 1 2

Produzione

./script.sh
 Result is: 3

2
Ora capisco il mio errore. Avevo usato $ 0 e $ 1 nella funzione e $ 0 si sono risolti davvero con il nome dello script. L'ho scambiato per un parametro dello script e non per la funzione stessa. Grazie!
user181822

6

Nello script principale $ 1, $ 2, rappresenta le variabili come già sapete. Nei pedici o nelle funzioni, $ 1 e $ 2 rappresenteranno i parametri, passati alle funzioni, come variabili interne (locali) per questi pedici.

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
  #Note the $1 and $2 variables here are not the same of the
  #main script... 
  echo "The first argument to this function is $1"
  echo "The second argument to this function is $2"
  result=$(($1+$2))
  echo $result

}

add $var1 $var2
add $var3 $var4
# end of the script


./myscript.sh 1 2 3 4
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.