В Bash скриптовете, if
и then
се използват за създаване на условни изрази. Ето основния начин, по който се използват:
if
команда: Това е началото на условната конструкция. Следва израз, който се оценява като истина (връща статус 0) или лъжа (връща статус, различен от 0).- Изразът: Това може да бъде всякакъв вид команда или условие, което връща статус код. Например, тест за проверка на съществуването на файл или сравнение на числа.
then
команда: Ако условието оценявано отif
е истина (т.е. връща статус 0), тогава изпълнението продължава с кода, който следва следthen
.- Тялото на условието: Тук се поставя командите, които искате да се изпълнят, ако условието е истина.
fi
команда: Това е краят на условната конструкция. Всякаif
конструкция трябва да завършва сfi
.
Ето пример на прост if-then
блок:
if [ условие ]; then
команди
fi
Където [ условие ]
е тест, който се оценява, и команди
са командите, които ще бъдат изпълнени, ако условието е истина.
Също така, може да добавите else
блок, за да укажете команди, които да се изпълнят, ако условието не е истина:
if [ условие ]; then
команди за изпълнение при истина
else
команди за изпълнение при лъжа
fi
Има и други вариации, като elif
(кратко за else if), което позволява добавяне на допълнителни условия.
Пример 1: Проверка дали число е равно на 10
#!/bin/bash
number=10
if [ "$number" -eq 10 ]; then
echo "Числото е равно на 10."
fi
В този пример, скриптът проверява дали променливата number
е равна на 10. Ако е така, изписва съобщение.
Пример 2: Проверка за съществуване на файл
#!/bin/bash
filename="test.txt"
if [ -f "$filename" ]; then
echo "Файлът $filename съществува."
else
echo "Файлът $filename не съществува."
fi
Тук скриптът проверява дали файл с име test.txt
съществува в текущата директория. Ако файлът съществува, изписва едно съобщение, а ако не съществува, изписва друго.
Пример 3: Проверка на възраст
age=20
if [ "$age" -lt 18 ]; then
echo "Ти си непълнолетен."
else
echo "Ти си пълнолетен."
fi
Този пример проверява дали стойността на променливата age
е по-малка от 18. В зависимост от това изписва подходящо съобщение.
Пример 4: Проверка на няколко условия с elif
#!/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: Проверка на Няколко Условия за Файл
#!/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
Конструкции
#!/bin/bash
user="admin"
status="active"
if [ "$user" = "admin" ]; then
if [ "$status" = "active" ]; then
echo "Потребителят е администратор и е активен."
else
echo "Потребителят е администратор, но не е активен."
fi
else
echo "Потребителят не е администратор."
fi
Тук използваме вложени if
конструкции, за да проверим първо дали потребителят е администратор, а след това и дали е активен.
Пример 7: Комбиниране на Условия с &&
и ||
#!/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: Проверка на Връщаеми Кодове от Команди
#!/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, да спре до тук !
#!/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 потребител продължи, ако не си излез.
#!/bin/bash
if [ $(whoami) != 'root' ]; then
echo "Please run with root user."
exit
fi
Пример 11: port 22 на 87.246.47.66 не е open, тогава спри.
#!/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 не съсществува, тогава спри до тук.
#!/bin/bash
DIR='/mnt/hdd1/rsync'
if [ ! -d "$DIR" ]
then
echo "Directory $DIR DOES NOT exists."
exit 1
fi
Пример 13: Следене състоянието на процеси в Linux
#!/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: Задаване на променлива след файла.
#/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 изпълни ги от файл.
#!/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
#!/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
. След това можете да го изпълнявате директно от терминала.
Браво! Перфектно написан пост, както винаги!
Интересен сугестопедичен подход, за начинаещ найстина е много логично.