Scrivo uno script in cui è necessario utilizzare l'output di un file test in più posizioni, incluso all'interno di una funzione shell. Vorrei assegnare il file esistenza a una variabile di shell, come questo: file_exists=[ -f $myfile ]
.Assegnazione del risultato di "test" a una variabile
Giusto per fare in modo che ho i miei basi coperte, comincio toccando un file, e testare la sua esistenza:
file='a'
touch $file
if [ -f $file ]
then
echo "1 -- '$file' exists"
fi
uscita:
1 -- 'a' exists
Il file è stato creato con successo - Nessuna sorpresa, ma almeno so che non ho a che fare con problemi di permessi o altro.
Avanti I test per assicurarsi che io possa memorizzare un'espressione booleana in una variabile:
mytest=/bin/true
if $mytest
then
echo "2 -- \$mytest is true"
fi
uscita:
2 -- $mytest is true
Così ho gli elementi fondamentali - espressioni condizionali dovrebbe emettono lo stesso output /bin/true
o /bin/false
... ma non è quello che sto vedendo:
mytest=[ -f $file ]
if $mytest
then
echo "3 -- \$mytest is true [expect true]"
else
echo "3 -- \$mytest is false [expect true]"
fi
Questo non riesce con il seguente errore:
-f: command not found
ottengo lo stesso messaggio di errore se io uso test -f $file
piuttosto che [ -f $file ]
.
Se metto uno spazio davanti alla [
, l'errore va via ...
mytest= [ -f $file ]
if $mytest
then
echo "4 -- \$mytest is true [expect true]"
else
echo "4 -- \$mytest is false [expect true]"
fi
L'uscita sembra essere corretta:
4 -- $mytest is true [expect true]
... ma se rimuovo il file, che dovrebbe ottenere il risultato opposto:
rm $file
mytest= [ -f $file ]
if $mytest
then
echo "5 -- \$mytest is true [expect false]"
else
echo "5 -- \$mytest is false [expect false]"
fi
... e non fare:
012.5 -- $mytest is true [expect false]
Per essere onesti, mi aspettavo lo spazio di pasticciare con il valore di verità:
mytest= /bin/false
if $mytest
then
echo "6 -- \$mytest is true [expect false]"
else
echo "6 -- \$mytest is false [expect false]"
fi
Uscite:
6 -- $mytest is true [expect false]
Allora, come faccio a memorizzare l'uscita dal test
incorporato in una variabile di shell?
'mytest =/bin/true' questo sta memorizzando la stringa ** **'/bin/true 'nella variabile' $ mytest'. –