Crmgo Blog

if...then...else...-Syntax

if...then...else...-Syntax

? if [ Bedingung ] then Wenn die Bedingung zutrifft, führe alle Befehle bis zu else oder bis fi aus. else Wenn die Bedingung nicht zutrifft, führe alle Befehle bis fi aus. fi Es ist sehr wichtig, sich zu merken, dass Ihre Konstruktion immer mit dem Wort fi enden muss! Ausdrücke…

if...then...else...-Syntax


if [ условие ]
then
 если условие справедливо
 выполнить все команды до else или
 до fi
else
 если условие не справедливо
 выполнить все команды до fi
fi

Es ist sehr wichtig zu记住, dass Ihre Konstruktion immer mit dem Wort fi enden muss!

Ausdrücke, die mit if verwendet werden

In der unten stehenden Tabelle finden Sie Operatoren, die den Befehl test oder eine Reihe von Befehlen ausführen. Diese Operatoren werden in eckigen Klammern [] eingeschlossen, um die Erfüllung der Bedingung zu überprüfen.

[ -a FILE ] Правда елси FILE существует.
[ -b FILE ] Правда елси FILE существует и это специальный блоковый файл.
[ -c FILE ] Правда елси FILE существует и это специальный знаковый файл.
[ -d FILE ] Правда елси FILE существует и это директория.
[ -e FILE ] Правда елси FILE существует.
[ -f FILE ] Правда елси FILE существует и это регулярный файл.
[ -g FILE ] Правда елси FILE существует и установлен SGID бит.
[ -h FILE ] Правда елси FILE существует и это символический ссылка.
[ -k FILE ] Правда елси FILE существует и второй промежуточный бит округления установлен.
[ -p FILE ] Правда елси FILE существует и это named pipe (FIFO).
[ -r FILE ] Правда елси FILE существует и он доступен на чтение.
[ -s FILE ] Правда елси FILE существует и больше нуля.
[ -u FILE ] Правда елси FILE существует и SUID (set user ID) бит установлен.
[ -w FILE ] Правда елси FILE существует и он доступен на запись.
[ -x FILE ] Правда елси FILE существует и он доступен на исполнение.
[ -O FILE ] Правда елси FILE существует принадлежит существующему пользователю
[ -G FILE ] Правда елси FILE существует принадлежит существующей группе.
[ -L FILE ] Правда елси FILE существует и это символический ссылка.
[ -N FILE ] Правда елси FILE существует и был изменен с тех пор как был прочитан.
[ -S FILE ] Правда елси FILE существует и это сокет.
[ FILE1 -nt FILE2 ] Правда, если файл FILE1 изменялся чаще чем FILE2, или есои FILE1 существует, а FILE2 нет.
[ FILE1 -ot FILE2 ] Правда, если файл FILE1 старше чем FILE2, или FILE1 существует, а FILE2 нет.
[ FILE1 -ef FILE2 ] Правда, если FILE1 и FILE2 относятся к одному устройству и номеру инода.
[ -o OPTIONNAME ] Правда если shell опция "OPTIONNAME" включена.
[ -z STRING ] Правда если длинна "STRING" равна 0.
[ -n STRING ] or [ STRING ] Правда если длинна "STRING" не равна 0.
[ STRING1 == STRING2 ] Правда если выражения эквивалентны.
[ STRING1 != STRING2 ] Правда если выражения не эквивалентны.
[ STRING1 < STRING2 ] Правда если "STRING1" лексикографически упорядоченно до "STRING2".
[ STRING1 > STRING2 ] Правда если "STRING1" лексикографически упорядоченно после "STRING2".
[ ARG1 OP ARG2 ] "OP" это один из следующих параметров -eq, -ne, -lt, -le, -gt or -ge. Эти бинарные арифметические
операторы возвращают результат "правда" если "ARG1" эквивалентен(-eq), не эквивалентен(-ne), меньше чем(-lt),
меньше или эквивалентен(-le), больше чем(-gt), больше или эквивалентно(-ge) к "ARG2". 
[ ! EXPR ] правда если выражение EXPR не справедливо.
[ ( EXPR ) ] возвращает значение EXPR. Это может быть использовано для изменения приоритета операторов.
[ EXPR1 -a EXPR2 ] правда, если оба выражения EXPR1 и EXPR2 справедливы.
[ EXPR1 -o EXPR2 ] правда, если хотя бы одно выражение EXPR1 или EXPR2 справедливы.

Kommen wir zu den Beispielen. Erstellen wir ein Skript, das bestimmt, ob die von uns eingegebene Zahl positiv oder negativ ist:

#!/bin/bash
read -p "Введите число : " n
if [ $n -ge 0 ];
then
      echo "$n положительное число."
else
      echo "$n отрицательное число."
fi

Ein weiteres Beispiel: Bestimmen wir, ob der von uns eingegebene Benutzer existiert:

#!/bin/bash
read -p "Введите имя пользователя : " USER
if ! grep $USER /etc/passwd
then
      echo "$n не существует."
else
      echo "$n существует."
fi

Das Ausrufezeichen vor grep $USER /etc/passwd bedeutet, dass die Bedingung erfüllt ist, wenn der Benutzer nicht existiert. Lassen Sie uns dieses Skript nun neu schreiben, indem wir ausschließlich den speziellen Parameter $? verwenden, den wir in der dritten Lektion behandelt haben:

#!/bin/bash
read -p "Введите имя пользователя : " USER
grep $USER /etc/passwd
if [ $? -ne 0 ];
then
      echo "$n не существует."
else
      echo "$n существует."
fi

Ein Beispiel für die Verwendung des String-Vergleichs. Das Skript prüft, ob Sie root sind oder nicht:

#!/bin/bash
if [ "$(whoami)" != 'root' ]; then
        echo "У вас нет прав для запуска $0."
        exit 1;
fi

Dieses Skript kann kürzer geschrieben werden:

#!/bin/bash
[ "$(whoami)" != 'root' ] && ( echo У вас нет прав для запуска; exit 1 )
Können auch reguläre Ausdrücke verwenden. Als Beispiel: Unser Skript soll bestimmen, ob der eingegebene Text den Buchstaben „c“ enthält:

#!/bin/bash
LATTER="ч"
read -p "Введите предложение : " STR
if [[ "$STR" == *$LATTER* ]];
then
      echo "$LATTER найдено."
else
      echo "$LATTER не найдено."
fi

Einige Worte zur Verwendung von doppelten und einfachen eckigen Klammern. Bei Verwendung von doppelten Klammern werden Ihre Variablen nicht in mehrere einzelne Wörter aufgeteilt, wenn Sie Leerzeichen verwendet haben. Zum Beispiel wird die Variable VAR="var with space" als ein einziges Ganzes behandelt.

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.