Domanda

Questo è uno script di shell korn grezzo che qualcun altro ha scritto. Non so molto sull'uso della sintassi della shell e non sono nemmeno sicuro che ciò sia possibile.

Esiste un modo per eseguire questo file e richiedere la data in modo da non dover accedere manualmente allo script e cambiarlo ogni volta?

Ad esempio, voglio sostituire il " 1/12/09 " con una variabile prelevata dal prompt dell'utente.

#!/bin/ksh
./clear_old
./rooms_xls.pl 1/12/09
cd doors
./doors_xls.pl 1/12/09
È stato utile?

Soluzione

Se vuoi essere richiesto (invece di passare la data come parametro), usa la seguente logica (o qualcosa di simile):

date=
while [ -z $date ]
do
    echo -n 'Date? '
    read date
done

Quel ciclo continuerà a richiedere la data fino a quando l'utente inserisce qualcosa (qualsiasi cosa) diverso da un semplice RITORNO.

Se desideri aggiungere una semplice convalida e stai utilizzando una versione di KSH è KSH93 o meglio, fai qualcosa del genere:

date=
while [ -z $date ]
do
    echo -n 'Date? '
    read date
    if [[ $date =~ ^[0-9]{1,2}/[0-9]{1,2}/[0-9]{1,4}$ ]]
    then
        break
    fi
    date=
done

Vedi la pagina man di ksh93 per maggiori informazioni.

Altri suggerimenti

In generale da una shell script è possibile accedere agli argomenti della riga di comando come:

./room_xls.pl $1
, $1, ... $N

Quindi potresti sostituire la data hardcoded come:

./myscript 1/12/09

Ed eseguilo come

<*>

$ 1 è il primo argomento della riga di comando. Questo arriva fino a $ 9. Dai un'occhiata a questo tutorial per una sintassi ksh più semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top