Portál AbcLinuxu, 13. května 2025 13:04
if [ -f path/filename ] ; then echo "Našli rádcové, našli!" fiviz spousty skriptů, které máš určitě na systému
/usr/bin/[
alebo /bin/[
. Iné meno pre ten istý príkaz je test
. Ten if v predchádzajúcom príspevku vlastne testuje návratový kód externe spusteného príkazu. Pre ďalšie informácie viď man test
.
test
je obvykle na systému nainstalován včetně varianty [
. A pokud nebude, tak init skripty začátečníka navedou jak to napsat na konkrétním stroji tak, aby to chodilo.
test
(a '[
') builtin.
if příkaz; then další příkaz fitohle bys našel v man bash, ale ten je dost obsáhlej a hledá se v něm blbě. hlavně bacha na ten středník. Výsledek příkazu se dá obrátit pomocí vykřičníku:
if ! příkaz; then (bacha na tu mezeru)-- Porovnání částí souboru v bashi in-place nejde (čti: neumim :) ), ale s trochou nápaditosti si poradíš i bez dočasných souborů. Jenže to by asi bylo dost podezřelý, takže naznačim řešení s dočasnym souborem:
tvrzení: v s1 jsou data v s1.head je 1-10. řádek z s1 v s1.mid je 30-40. řádek z s1důkaz: pomocí příkazu head (man head) si do nějakého dočasného souboru (třeba s1.tmp) uložíme prvních 10 řádků ze souboru s1:
head (něco) > s1.tmppotom pomocí příkazu diff zjistíme, zda jsou soubory s1.head a s1.tmp stejné (man diff):
diff (něco)(tady poradím, že příkaz diff vrací, mimo textového výstupu, i TRUE nebo FALSE, podobně jako příkaz test. TRUE je když jsou soubory stejné) testování souboru s1.mid provedeme obdobně, obsah souboru s1.tmp získáme kombinací příkazů head a tail (man tail)
head (něco) | tail (něco) > s1.tmp-- napiš, jak Ti to jde a cos vymyslel, opravíme, vymyslíme a odladíme ;) -m.
$?
expanduje na návratovou hodnotu posledního provedeného příkazu. Mimochodem, máte pocit, že si ten zápočet opravdu zasloužíte?
ale jak mam output true/false z diff vypsat?přečti si tu mojí odpověď ještě jednou a pořádně... -m.
sed
, awk
, head
+ tail
) do pomocných souborů (mktemp
) a porovnat (cmp
, diff
).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.