Change php version on FreeBSD

Simplify changing of php version on FreeBSD

Change php version on FreeBSD

Here is my script which helps me to change to different PHP version on FreeBSD:

#!/usr/local/bin/bash

# 1. Автоматично откриване на текущата версия
# Търсим пакет, чийто Origin е lang/phpXX
OLD_V_FULL=$(pkg query -e '%o ~ lang/php*' '%v' | head -n 1)
OLD_V_SHORT=$(pkg query -e '%o ~ lang/php*' '%n' | sed 's/php//' | head -n 1)

if [ -z "$OLD_V_SHORT" ]; then
    echo "Грешка: Не беше открита инсталирана PHP версия през pkg."
    exit 1
fi

# 2. Проверка за подаден аргумент за нова версия
if [ "$#" -ne 1 ]; then
    echo "Текуща версия: $OLD_V_SHORT ($OLD_V_FULL)"
    echo "Употреба: $0 <нова_версия>"
    echo "Пример: $0 85"
    exit 1
fi

NEW_V=$1

# 3. Валидация на версиите (само 82, 83, 84, 85)
PATTERN="^(82|83|84|85)$"
if [[ ! $OLD_V_SHORT =~ $PATTERN ]] || [[ ! $NEW_V =~ $PATTERN ]]; then
    echo "Грешка: Версиите трябва да бъдат една от следните: 82, 83, 84, 85"
    echo "Открита текуща версия: $OLD_V_SHORT"
    exit 1
fi

if [ "$OLD_V_SHORT" == "$NEW_V" ]; then
    echo "Текущата версия вече е $NEW_V. Няма нужда от ъпгрейд."
    exit 0
fi

LIST_DEL=""
LIST_INS=""
MAIN_PHP="lang/php$NEW_V"

# 4. Генериране на списъци за замяна
for FILE in $(pkg info | grep "php$OLD_V_SHORT" | cut -f1 -d' ') ; do
    PKGNAME=$(pkg info "$FILE" | grep 'Origin    ' | cut -f2 -d':' | xargs) ;
    NEWPKGNAME="${PKGNAME//php$OLD_V_SHORT/php$NEW_V}" ;
    
    LIST_DEL="$LIST_DEL $FILE";
    
    if [ "$NEWPKGNAME" != "$MAIN_PHP" ]; then
        LIST_INS="$LIST_INS $NEWPKGNAME";
    fi
done

echo "### ОТКРИТА ВЕРСИЯ: $OLD_V_SHORT -> ЦЕЛЕВА ВЕРСИЯ: $NEW_V ###"
echo "pkg delete -f $LIST_DEL"
echo "portmaster $MAIN_PHP && portmaster $LIST_INS"