diff --git a/simpleadmin/www/cgi-bin/get_uptime b/simpleadmin/www/cgi-bin/get_uptime index 8e27fec..e149e40 100644 --- a/simpleadmin/www/cgi-bin/get_uptime +++ b/simpleadmin/www/cgi-bin/get_uptime @@ -3,19 +3,43 @@ # Execute the uptime command and extract the uptime duration uptime_output=$(uptime) -# Extract hours and minutes from the uptime string +# Example output of the uptime command +# 2 days, 14:08, + +# Extract days, hours and minutes from the uptime string + +# For days, match if day or days is present in the string +if [[ "$uptime_output" =~ day ]]; then + days=$(echo "$uptime_output" | awk -F '[ ,]+' '{print $2}') +else + days=0 +fi + hours=$(echo "$uptime_output" | awk -F '[ :]+' '{print $6}') minutes=$(echo "$uptime_output" | awk -F '[ :]+' '{print $7}') +# Check if days is empty, then set it to 0 +if [ -z "$days" ]; then + days=0 +fi + +# Remove comma to days +days=$(echo $days | tr -d ,) + # Remove comma to minutes minutes=$(echo $minutes | tr -d ,) -# Create a text response with the uptime duration -uptime_text="$hours hours and $minutes minutes" +# Create a text response with the uptime duration. If days is empty, then set it to 0 +uptime_text="$days days, $hours hours, $minutes minutes" -# if hours and minutes are 1 or 0, then remove the 's' from the end of the string -if [ $hours -eq 1 ] || [ $hours -eq 0 ]; then - uptime_text=$(echo $uptime_text | sed 's/hours/hour/g') +# If days is 0, then remove it from the text response +if [ "$days" -eq 0 ]; then + uptime_text="$hours hours, $minutes minutes" +fi + +# if days and hours are 0 or 1, remove s from the end of the string +if [ "$days" -eq 0 ] && [ "$hours" -eq 0 ] || [ "$days" -eq 1 ] && [ "$hours" -eq 1 ]; then + uptime_text=$(echo $uptime_text | sed 's/s//g') fi # Set header for plain text content