directadmin-scripts/da_php_update_version.sh

64 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# Search for specific version (1-4) and replace with specified version. If
# replacement of version "1" has been requested, change configs with no version
# set, as "1" is the default.
set -euo pipefail
# helper functions
die() { echo "$*" >&2; exit 1;}
warn() { echo "$*" >&2; }
# Default values
confused=false
version_search=0
version_replace=0
[ `id -nu` != "root" ] && die "Please execute as root"
while getopts s:r:v c; do
case "$c" in
s) version_search="$OPTARG";;
r) version_replace="$OPTARG";;
*) confused=true;;
esac
done
shift `expr $OPTIND - 1`
$confused || [ "$version_search" -eq 0 -o "$version_replace" -eq 0 ] && die "Usage: -s <version to search for> -r <version to replace with>"
! [[ "$version_search" =~ ^[1-4]$ ]] && die "Search version should be between 1-4"
! [[ "$version_replace" =~ ^[1-4]$ ]] && die "Replacement version should be between 1-4"
replace_version() {
local conf=$1
local version_current
[ -f "$conf" ] || die "File does not exist: $conf"
# Get current version if set in config
set +e
version_current=$(grep -soP "php1_select=\K[0-9]" $conf)
set -e
[ $? -eq 2 ] && die "grep encountered a fatal error"
if [ -z $version_current ]; then
# current version not found in config. assume "1"
#echo "$conf has no version set, assume 1"
version_current=1
fi
# Is this the version we're looking for?
if [ $version_current -eq $version_search ]; then
# replace or add line
sed -i '/^php1_select=/{h;s/=.*/='$version_replace'/};${x;/^$/{s//php1_select='$version_replace'/;H};x}' "$conf"
echo "$conf: changed"
fi
}
for f in /usr/local/directadmin/data/users/*/domains/*.conf; do
replace_version $f
done
echo "To update the running configuration, please run: /usr/local/directadmin/custombuild/build rewrite_confs"