Portál AbcLinuxu, 14. května 2025 00:48
if [ -f $file -a ... ];thenJakým způsobem by to šlo udělat? Díky
if [ -f $file -a `grep -c '#poznamka' $file` -gt 0 ]; then
echo "je tam";
fi
Zdravim,
existancia daneho suboru este nie je dovod na radost. Je treba vediet, ci su garantovane prava pre citane, kedze ho budeme citat. Napr. takto:
if [[ -r "${file}" && "$(grep '#poznamka' "${file}")" ]]; then echo 'je tam'; fi
Grep totizto vracia exit status s hodnotou jedna (neuspech), ak sa dany pattern nenajde.
Slo by to ale aj inak, ak vyuzijeme predchadzajucu moju poznamku:
if grep '#poznamka' "${file}" 2>/dev/null; then echo 'je tam'; fi
Ak subor existuje, je citatelny a nachadza sa tam dany pattern, tak sa vypise 'je tam'. Ak bude niektora z podmienok nesplnena, tak prinajhorsom hodi chybu, ale tie sa nam nezobrazia, lebo vsetky chyby su presmerovane do /dev/null .
Dakujem za tip. ;)
Druhy priklad je u mna zle, bo presmerovava len chyby do /dev/null. Takze bud takto:
if grep '#poznamka' "${file}" &>/dev/null; then echo 'je tam'; fi
alebo takto, ako mi bolo poradene:
if grep -qs '#poznamka' "${file}"; then echo 'je tam'; fi
if [ -f $file -a `grep -c '#poznamka' $file` -gt 0 ]špatně, protože pokud soubor nebude čitelný (-r), tak grep nevypíše žádné číslo, a budete mít syntax mišmaš.
if [ -r $file -a `grep -c '#poznamka' $file` -gt 0 ]to už by mělo fungovat, ale je to moc komplikované
if [[ `grep -c '#poznamka' $file` -gt 0 ]]tohle už by mělo zvládnout i nečitelnost souboru, ale je možné že autor [[ nechce Ideální řešení je podle mne to nejjednodušší:
if grep '#poznamka' &>/dev/null; thenPokud se grepu nepodaří objevit poznámku v souboru (ať už z jakéhokoliv důvodu), vrátí hodnotu interpretovanou jako false, jinak true.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.