You are currently viewing Как работи if и then в bash скриптинга ?

Как работи if и then в bash скриптинга ?

В Bash скриптовете, if и then се използват за създаване на условни изрази. Ето основния начин, по който се използват:

  1. if команда: Това е началото на условната конструкция. Следва израз, който се оценява като истина (връща статус 0) или лъжа (връща статус, различен от 0).
  2. Изразът: Това може да бъде всякакъв вид команда или условие, което връща статус код. Например, тест за проверка на съществуването на файл или сравнение на числа.
  3. then команда: Ако условието оценявано от if е истина (т.е. връща статус 0), тогава изпълнението продължава с кода, който следва след then.
  4. Тялото на условието: Тук се поставя командите, които искате да се изпълнят, ако условието е истина.
  5. fi команда: Това е краят на условната конструкция. Всяка if конструкция трябва да завършва с fi.

Ето пример на прост if-then блок:

Bash
if [ условие ]; then
   команди
fi

Където [ условие ] е тест, който се оценява, и команди са командите, които ще бъдат изпълнени, ако условието е истина.

Също така, може да добавите else блок, за да укажете команди, които да се изпълнят, ако условието не е истина:

Bash
if [ условие ]; then
   команди за изпълнение при истина
else
   команди за изпълнение при лъжа
fi

Има и други вариации, като elif (кратко за else if), което позволява добавяне на допълнителни условия.

Пример 1: Проверка дали число е равно на 10

Bash
#!/bin/bash

number=10

if [ "$number" -eq 10 ]; then
    echo "Числото е равно на 10."
fi

В този пример, скриптът проверява дали променливата number е равна на 10. Ако е така, изписва съобщение.

Пример 2: Проверка за съществуване на файл

Bash
#!/bin/bash

filename="test.txt"

if [ -f "$filename" ]; then
    echo "Файлът $filename съществува."
else
    echo "Файлът $filename не съществува."
fi

Тук скриптът проверява дали файл с име test.txt съществува в текущата директория. Ако файлът съществува, изписва едно съобщение, а ако не съществува, изписва друго.

Пример 3: Проверка на възраст

Bash
age=20

if [ "$age" -lt 18 ]; then
    echo "Ти си непълнолетен."
else
    echo "Ти си пълнолетен."
fi

Този пример проверява дали стойността на променливата age е по-малка от 18. В зависимост от това изписва подходящо съобщение.

Пример 4: Проверка на няколко условия с elif

Bash
#!/bin/bash

number=15

if [ "$number" -eq 10 ]; then
    echo "Числото е 10."
elif [ "$number" -eq 15 ]; then
    echo "Числото е 15."
else
    echo "Числото не е нито 10, нито 15."
fi

Тук има проверка за няколко условия. Ако number е 10, изписва се едно съобщение, ако е 15 – друго, и ако не е нито едното, нито другото, се изписва трето съобщение.

Пример 5: Проверка на Няколко Условия за Файл

Bash
#!/bin/bash

filename="example.txt"

if [ -f "$filename" ]; then
    if [ -r "$filename" ] && [ -w "$filename" ]; then
        echo "Файлът $filename съществува и е достъпен за четене и писане."
    else
        echo "Файлът $filename не е достъпен за четене и писане."
    fi
else
    echo "Файлът $filename не съществува."
fi

Този скрипт проверява дали даден файл съществува, и ако да – дали е достъпен за четене и писане.

Пример 6: Вложени if Конструкции

Bash
#!/bin/bash

user="admin"
status="active"

if [ "$user" = "admin" ]; then
    if [ "$status" = "active" ]; then
        echo "Потребителят е администратор и е активен."
    else
        echo "Потребителят е администратор, но не е активен."
    fi
else
    echo "Потребителят не е администратор."
fi

Тук използваме вложени if конструкции, за да проверим първо дали потребителят е администратор, а след това и дали е активен.

Пример 7: Комбиниране на Условия с && и ||

Bash
#!/bin/bash

age=20
name="Samyil"

if [ "$age" -ge 18 ] && ([ "$name" = "Samyil" ] || [ "$name" = "Georgi" ]); then
    echo "Името е Samyil или Georgi, и възрастта е над 18."
else
    echo "Условието не е изпълнено."
fi

Този скрипт проверява дали възрастта е поне 18 и дали името е или Samyil, или Georgi.

Пример 8: Проверка на Връщаеми Кодове от Команди

Bash
#!/bin/bash

ping -c 1 google.com

if [ $? -eq 0 ]; then
    echo "Google.com е достъпен."
else
    echo "Google.com не е достъпен."
fi

Тук скриптът използва командата ping за проверка дали определен уебсайт е достъпен. Специалната променлива $? съдържа статус кода на последната изпълнена команда, който се използва за проверка на резултата от ping.

