Jako součást tohoto skriptu musím být schopen zkontrolovat, zda první uvedený argument odpovídá prvnímu slovu souboru. Pokud ano, ukončete s chybovou zprávou; pokud ne, připojte argumenty k souboru. Rozumím, jak napsat if
příkaz, ale ne jak používat grep
v rámci skriptu. Rozumím tomu grep
bude vypadat nějak takto
grep ^$1 schemas.txt
Mám pocit, že by to mělo být mnohem jednodušší, než to dělám.
Zobrazuje se mi chyba „příliš mnoho argumentů“ v if
prohlášení. Zbavil jsem se mezery mezi grep -q
a poté došlo k očekávané chybě binárního operátoru.
if [ grep -q ^$1 schemas.txt ]
then
echo "Schema already exists. Please try again"
exit 1
else
echo "[email protected]" >> schemas.txt
fi
Přijatá odpověď:
grep
vrátí jiný výstupní kód, pokud něco našel (nulu) vs. pokud nic nenašel (nenulové). V if
nulový výstupní kód je mapován na hodnotu „true“ a nenulový výstupní kód je mapován na hodnotu false. Kromě toho má grep -q
argument, aby se nevypsal odpovídající text (ale vrátil pouze kód stavu ukončení)
Takže můžete použít grep takto:
if grep -q PATTERN file.txt; then
echo found
else
echo not found
fi
Rychlá poznámka, když uděláte něco jako if [ -z "$var" ]…
, ukázalo se, že [
je vlastně příkaz, který spouštíte, stejně jako grep. V mém systému je to /usr/bin/[
. (No, technicky vzato, váš shell to pravděpodobně má zabudované, ale to je optimalizace. Chová se, jako by to byl příkaz). Funguje to stejným způsobem, [
vrátí nulový výstupní kód pro true, nenulový výstupní kód pro nepravdu. (test
je to samé jako [
, kromě koncovky ]
)