Skip to content

Instantly share code, notes, and snippets.

@rogermaragh
Last active August 11, 2025 20:22
Show Gist options
  • Select an option

  • Save rogermaragh/19e9db3f2f6918daf0d58db4a7eebdcd to your computer and use it in GitHub Desktop.

Select an option

Save rogermaragh/19e9db3f2f6918daf0d58db4a7eebdcd to your computer and use it in GitHub Desktop.
macos_check_battery_health.sh
#--------------------------------------
# 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