Bonjour, tout le monde
Voici un bout de code que j’ai créé ces derniers jours :
text_menu_description[1]="Rooter votre tablette"
text_menu_description[2]="Enlever le root de votre tablette"
text_menu_description[3]="Flasher une image officielle de votre tablette"
text_menu_description[4]="Flasher une Custom ROM dans votre tablette"
text_menu_description[5]="Sauvegarder votre tablette"
text_menu_description[6]="Redémarrer votre tablette"
text_menu_description[7]="Quitter le programme !"
text_menu_name[1]="ROOT"
text_menu_name[2]="UNROOT"
text_menu_name[3]="FLASH"
text_menu_name[4]="CUSTOM"
text_menu_name[5]="BACKUP"
text_menu_name[6]="REBOOT"
text_menu_name[7]="EXIT"
function display_menu() {
if [[ "${ZENITY}" -ne 0 ]]; then
while :
do
choice=$( echos_menu | zenity_list "${text_welcome}" "${title_welcome}" "${count['name']}")
case $choice in
"${text_menu_name[1]}") root_tablet ;;
"${text_menu_name[2]}") unroot_tablet ;;
"${text_menu_name[3]}") proceed_initial_rom ;;
"${text_menu_name[4]}") proceed_custom_rom ;;
"${text_menu_name[5]}") save_tablet ;;
"${text_menu_name[6]}") reboot_tablet ;;
"${text_menu_name[7]}") display_mssg "n" "${text_goodbye}" "${title_goodbye}"; exit 0 ;;
esac
done
elif [[ "${DIALOG}" -ne 0 ]]; then
while :
do
echos_menu
dialog_menu "${text_welcome}" "${title_welcome}" "${count['name']}"
rm "${FILE_TMP}.menu"
if [[ $? -eq 0 ]]; then
choice=$(<"${FILE_TMP}")
case $choice in
"${text_menu_name[1]}") root_tablet ;;
"${text_menu_name[2]}") unroot_tablet ;;
"${text_menu_name[3]}") proceed_initial_rom ;;
"${text_menu_name[4]}") proceed_custom_rom ;;
"${text_menu_name[5]}") save_tablet ;;
"${text_menu_name[6]}") reboot_tablet ;;
"${text_menu_name[7]}") display_mssg "n" "${text_goodbye}" "${title_goodbye}"; exit 0 ;;
esac
fi
done
else
while :
do
echo "${title_welcome}"
PS3="${text_welcome}"
select choice in "${text_menu_description[@]}"
do
case $REPLY in
1) root_tablet ;;
2) unroot_tablet ;;
3) flash_initial_rom ;;
4) flash_custom_rom ;;
5) save_tablet ;;
6) reboot_tablet ;;
7|q|Q) display_mssg "n" "${text_goodbye}" "${title_goodbye}"; exit 0 ;;
esac
done
done
fi
if [[ $? -eq 1 ]]; then display_mssg "n" "${text_goodbye}" "${title_goodbye}"; fi
}
function echos_menu() {
i=1
if [[ $DIALOG -eq 1 ]]; then
while [ $i -le ${#text_menu_name[@]} ]; do
echo "${text_menu_name[$i]}|${text_menu_description[$i]}" >> "${FILE_TMP}.menu"
let "i = $i + 1";
done
while IFS="|" read col1 col2 || [ -n "$col1" ]; do
menu+=("$col1" "$col2")
done < "${FILE_TMP}.menu"
else
while [ $i -le ${#text_menu_name[@]} ]; do
echo "${text_menu_name[$i]}";
echo "${text_menu_description[$i]}";
let "i = $i + 1";
done
fi
unset i;
}
function zenity_list() {
height=$(bc <<< "$3 * 45 + 5")
zenity --column="${text_column_name}" --column="${text_column_description}" \
--list --height="${height}" --width=500 \
--text "$1" --title "$2"
}
La question que je me pose est la suivante : est-il possible d’écrire différemment ma function display_menu pour que là où il y a les ‘case’, ce soit géré dynamiquement … par gestion d’une boucle, par exemple - quite à renommer les fonctions appelées selon la valeur contenue dans le tableau ‘text_menu_name’