2015-03-13 19 views
5

Vorrei scrivere uno script che verifichi se una copia è riuscita o meno. Ecco quello che ho:Script della shell Unix - Verifica della riuscita di una copia

#!/bin/sh 
cp home/testing/present.txt home/testing/future.txt 
    echo "Copy Code: $? - Successful" 
if [ $? != 0 ]; then 
    echo "Copy Code: $? - Unsuccessful" 
fi 

Il "se" non è in fase di inizializzazione dichiarazione. Come può risolvere questo? Grazie per il tuo tempo.

risposta

18

$? si riferisce all'ultimo comando:

#!/bin/sh 
cp home/testing/present.txt home/testing/future.txt 
    echo "Copy Code: $? - Successful" # last command: cp 
if [ $? != 0 ]; then     # last command: echo 
    echo "Copy Code: $? - Unsuccessful" # last command: [ 
fi 

Se si vuole lavorare più volte con lo status di un comando specifico, basta salvare il risultato in un'altra variabile:

#!/bin/sh 
cp home/testing/present.txt home/testing/future.txt 
status=$? 
echo "Copy Code: $status - Successful" 
if [ $status != 0 ]; then 
    echo "Copy Code: $status - Unsuccessful" 
fi 

Tuttavia, un approccio migliore è semplicemente testare il comando cp in primo luogo:

if cp home/testing/present.txt home/testing/future.txt 
then 
    echo "Success" 
else 
    echo "Failure, exit status $?" 
fi 
+0

Incredibilmente semplice ed elegante. Grazie per la tua soluzione. –

4

semplificare, semplificare, semplificare:

#!/bin/sh 
if cp home/testing/present.txt home/testing/future.txt; then 
    echo "Copy Code: $? - Successful" 
else 
    echo "Copy Code: $? - Unsuccessful" 
fi 

Se si desidera verificare se un comando ha esito positivo, verificare lo stato con la dichiarazione if.

Ricordare che $? è lo stato di uscita dell'ultimo comando eseguito. È come una variabile globale estremamente volatile (in C o C++). Nel codice, si esegue echo che elimina il valore in $? dal comando cp. Se hai bisogno di catturare in modo esplicito $?, farlo in modo esplicito e subito dopo il comando il cui stato è necessario acquisire:

cp home/testing/present.txt home/testing/future.txt 
cp_status=$? 

e quindi verificare $cp_status nel codice seguente.

+0

Nelle parole del grande Ric Flair: "WOOOOOOOOOOOO" –