Reddit – linux – Jak se nejlépe naučit bash?

Způsob, jakým jsem se naučil jakýkoli jazyk, je nesednout si a nepřečíst si o něm knihu jen proto, abych se ho naučil, ale mít v hlavě nějaký cíl:

Chci automatizovat X.

Poté začnu přemýšlet nad problémem a pak pomocí internetu zjistím syntaxi, která mě dostane z bodu A do bodu B. Pak se naučím, co je to bash.

Před lety jsem například chtěl sledovat dobu provozu systému, když jsem právě přešel z Windows, které se musely restartovat každých 48 hodin, a také proto, že jsem byl velký šprt. Posmíval jsem se tím kamarádovi online, takže jsem chtěl aktualizovat uptime svého systému tady doma, na webové stránce, která byla umístěna venku na internetu, na serveru v jiném státě.

Jak to udělat?“

No, především, jak začít dělat skript, který se skutečně spustí.

#!/bin/bash <- Oh, specifies the script interpreter. LEARNED.

Hm, pořád se nespustí…

# chmod +x <- Oh, needs execute bit set. LEARNED.

Takže, jak chytit uptime? No, mohl bych rozebrat příkaz uptime, ale jednou z funkcí, které jsem chtěl, bylo sledování mého „záznamu uptime“. Příkaz uptime v Linuxu zobrazuje dobu uptime v lidsky čitelné podobě:

13:23:54 up 32 days, 4:19

No, to je trochu drsné rozebírat jako větší nebo menší než. Lze to udělat, ale musí existovat jednodušší způsob. Zajímalo by mě, odkud program „uptime“ tahá tato data? Trocha googlení mě zavede do systému /proc:

/proc/uptime

Jak to mám přečíst? Existuje několik způsobů. Způsob, který jsem použil ze zvyku (a je to asi špatný způsob, protože příkaz cat k tomu není určen, je:)

cat /proc/uptime

Který vrátí:

2780345.41 5546896.19

OK, teď máme pěkná desetinná místa, která nám usnadní zjištění, zda jde o záznam uptime. Ale jak to uchopit do proměnné? Přečetl jsem si na internetu ještě něco o zpětných uvozovkách:

UPTIME=`cat /proc/uptime`

Cool, teď to mám v proměnné. Mentální poznámka, do proměnných se tak dají načíst různé zajímavé věci. Musím si to do budoucna zapamatovat. POUČENO. A taky, co je to za věc /proc? Ooh, jsou tam různé dobré věci jako:

cat /proc/cpuinfo

OK, takže teď mám tohle velké desetinné číslo. Jak to převedu na dny, abych měl uptime jako „23,8 dne“? Také cat /proc/cpuinfo vrací dvě čísla. Které z nich chci? A jak to mám rozebrat, abych měl jen to číslo? Přečetl jsem si ještě něco. Teď existuje několik způsobů, jak rozdělit řetězec, ale první, na co jsem narazil, je příkaz cut. Jak ho mohu použít s řetězcem? Přečetl jsem si článek o pipingu a přesměrování. Vidím, že dvě čísla se oddělují mezerou jako oddělovačem, takže:

NUMBERIWANT=`echo ${uptime} | cut -d " " -f 1`

Cool. To si musím zapamatovat. S tou rourou se dají dělat zajímavé věci. V duchu si to založím spolu s příkazem cut, který bude jedním z nejužitečnějších nástrojů příkazového řádku, se kterými jsem se setkal.

Teď ještě, jak to proměnit ve dny… hm, zklamání, bash má mizernou podporu matematiky. Hm, tenhle článek mluví o bc. Trochu experimentování a:

uptime=`echo "scale=2; $uptime/86400" | bc`

Takže bc je program, který se používá k výpočtu. To si budu muset zapamatovat. O zpětných uvozovkách a rouře jsem se dozvěděl v předchozích krocích, takže mi bylo jasné, jak to použít tady.

Teď ještě, jak to vyexhibovat do textového souboru, který můžu použít jako include v PHP na webu (PHP jsem se naučil podobně)?

Aha, přesměrování!

echo $uptime > ./uptime.txt

A tak dále. Když se podívám na své staré skripty (včetně tohoto), kódování je neefektivní a ne nutně tak, jak bych to udělal teď. Ale jak tento postup sleduji v průběhu let, moje dovednosti a soubor znalostí se zlepšují a tím, že se maluji do kouta špatnými postupy, se učím, jak věci nedělat. Moje metodiky se zlepšují tak, že skripty jsou lépe udržovatelné – ne díky sezení v učebně nebo čtení knih, ale díky tomu, že se podělám a poučím se z toho.

POZNÁMKA: Nejsem profesionální vývojář. Skripty píšu hlavně pro vlastní (hobbystické) účely. Vím, že lidé s informatickým vzděláním mohou mít proti tomuto způsobu učení námitky, ale mně se zatím osvědčil. A je to zábava, protože spíš než aby to bylo jen takové pracovní cvičení ve čtení a učení se nazpaměť, získávám z toho „něco“ průběžně – užitečné skripty.

Mimochodem – pokud jste to ještě neudělali, dejte si to do záložek. Je to fantastické:

Pokročilý průvodce skriptováním v Bashi — většina toho, co vím o bashi, pochází odtud.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.