Тези примери демонстрират някои по-сложни начини за използване на if и then в Bash, включително вложени условия, комбиниране на множество условия и работа с връщаеми кодове от команди.

Пример 9: Натисни y за да продължи скрипта или n, да спре до тук !

Bash
#!/bin/bash

read -p "Enter yes or no (y/n)" RESPONSE

if [ "$RESPONSE" = y ] ; then
   echo "Run the script"
elif [ "$RESPONSE" = n ] ; then
   echo "Script will not run"
   exit 1
else
   echo "Answer yes or no please"
   exit 1
fi

Пример 10: Ако си root потребител продължи, ако не си излез.

Bash
#!/bin/bash

if [ $(whoami) != 'root' ]; then
        echo "Please run with root user."
        exit
fi

Пример 11: port 22 на 87.246.47.66 не е open, тогава спри.

Bash
#!/bin/bash

IP=87.246.47.66

nmap -sT -Pn -p 22 $IP | egrep -q 'open'
if [[ $? -ne 0 ]]; then
    echo "IP $IP Not connection"
       exit 1
fi

Пример 12: Ако директорията rsync не съсществува, тогава спри до тук.

Bash
#!/bin/bash

DIR='/mnt/hdd1/rsync'

if [ ! -d "$DIR" ]
then
    echo "Directory $DIR DOES NOT exists."
    exit 1
fi

Пример 13: Следене състоянието на процеси в Linux

Bash
#!/bin/bash

SERVICE=flow-capture

if ps ax | grep -v grep | grep -v $0 | grep $SERVICE > /dev/null
then
    echo "$SERVICE is running"
else
    echo "$SERVICE is not running"
     flow-capture -p /var/run/flow-capture.pid -n 287 -w /mnt/sdc/flow -V5 -S5 93.155.130.14/93.155.130.9/2055
    echo "check again !!!"
fi

Ако процесът flow-capture не съществува създай го със следните пратаметри. Такъв скрипт опитва се стартира от CRON например през 5 минути.

Пример 14: Задаване на променлива след файла.

Bash
#/bin/bash

IPADDRESS="$1"
if test -z "$IPADDRESS"; then echo No IP address specified; exit 1; fi

echo "$IPADDRESS"

Ако изпълните файла ./script.sh ще получите съобщение: No IP address specified но ако изпълните ./script.sh 192.168.1.2 ще получите променливата 192.168.1.2 като отговор която можете по надолу да използвате.

Пример 15: Ако няма правила в iptables изпълни ги от файл.

Bash
#!/bin/bash

# Пътят до скрипта, който искате да изпълните
firewall_script="./firewall.sh"

# Проверка за наличието на правила в iptables
if ! sudo iptables -L | grep -q "Chain"; then
    echo "Няма дефинирани правила в iptables. Изпълняване на $firewall_script..."
    # Изпълнение на скрипта firewall.sh
    sudo bash "$firewall_script"
else
    echo "В iptables вече има дефинирани правила."
fi

Този скрипт използва командата iptables -L, която извежда списъка с текущите правила. Командата grep -q "Chain" търси дали има някакви дефинирани вериги в iptables. Ако не намери нито една (т.е. няма дефинирани правила), тогава скриптът продължава да изпълнява firewall.sh.

Уверете се, че firewall.sh е достъпен и има права за изпълнение. Можете да дадете права за изпълнение с командата chmod +x firewall.sh.

Също така, тъй като iptables често изисква административни права, може да се наложи да стартирате този скрипт с sudo или като администратор.

Пример 16: Добре дошъл в Bash terminal

Bash
#!/bin/bash

# Получаване на името на потребителя
user=$(whoami)

# Проверка дали потребителят е root
if [ "$user" = "root" ]; then
    echo "========================================"
    echo "             !!! ВНИМАНИЕ !!!"
    echo "        Ти си влезнал като root."
    echo "    Всяка твоя действие може да бъде"
    echo "    опасно за системната сигурност!"
    echo "========================================"
else
    echo "========================================"
    echo "             Добре дошъл, $user"
    echo "    Това е твоята система. Наслади се"
    echo "           на твоята сесия."
    echo "========================================"
fi

Този скрипт показва различни съобщения в зависимост от това дали потребителят е root или не. Това може да бъде интересен начин да персонализирате вашия терминал или да добавите предупреждение, когато влизате като суперпотребител.

Можете да запишете този скрипт във файл, например banner.sh, и да му дадете права за изпълнение с командата chmod +x banner.sh. След това можете да го изпълнявате директно от терминала.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This Post Has 2 Comments

  1. Inkas

    Браво! Перфектно написан пост, както винаги!

  2. vmware

    Интересен сугестопедичен подход, за начинаещ найстина е много логично.