GNU/Linux >> Znalost Linux >  >> Linux

6 Bashových příkladů podmíněných výrazů ( -e, -eq, -z, !=, [, [[ ..)

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ů.

Linux
  1. Bash pro průvodce smyčkou a příklady

  2. Bash for smyčky Příklady

  3. '&&' vs. '&' s příkazem 'test' v Bash

  1. Bash + Ověřit název regulárním výrazem?

  2. Bash pole s příklady

  3. Bash If-Else prohlášení s příklady

  1. Jak napsat Bash skript s příklady

  2. Příklady Bash for Loop a While Loop

  3. 5 Příklady prohlášení o případu Bash