grep "menuentry " /boot/grub/grub.cfg
count the entries with tab in front, start at 0
sudo vi /etc/default/grub
change
GRUB_DEFAULT=0 #boots the latest kernel
to the desired kernel name
Increase timeout to 2 seconds to display boot menu if necessary:
GRUB_TIMEOUT=0
apply changes:
sudo update-grub
#!/bin/bash if [ "$LOGNAME" != "root" ] then echo "kernelchoice.sh needs to be run as root!" exit fi kernellist=() while IFS= read -r -d $'\n'; do kernellist+=("$REPLY") done < <(grep 'gnulinux.*generic-advanced' /boot/grub/grub.cfg | grep -v " set default" | cut -d "'" -f 4) PS3="Enter default kernel number, q to quit: " if [[ ${#kernellist[@]} -gt 0 ]]; then IFS=$'\n' select kernelname in "${kernellist[@]}" __QUIT__ do if [[ "$REPLY" == "q" ]]; then break; fi [[ -n "$kernelname" ]] || { echo "Invalid selection. Please try again.\n" >&2; continue; } if [[ "$kernelname" == "__QUIT__" ]]; then break; else advancedmenu=$(grep submenu /boot/grub/grub.cfg | cut -d "'" -f 4) sed -i s'/^GRUB_DEFAULT.*/GRUB_DEFAULT="'"$advancedmenu"'>'"$kernelname"'"/' /etc/default/grub echo "Set default kernel to $kernelname" echo "Updating grub" update-grub2 break; fi done unset IFS else echo "Could not find kernels" fi