
Мне нужен скрипт, который проверяет, является ли ядро старше 4.1, и если да, то он запускает скрипт, если нет, то он не запускает. Пожалуйста, помогите. - Праджвал
Что-то вроде этого, но с проверкой ядра
if ! [ -x "$(command -v iptables)" ]; then
echo "Error: iptables is not installed, please install iptables." >&2
exit
fi
#!/bin/bash
version_above_4(){
# check if $BASH_VERSION is set at all
[ -z $BASH_VERSION ] && return 1
# If it's set, check the version
case $BASH_VERSION in
4.*) return 0 ;;
?) return 1;;
esac
}
if version_above_4
then
echo "Good"
else
echo "No good"
fi
решение1
Попробуй это:
#!/usr/bin/env bash
VERSION_LIMIT=4.1
CURRENT_VERSION=$(uname -r | cut -c1-3)
if (( $(echo "$CURRENT_VERSION > $VERSION_LIMIT" |bc -l) )); then
echo " Kernel version: $CURRENT_VERSION > Version Limit: $VERSION_LIMIT "
return 0
else
echo " Kernel version: $CURRENT_VERSION < Version Limit: $VERSION_LIMIT "
return 1
fi
решение2
Это должно сделать то, что вам нужно. Я использую uname -r
для печати версии ядра, затем awk
для разделения на точки и проверки основных и дополнительных номеров версий.
version_over_4_1
вернет 1 или 0.
#!/bin/bash
version_over_4_1(){
return $(uname -r | awk -F '.' '{
if ($1 < 4) { print 1; }
else if ($1 == 4) {
if ($2 <= 1) { print 1; }
else { print 0; }
}
else { print 0; }
}')
}
if version_over_4_1
then
echo "Kernel > 4.1"
else
echo "Kernel <= 4.1"
fi
решение3
#! /usr/bin/env bash
version_over_4_1(){
MAJOR_VERSION=$(uname -r | awk -F '.' '{print $1}')
MINOR_VERSION=$(uname -r | awk -F '.' '{print $2}')
if [ $MAJOR_VERSION -ge 4 ] && [ $MINOR_VERSION -gt 1 ] || [ $MAJOR_VERSION -ge 5 ] ; then
return 0
else
return 1
fi
}
Недостатком этого метода является то, что он вызывает awk
и uname
дважды, но он может быть более интуитивным, чем методы, которые этого не делают.
#! /usr/bin/env bash
version_over_4_1(){
read MAJOR_VERSION MINOR_VERSION <<<$(uname -r | awk -F '.' '{print $1, $2}')
if [ $MAJOR_VERSION -ge 4 ] && [ $MINOR_VERSION -gt 1 ] || [ $MAJOR_VERSION -ge 5 ] ; then
return 0
else
return 1
fi
}
Это вызывает awk
и uname
только один раз, но может оказаться не таким интуитивно понятным, как вы ищете.
решение4
# Lets check the kernel version
function kernel-check() {
CURRENT_KERNEL_VERSION=$(uname --kernel-release | cut --delimiter="." --fields=1-2)
CURRENT_KERNEL_MAJOR_VERSION=$(echo "${CURRENT_KERNEL_VERSION}" | cut --delimiter="." --fields=1)
CURRENT_KERNEL_MINOR_VERSION=$(echo "${CURRENT_KERNEL_VERSION}" | cut --delimiter="." --fields=2)
ALLOWED_KERNEL_VERSION="3.1"
ALLOWED_KERNEL_MAJOR_VERSION=$(echo ${ALLOWED_KERNEL_VERSION} | cut --delimiter="." --fields=1)
ALLOWED_KERNEL_MINOR_VERSION=$(echo ${ALLOWED_KERNEL_VERSION} | cut --delimiter="." --fields=2)
if [ "${CURRENT_KERNEL_MAJOR_VERSION}" -lt "${ALLOWED_KERNEL_MAJOR_VERSION}" ]; then
echo "Error: Kernel ${CURRENT_KERNEL_VERSION} not supported, please update to ${ALLOWED_KERNEL_VERSION}."
exit
fi
if [ "${CURRENT_KERNEL_MAJOR_VERSION}" == "${ALLOWED_KERNEL_MAJOR_VERSION}" ]; then
if [ "${CURRENT_KERNEL_MINOR_VERSION}" -lt "${ALLOWED_KERNEL_MINOR_VERSION}" ]; then
echo "Error: Kernel ${CURRENT_KERNEL_VERSION} not supported, please update to ${ALLOWED_KERNEL_VERSION}."
exit
fi
fi
}
kernel-check
Для тех, кто все еще ищет это.