refactored package check to return values based on logic

This commit is contained in:
alanw 2023-06-20 14:50:37 -07:00
parent 543a836f42
commit b24e2f6b0b

201
functions
View file

@ -2,7 +2,7 @@
# pyr0ball script functions library
# Initial Vars
functionsrev=1.6.3
functionsrev=1.6.4
#scriptname="${BASH_SOURCE[0]##*/}"
#rundir="${BASH_SOURCE[0]%/*}"
#runuser="$(whoami)"
@ -1180,9 +1180,12 @@ install-packages(){
esac
}
check-packages(){
check-packages() {
# Utilizes system package manager to check for installed packages
# Declare arrays for online and offline packages
declare -a packages=()
declare -a offline_packages=()
# Separate online and offline packages
for arg in "$@"; do
if [[ -f $arg ]]; then
offline_packages+=("$arg")
@ -1190,51 +1193,191 @@ check-packages(){
packages+=("$arg")
fi
done
# Identify the system
identify-system
case $ID in
# Check packages based on system type
case $ID in
amzn | centos | fedora | rhel)
[ "${#packages[@]}" -gt 0 ] && run sudo yum list installed "${packages[@]}"
[ "${#offline_packages[@]}" -gt 0 ] && run sudo rpm -q "${packages[@]}"
;;
arch | Arch | manjaro)
if [ "${#packages[@]}" -gt 0 ]; then
run sudo pacman -Qs "${packages[@]}"
fi
[ "${#offline_packages[@]}" -gt 0 ] && run sudo pacman -Q "${offline_packages[@]}"
;;
debian | ubuntu | Ubuntu)
if [ "${#packages[@]}" -gt 0 ]; then
run sudo dpkg -s "${packages[@]}"
fi
[ "${#offline_packages[@]}" -gt 0 ] && run sudo dpkg -s "${offline_packages[@]}"
;;
opensuse | sles)
if [ "${#packages[@]}" -gt 0 ]; then
run sudo zypper se "${packages[@]}"
fi
[ "${#offline_packages[@]}" -gt 0 ] && run sudo rpm -q "${offline_packages[@]}"
;;
slackware)
# Check online packages
if [ "${#packages[@]}" -gt 0 ]; then
for package in "${packages[@]}"; do
run sudo slackpkg search "$package"
if yum list installed "$package" >/dev/null 2>&1; then
installed_version=$(yum list installed "$package" | grep "$package" | awk '{print $2}')
available_version=$(yum list available "$package" | grep "$package" | awk '{print $2}')
if [ "$installed_version" = "$available_version" ]; then
return 0
elif [ "$installed_version" \> "$available_version" ]; then
return 3
else
return 1
fi
else
return 2
fi
done
fi
# Check offline packages
if [ "${#offline_packages[@]}" -gt 0 ]; then
for package_file in "${offline_packages[@]}"; do
run sudo slackpkg search "$package_file"
if rpm -q --quiet "$package_file"; then
installed_version=$(rpm -q "$package_file" --qf "%{VERSION}")
return 0
else
return 2
fi
done
fi
;;
arch | Arch | manjaro)
# Check online packages
if [ "${#packages[@]}" -gt 0 ]; then
for package in "${packages[@]}"; do
if pacman -Q "$package" >/dev/null 2>&1; then
installed_version=$(pacman -Q "$package" | awk '{print $2}')
available_version=$(pacman -Si "$package" | grep "Version" | awk '{print $3}')
if [ "$installed_version" = "$available_version" ]; then
return 0
elif [ "$installed_version" \> "$available_version" ]; then
return 3
else
return 1
fi
else
return 2
fi
done
fi
# Check offline packages
if [ "${#offline_packages[@]}" -gt 0 ]; then
for package_file in "${offline_packages[@]}"; do
if pacman -Qp "$package_file" >/dev/null 2>&1; then
installed_version=$(pacman -Qp "$package_file" | awk '{print $2}')
return 0
else
return 2
fi
done
fi
;;
debian | ubuntu | Ubuntu)
# Check online packages
if [ "${#packages[@]}" -gt 0 ]; then
for package in "${packages[@]}"; do
if dpkg -s "$package" >/dev/null 2>&1; then
installed_version=$(dpkg -s "$package" | grep -E "^Version:" | awk '{print $2}')
available_version=$(apt-cache show "$package" | grep -E "^Version:" | awk '{print $2}')
if [ "$installed_version" = "$available_version" ]; then
return 0
elif [ "$installed_version" \> "$available_version" ]; then
return 3
else
return 1
fi
else
return 2
fi
done
fi
# Check offline packages
if [ "${#offline_packages[@]}" -gt 0 ]; then
for package_file in "${offline_packages[@]}"; do
if dpkg -I "$package_file" >/dev/null 2>&1; then
installed_version=$(dpkg -I "$package_file" | grep -E "^ Version:" | awk '{print $3}')
return 0
else
return 2
fi
done
fi
;;
opensuse | sles)
# Check online packages
if [ "${#packages[@]}" -gt 0 ]; then
for package in "${packages[@]}"; do
if zypper info "$package" >/dev/null 2>&1; then
installed_version=$(zypper info "$package" | grep "Version" | awk '{print $3}')
available_version=$(zypper se -i "$package" | grep "Version" | awk '{print $3}')
if [ "$installed_version" = "$available_version" ]; then
return 0
elif [ "$installed_version" \> "$available_version" ]; then
return 3
else
return 1
fi
else
return 2
fi
done
fi
# Check offline packages
if [ "${#offline_packages[@]}" -gt 0 ]; then
for package_file in "${offline_packages[@]}"; do
if rpm -q --quiet "$package_file"; then
installed_version=$(rpm -q "$package_file" --qf "%{VERSION}")
return 0
else
return 2
fi
done
fi
;;
slackware)
# Check online packages
if [ "${#packages[@]}" -gt 0 ]; then
for package in "${packages[@]}"; do
if slackpkg search "$package" >/dev/null 2>&1; then
installed_version=$(slackpkg search "$package" | awk '{print $3}')
return 0
else
return 2
fi
done
fi
# Check offline packages
if [ "${#offline_packages[@]}" -gt 0 ]; then
for package_file in "${offline_packages[@]}"; do
if slackpkg search "$package_file" >/dev/null 2>&1; then
installed_version=$(slackpkg search "$package_file" | awk '{print $3}')
return 0
else
return 2
fi
done
fi
;;
brew)
[ "${#packages[@]}" -gt 0 ] && run brew list "${packages[@]}"
# Check online packages
if [ "${#packages[@]}" -gt 0 ]; then
for package in "${packages[@]}"; do
if brew list "$package" >/dev/null 2>&1; then
installed_version=$(brew list --versions "$package" | awk '{print $2}')
available_version=$(brew info "$package" | head -n 1 | awk '{print $3}')
if [ "$installed_version" = "$available_version" ]; then
return 0
elif [ "$installed_version" \> "$available_version" ]; then
return 3
else
return 1
fi
else
return 2
fi
done
fi
# Check offline packages
if [ "${#offline_packages[@]}" -gt 0 ]; then
for package_file in "${offline_packages[@]}"; do
run brew list "$package_file"
if brew list "$package_file" >/dev/null 2>&1; then
installed_version=$(brew list --versions "$package_file" | awk '{print $2}')
return 0
else
return 2
fi
done
fi
;;
esac
}
set-boxtype