Last active
August 11, 2025 20:22
-
-
Save rogermaragh/19e9db3f2f6918daf0d58db4a7eebdcd to your computer and use it in GitHub Desktop.
macos_check_battery_health.sh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #-------------------------------------- | |
| # Bash Shell Script for MacOS™ | |
| # Version:1 Build:0 Update:0 | |
| # By Roger Maragh | |
| # Copyright ©2025 All Rights Reserved | |
| # Freely Distributed, Freeware. | |
| #-------------------------------------- | |
| #---------------------------------------- | |
| #---------------------------------------- | |
| #!/usr/bin/env bash | |
| PASS=0 | |
| VERSION="1.0.0" | |
| SCRIPT_URL='https://gist.github.com/rogermaragh/19e9db3f2f6918daf0d58db4a7eebdcd/raw' | |
| compare() (IFS=" " | |
| exec awk "BEGIN{if (!($*)) exit(1)}" | |
| ) | |
| update() | |
| { | |
| wget --quiet --output-document=$0.tmp $SCRIPT_URL | |
| NEW_VER=$(grep "^VERSION" "$0.tmp" | awk -F'[="]' '{print $3}') | |
| if [ "$VERSION" \< "$NEW_VER" ] | |
| then | |
| printf "Updating script \e[31;1m%s\e[0m -> \e[32;1m%s\e[0m\n" "$VERSION" "$NEW_VER" | |
| OCTAL_MODE=$(stat -c '%a' $0) | |
| chmod $OCTAL_MODE $0.tmp | |
| mv $0.tmp $0 | |
| exit 0 | |
| else | |
| rm -f "$0.tmp" | |
| fi | |
| } | |
| rm -f "$0.tmp" | |
| update | |
| #echo "$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | awk '{print $25, $5, $8, $9, $11, $13, $14, $27}')" | |
| #echo "$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | awk '{print $24, $5, $7, $8, $10, $12, $13, $26}')" | |
| sudo amixer set Master 100% unmute | |
| sudo alsactl store | |
| dmidecode -s system-serial-number | |
| echo "RAM" | |
| dmidecode -t memory | grep 'Size' | |
| lsblk -o MODEL,SIZE,NAME -d | |
| #upower -i $(upower -e | grep 'BAT') | |
| #upower -i `upower -e | grep 'BAT'` | |
| #upower -i $(upower -e | grep BAT) | grep --color=never -E "state|to\ full|to\ empty|percentage" | |
| COMMAND="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | awk '{print $25, $5, $8, $9, $11, $13, $14, $27}')" | |
| ENERGYRATE="$(upower -i `upower -e | grep 'BAT'` | grep 'energy-rate' | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | awk '{print $2}')" | |
| #echo $COMMAND | |
| #echo $ENERGYRATE | |
| ./inxi -Bxxx | |
| if [ -z "$COMMAND" ]; then | |
| printf "\033[0;31mFAILED BATTERY TEST\033[0m\n"; exit 1; | |
| fi | |
| ENERGYRATE=${ENERGYRATE%%.*} | |
| #ECHECK="$(awk 'BEGIN { print ($ENERGYRATE >= 5) ? "1" : "0" }')" | |
| ECHECK="$(compare '"$ENERGYRATE" > 5' && echo 1 || echo 0)" | |
| #echo $ECHECK | |
| if [ $ECHECK -eq '1' ]; then | |
| PASS=1 | |
| printf "\033[0;31mENERGYRATE\033[0m\n"; | |
| echo $ENERGYRATE; | |
| fi | |
| CHARGE="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | sed s/%//g | sed s/\(//g | sed s/\)//g | awk '{print $5}')" | |
| #echo ${CHARGE%%.*} | |
| #echo ${CHARGE##*.} | |
| STATUS="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | sed s/%//g | sed s/\(//g | sed s/\)//g | awk '{print $25}')" | |
| CAPACITY="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | sed s/%//g | sed s/\(//g | sed s/\)//g | awk '{print $8}')" | |
| PERCENT="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | sed s/%//g | sed s/\(//g | sed s/\)//g | awk '{print $11}')" | |
| VOLTAGE="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | awk '{print $14-$13}')" | |
| CYCLE="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | awk '{print $27}')" | |
| if [ ${CHARGE%%.*} -eq 0 ]; then | |
| if [ ${CHARGE##*.} -eq 0 ]; then | |
| STATUS="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | sed s/%//g | sed s/\(//g | sed s/\)//g | awk '{print $24}')" | |
| CAPACITY="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | sed s/%//g | sed s/\(//g | sed s/\)//g | awk '{print $7}')" | |
| PERCENT="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | sed s/%//g | sed s/\(//g | sed s/\)//g | awk '{print $10}')" | |
| VOLTAGE="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | awk '{print $13-$12}')" | |
| CYCLE="$(./inxi -Bxxx | sed ':a;N;$!ba;s/\n/,/g' | sed s/\\/\/\ /g | awk '{print $26}')" | |
| fi | |
| fi | |
| #echo $STATUS | |
| if [ "$STATUS" = "Full" ]; then | |
| if [ ${CHARGE%%.*} -lt ${CAPACITY%%.*} ]; then | |
| printf "\033[0;31mSTATUS\033[0m\n"; | |
| echo $STATUS; | |
| upower -i `upower -e | grep 'BAT'` | |
| printf "\033[0;31mFAILED BATTERY TEST\033[0m\n"; exit 1; | |
| fi | |
| fi | |
| #echo $PERCENT | |
| if [ "$PERCENT" = "Wh" ]; then | |
| printf "\033[0;31mPERCENT\033[0m\n"; | |
| echo $PERCENT; | |
| upower -i `upower -e | grep 'BAT'` | |
| printf "\033[0;31mFAILED BATTERY TEST\033[0m\n"; exit 1; | |
| fi | |
| if [ $PERCENT -lt '70' ]; then | |
| PASS=1 | |
| printf "\033[0;31mPERCENT\033[0m\n"; | |
| echo $PERCENT; | |
| fi | |
| if [ $PERCENT -gt '100' ]; then | |
| PASS=$PASS #1 | |
| fi | |
| #echo ${VOLTAGE#-} | |
| VOLTAGE=${VOLTAGE#-} | |
| #CHECK="$(awk 'BEGIN { print ($VOLTAGE >= 2) ? "1" : "0" }')" | |
| CHECK="$(compare '"$VOLTAGE" > 2' && echo 1 || echo 0)" | |
| #echo $CHECK | |
| if [ $CHECK -eq '1' ]; then | |
| PASS=1 | |
| printf "\033[0;31mVOLTAGE\033[0m\n"; | |
| echo $VOLTAGE; | |
| fi | |
| #echo $CYCLE | |
| if [ $CYCLE -gt '700' ]; then | |
| PASS=1 | |
| printf "\033[0;31mCYCLE\033[0m\n"; | |
| echo $CYCLE; | |
| fi | |
| if [ $PASS -eq 1 ]; then | |
| upower -i `upower -e | grep 'BAT'` | |
| printf "\033[0;31mFAILED BATTERY TEST\033[0m\n"; exit 1; | |
| fi | |
| if [ $PASS -eq 0 ]; then | |
| printf "\033[0;32mPASSED BATTERY TEST\033[0m\n"; exit 1; | |
| fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment