Výraz bash je kombinací operátorů, funkcí nebo hodnot použitých k vytvoření podmíněného příkazu bash. Podmíněný výraz může být binární nebo unární výraz, který zahrnuje numerické, řetězcové nebo jakékoli příkazy, jejichž návratový stav je v případě úspěchu nula.
Existuje několik podmíněných výrazů, které lze použít k testování se soubory. Následuje několik užitečných podmíněných výrazů.
- [ -e cesta k souboru ] Vrátí hodnotu true, pokud soubor existuje.
- [ -x cesta k souboru ] Vrátí hodnotu true, pokud soubor existuje a je spustitelný.
- [ -S cesta k souboru ] Vrací hodnotu true, pokud soubor existuje a jedná se o soketový soubor.
- [ výraz1 -a výraz2 ] Vrátí hodnotu true, pokud jsou oba výrazy pravdivé.
- [ výraz1 -o výraz2 ] Vrátí hodnotu true, pokud je pravdivý jeden z výrazů 1 nebo 2.
Více podmíněných výrazů pro kontrolu souborů, řetězců a čísel naleznete na manuálové stránce bash.
Příklad Bash 1. Zkontrolujte existenci souboru
Následující fragment kódu skriptu Bash shell získá název souboru s jeho absolutní cestou a zkontroluje, zda soubor existuje nebo ne, a vyvolá příslušné informace.
$ cat exist.sh #! /bin/bash file=$1 if [ -e $file ] then echo -e "File $file exists" else echo -e "File $file doesnt exists" fi $ ./exist.sh /usr/bin/boot.ini File /usr/bin/boot.ini exists
V našem předchozím článku se dozvíte o různých typech příkazů bash if.
Příklad Bash 2. Porovnání čísel
Níže uvedený skript přečte od uživatele dvě celá čísla a zkontroluje, zda jsou obě čísla stejná nebo větší nebo menší než ostatní.
$ cat numbers.sh #!/bin/bash echo "Please enter first number" read first echo "Please enter second number" read second if [ $first -eq 0 ] && [ $second -eq 0 ] then echo "Num1 and Num2 are zero" elif [ $first -eq $second ] then echo "Both Values are equal" elif [ $first -gt $second ] then echo "$first is greater than $second" else echo "$first is lesser than $second" fi $ ./numbers.sh Please enter first number 1 Please enter second number 1 Both Values are equal $ ./numbers.sh Please enter first number 3 Please enter second number 12 3 is lesser than 12
Pokud jste ve skriptování bash nováčkem, podívejte se na náš tutoriál Úvod do bash.
Bashův příklad 3. Základní aritmetická kalkulačka
Tento příklad čte vstup, což je typ aritmetické operace, kterou chcete provést s proměnnými bash (inp1 a inp2). Aritmetickou operací může být sčítání, odčítání nebo násobení...
$ cat calculator.sh #!/bin/bash inp1=12 inp2=11 echo "1. Addition" echo "2. Subtraction" echo "3. Multiplication" echo -n "Please choose a word [1,2 or 3]? " read oper if [ $oper -eq 1 ] then echo "Addition Result " $(($inp1 + $inp2)) else if [ $oper -eq 2 ] then echo "Subtraction Result " $(($inp1 - $inp2)) else if [ $oper -eq 3 ] then echo "Multiplication Result " $(($inp1 * $inp2)) else echo "Invalid input" fi fi fi $ ./calculator.sh 1. Addition 2. Subtraction 3. Multiplication Please choose a word [1,2 or 3]? 4 Invalid input
Vědět, jak používat speciální parametry bash ( $*, $@, $#, $$, $!, $?, $-, $_ ), vám usnadní práci se skripty.
Příklad Bash 4. Čtení a ping IP adresy
Následující skript se používá ke čtení IP adresy a kontrole, zda je IP adresa dosažitelná, a vytiskne příslušnou zprávu.
$ cat ipaddr.sh #!/bin/bash echo "Enter the Ipaddress" read ip if [ ! -z $ip ] then ping -c 1 $ip if [ $? -eq 0 ] ; then echo "Machine is giving ping response" else echo "Machine is not pinging" fi else echo "IP Address is empty" fi $ ./ipaddr.sh Enter the Ipaddress 10.176.191.106 Pinging 10.176.191.106 with 32 bytes of data: Reply from 10.176.191.106: bytes=32 time<1ms TTL=128 Ping statistics for 10.176.191.106: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Machine is giving ping response
V tomto příkladu -z vrátí hodnotu true, pokud má adresa IP nulovou délku, pokud podmínce předchází ! (negate) operátor, pokud je výraz nepravdivý, vstoupí do if a provede se. Když tedy IP adresa není nulová, zadá se a zkontroluje, zda je IP adresa dosažitelná.
Příklad Bash 5. Instalační skript
Instalační skript většiny balíčků neumožní jejich spuštění jako uživatel root. Skript zkontroluje spouštěného uživatele a vyvolá chybu.
Následující skript vám umožňuje spustit skript instalačního programu oracle pouze v případě, že spouštěný uživatel není root.
$ cat preinstaller.sh #!/bin/bash if [ `whoami` != 'root' ]; then echo "Executing the installer script" ./home/oracle/databases/runInstaller.sh else echo "Root is not allowed to execute the installer script" fi Executing the script as a root user, # ./preinstaller.sh Root is not allowed to execute the installer script
V tomto příkladu je výstup příkazu whoami porovnán se slovem „root“. Pro porovnání řetězců ==, !=, < a měla by být použita a pro numerické srovnání by měla být použita eq, ne,lt a gt.
Příklad bash 6. Rozšířené závorky
Ve všech výše uvedených příkladech jsme k uzavření podmíněného výrazu použili pouze jednoduché závorky, ale bash umožňuje dvojité závorky, které slouží jako vylepšená verze syntaxe s jednou závorkou.
$ cat enhanced.sh #!/bin/bash echo "Enter the string" read str if [[ $str == *condition* ]] then echo "String "$str has the word \"condition\" fi $ ./enhanced.sh Enter the string conditionalstatement String conditionalstatement has the word "condition"
- [ je synonymem pro testovací příkaz. I když je zabudován do shellu, vytváří nový proces.
- [[ je jeho nová vylepšená verze, což je klíčové slovo, nikoli program.
- [[ rozumí Korn a Bash.
- Pokud ve výše uvedeném příkladu proměnná $str kdekoli obsahuje frázi „condition“, podmínka je pravdivá.
- Toto je funkce shell globbing, která bude podporována pouze tehdy, když použijete [[ (dvojité závorky), a proto není nutné uvádět mnoho argumentů.