Podobně jako naše probíhající série Unix Sed a Unix Awk zveřejníme několik článků o skriptování Bash, který pokryje všechny techniky skriptování bash s praktickými příklady.
Shell je program, který interpretuje uživatelské příkazy. Příkazy zadává buď přímo uživatel, nebo je čtou ze souboru zvaného skript shellu.
Shell se nazývá interaktivní shell, když čte vstup od uživatele přímo.
Shell se nazývá neinteraktivní shell, když čte příkazy ze souboru a provádí je. V tomto případě shell přečte každý řádek souboru skriptu shora dolů a provede každý příkaz, jako by byl zadán přímo uživatelem.
Vypište hodnotu vestavěné proměnné shellu $-, abyste věděli, zda je shell interaktivní nebo neinteraktivní.
# echo $- himBH
Poznámka:proměnná $- obsahuje „i“, když je shell interaktivní .
Unix má různé Shelly. Bourne shell (sh), Bourne znovu shell (bash), C shell (csh), Korn shell (ksh), Tenex C shell (tcsh). Pomocí unixových příkazů who nebo whereis zjistěte, kde se nachází konkrétní shell, jak je znázorněno níže.
# which bash /bin/bash # whereis bash bash: /bin/bash /usr/share/man/man1/bash.1.gz
Mezi shelly můžete přepínat zadáním názvu shellu. Například zadejte csh pro přepnutí do prostředí C.
Psaní a provádění skriptu shellu
Příklad 1. Skript Hello World Bash
- Vytvořte skript zadáním následujících dvou řádků do souboru pomocí svého oblíbeného editoru.
- Pro soubor můžete zvolit libovolný název. Název souboru by neměl být stejný jako žádný z vestavěných příkazů Unixu.
- Skript vždy začíná dvěma znaky „#!“, což se nazývá ona-bang. To znamená, že soubor je skript a měl by být spuštěn pomocí interpretu (/bin/bash) specifikovaného zbytkem prvního řádku v souboru.
- Spusťte skript, jak je uvedeno níže. Pokud máte nějaké problémy se spouštěním skriptu shellu, podívejte se na tutoriál pro provádění skriptů shell
- Když spustíte příkaz „bash helloworld.sh“, spustí se neinteraktivní shell a předá mu název souboru jako argument.
- První řádek sděluje operačnímu systému, který shell má spustit, aby mohl skript spustit.
- Ve výše uvedeném příkladu překladač bash, který interpretuje skript a provádí příkazy jeden po druhém shora dolů.
- Skript můžete dokonce spustit bez úvodního „bash“ pomocí:
- Změňte oprávnění ve skriptu tak, abyste jej (uživateli) mohli spustit pomocí příkazu „chmod u+x helloworld.sh“.
- Adresář obsahující skript by měl být zahrnut do proměnné prostředí PATH. Pokud není zahrnut, můžete skript spustit zadáním absolutní cesty skriptu.
- echo je příkaz, který jednoduše vydává argument, který mu zadáme. Používá se také k vytištění hodnoty proměnné.
$ cat helloworld.sh #!/bin/bash echo Hello World
$ bash helloworld.sh Hello World
Soubory Bash-Startup
Jak jsme probrali dříve v našem článku o sekvenci provádění pro .bash_profile a související soubory, když je bash vyvolán jako interaktivní shell, nejprve načte a provede příkazy z /etc/profile. Pokud /etc/profile neexistuje, načte a provede příkazy z ~/.bash_profile, ~/.bash_login a ~/.profile v daném pořadí. Volba –noprofile může být použita při spuštění shellu k potlačení tohoto chování.
Váš bash_profile obvykle spouští ~/.bashrc. Pokud chcete, můžete ukázat uvítací zprávu. Toto se spustí pouze při prvním přihlášení. Proměnné můžete exportovat, co chcete, a můžete nastavit aliasy, které budou spuštěné a dostupné po otevření shellu. Když se přihlašovací shell ukončí, Bash čte a provádí příkazy ze souboru ~/.bash_logout.
Příklad 2. Po přihlášení vytiskněte uvítací zprávu
Do souboru bash_profile zadejte následující obsah. Pokud soubor neexistuje, vytvořte soubor s níže uvedeným obsahem.
$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."
Když se přihlásíte do interaktivního shellu, uvidíte uvítací zprávy, jak je uvedeno níže.
login as: root root@dev-db's password: Welcome on dev-db
Příklad 3. Tisk informací souvisejících se systémem
Když se přihlásíte do interaktivního shellu, můžete zobrazit název jádra nainstalovaného na serveru, verzi bash, dobu provozu a čas na serveru.
$cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname." echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; date
Když spustíte interaktivní shell, vytiskne zprávu, jak je uvedeno níže.
login as: root root@dev-db's password: Welcome on dev-db Kernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010
Příklad 4. Vytiskněte poslední přihlašovací údaje
Pokud více uživatelů používá stejný počítač se stejným přihlášením, pak by nejužitečnějšími údaji byly podrobnosti, jako je počítač, ze kterého proběhlo poslední přihlášení, a čas, kdy se přihlásili. Tento příklad vytiskne poslední přihlašovací údaje během spouštění interaktivního shellu.
$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; datelastlog | grep "kořen" | awk {'print "Poslední přihlášení od:"$3
tisknout "Datum a čas posledního přihlášení:",$4,$5,$6,$7,$8,$9;}'
Během spouštění se zobrazí níže uvedená zpráva.login as: root root@dev-db's password: Welcome on dev-dbKernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010Poslední přihlášení z:sasikala-laptop
Datum a čas posledního přihlášení:Út 22. února 11:24:01 +0100 2010
Příklad 5. Export proměnných a nastavení aliasů během spouštění
Nejběžnější příkazy, které budete používat ve svých souborech .bashrc a .bash_profile, jsou příkazy export a alias.
Alias jednoduše nahrazuje jeden kus textu jiným. Když spustíte alias, jednoduše nahradí to, co jste zadali, tím, čemu se alias rovná. Chcete-li například nastavit alias pro příkaz ls pro zobrazení souborů/složek s barvami, postupujte takto:
alias ls 'ls --color=tty'Pokud tento příkaz přidáte do některého ze spouštěcích souborů, můžete provést příkaz ls, kde bude automaticky nahrazen příkazem ls –color=tty.
Příkaz Export se používá k nastavení proměnné prostředí. Systém nebo jiné aplikace používají různé proměnné prostředí. Jsou jednoduše způsobem nastavení parametrů, které může číst jakákoli aplikace/script. Pokud nastavíte proměnnou bez příkazu export, tato proměnná existuje pouze pro tento konkrétní proces.
V níže uvedeném příkladu exportuje proměnnou prostředí HISTSIZE. Řádek, který začíná znakem #, je řádek komentáře.
$ cat /etc/profile alias ls 'ls --color=tty' # Setup some environment variables. export HISTSIZE=1000 PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc export PATH export SVN_SH=${SVN_RSH-ssh}
Jak převést textový dokument na řeč na Ubuntu pomocí eSpeak Příklad Cobol Hello World:Jak psát, kompilovat a spouštět program Cobol na OS LinuxLinux