Android

Instrukcja Bash if..else

Introduction to Bash Scripting 06 - A Simple "If" Statement

Introduction to Bash Scripting 06 - A Simple "If" Statement

Spisu treści:

Anonim

Podejmowanie decyzji jest jedną z najbardziej podstawowych koncepcji programowania komputerowego. Jak w każdym innym języku programowania, if , if..else , if..elif..else i zagnieżdżone, if instrukcje Bash mogą być użyte do wykonania kodu w oparciu o określony warunek.

W tym samouczku przeprowadzimy Cię przez podstawy instrukcji Bash if i pokażemy, jak ich używać w skryptach powłoki.

Instrukcja if

Bash, if warunkowe mogą mieć różne formy. Najbardziej podstawowa instrukcja if ma następującą postać:

if TEST-COMMAND then STATEMENTS fi

Instrukcja if zaczyna się od słowa kluczowego if po którym następuje wyrażenie warunkowe i słowo kluczowe then . Instrukcja kończy się słowem kluczowym fi .

Jeśli TEST-COMMAND wartość True , STATEMENTS są wykonywane. Jeśli TEST-COMMAND zwróci False , nic się nie stanie, STATEMENTS zostaną zignorowane.

Ogólnie dobrą praktyką jest zawsze wcięcie kodu i oddzielenie bloków kodu pustymi wierszami. Większość osób decyduje się na wcięcie 4-spacji lub 2 spacji. Wcięcia i puste wiersze sprawiają, że kod jest bardziej czytelny i uporządkowany.

Spójrzmy na następujący przykładowy skrypt, który sprawdza, czy dana liczba jest większa niż 10.

#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." fi

Zapisz kod w pliku i uruchom go z wiersza poleceń:

bash test.sh

Skrypt wyświetli monit o wprowadzenie liczby. Jeśli na przykład wpiszesz 15, polecenie test zostanie ocenione jako true ponieważ 15 jest większe niż 10, a polecenie echo w klauzuli then zostanie wykonane.

The variable is greater than 10.

Instrukcja if..else

Instrukcja Bash if..else ma następującą postać:

if TEST-COMMAND then STATEMENTS1 else STATEMENTS2 fi

Jeśli TEST-COMMAND wartość True , STATEMENTS1 zostanie wykonany. W przeciwnym razie, jeśli TEST-COMMAND zwróci False , STATEMENTS2 zostanie wykonane. W instrukcji może znajdować się tylko jedna klauzula.

Dodajmy klauzulę else do poprzedniego przykładowego skryptu:

#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." else echo "The variable is equal or less than 10." fi

Instrukcja if..elif..else

Instrukcja Bash if..elif..else przyjmuje następującą postać:

if TEST-COMMAND1 then STATEMENTS1 elif TEST-COMMAND2 then STATEMENTS2 else STATEMENTS3 fi

Jeśli TEST-COMMAND1 wartość True , STATEMENTS1 zostanie wykonane. Jeśli TEST-COMMAND2 wartość True , STATEMENTS2 zostanie wykonane. Jeśli żadne z poleceń testowych nie ma wartości True , STATEMENTS2 jest wykonywany.

W instrukcji może elif jedna lub więcej klauzul elif . Klauzula else jest opcjonalna.

Warunki są oceniane kolejno. Gdy warunek zwraca wartość True pozostałe warunki nie są wykonywane, a sterowanie programem przesuwa się na koniec instrukcji if .

Dodajmy klauzulę elif do poprzedniego skryptu:

#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." elif] then echo "The variable is equal to 10." else echo "The variable is less than 10." fi

Zagnieżdżone, if instrukcje

Bash umożliwia zagnieżdżanie instrukcji if instrukcjach if . Możesz umieścić wiele instrukcji if w innej instrukcji if .

Poniższy skrypt poprosi cię o wprowadzenie trzech liczb i wydrukuje największą liczbę spośród tych trzech liczb.

#!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if] then if] then echo "$VAR1 is the largest number." else echo "$VAR3 is the largest number." fi else if] then echo "$VAR2 is the largest number." else echo "$VAR3 is the largest number." fi fi

Oto jak będzie wyglądać wyjście:

Enter the first number: 4 Enter the second number: 7 Enter the third number: 2 7 is the largest number. Zamiast używać zagnieżdżonych instrukcji if , zwykle bardziej efektywne jest użycie instrukcji case.

Wiele warunków

Logiczne operatory OR i AND pozwalają na użycie wielu warunków w instrukcjach if .

Oto kolejna wersja skryptu, aby wydrukować największą liczbę spośród trzech liczb. W tej wersji zamiast zagnieżdżonych instrukcji if użyjemy logicznego operatora AND ( && ).

#!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if] &&] then echo "$VAR1 is the largest number." elif] &&] then echo "$VAR2 is the largest number." else echo "$VAR3 is the largest number." fi

Operatorzy testowi

W Bash polecenie test przyjmuje jedną z następujących form składni:

test EXPRESSION]

Aby zanegować wyrażenie testowe, użyj logicznego operatora NOT ( ! ). Podczas porównywania ciągów zawsze używaj pojedynczych lub podwójnych cudzysłowów, aby uniknąć problemów z dzieleniem wyrazów lub globowaniem.

Poniżej znajdują się niektóre z najczęściej używanych operatorów:

  • -n VAR - Prawda, jeśli długość VAR jest większa od zera. -z VAR - Prawda, jeśli VAR jest pusty. STRING1 = STRING2 - Prawda [STRING1 i STRING2 są równe. STRING1 != STRING2 - True STRING1 i STRING2 nie są sobie równe. INTEGER1 -eq INTEGER2 - True INTEGER1 i INTEGER2 są równe. INTEGER1 -gt INTEGER2 - Prawda INTEGER1 jest większa niż INTEGER2. INTEGER1 -lt INTEGER2 - Prawda INTEGER1 jest mniejsza niż INTEGER2. INTEGER1 -ge INTEGER2 - Prawda INTEGER1 jest równa lub większa niż INTEGER2. INTEGER1 -le INTEGER2 - Prawda INTEGER1 jest równa lub mniejsza niż INTEGER2. -h FILE - Prawda, jeśli PLIK istnieje i jest dowiązaniem symbolicznym. -r FILE - Prawda, jeśli PLIK istnieje i jest czytelny. -w FILE - Prawda, jeśli PLIK istnieje i jest zapisywalny. -x FILE - Prawda, jeśli PLIK istnieje i jest wykonywalny. -d FILE - Prawda, jeśli PLIK istnieje i jest katalogiem. -e FILE - Prawda, jeśli PLIK istnieje i jest plikiem, niezależnie od typu (węzeł, katalog, gniazdo itp.). -f FILE - Prawda, jeśli PLIK istnieje i jest zwykłym plikiem (nie katalogiem ani urządzeniem).

Wniosek

Instrukcje if , if..else i if..elif..else pozwalają kontrolować przepływ wykonywania skryptu Bash poprzez ocenę danych warunków.

terminal bash