Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment écrire de menus interactifs sous UNIS

3 réponses
Avatar
Guytou
Bonjour à Tous,

J'apprends à écrire des scripts SHELL (sh) ou (ksh).
J'aimerai apprendre à écrire des scripts interactifs qui génèrent des menus.
Voici le script que j'ai trouvé sur le WEB mais qui ne marche pas. Je ne
sais pas pourquoi.
Merci de m'aider à le faire tourner ou me proposer un autre script ou un
autre modèle plus facile.
Merci aussi de me conseiller des tutoriels ou des sites WEB qui m'aideront à
mieux apprendre à écrire de menus interactifs sous UNIX.

#! /bin/sh
opt1="Entrez le nom du répertoire."
opt2="Entrez le nom du fichier à rechercher."
opt3="Entrez la date du jour."
opt4="quitter le progamme."
echo -e "\nMENU RECHERCHE FICHIER\n"

echo -e " Option Description\n"

PS3="
Entrez votre choix : "

select option in "$opt1" "$opt2" "$opt3" "$opt4"

do
case $option in
$opt1) echo "Vous avez choisi l'option : $opt1"
continue ;;
$opt2) echo "Vous avez choisi l'option : $opt2"
continue ;;
$opt3) echo "Vous avez choisi l'option : $opt3"
continue ;;
$opt4) echo "Vous avez choisi l'option : $opt4"
continue ;;
*) echo "Cette option n'existe pas";
break ;;
esac
done

Ce script ne fonctionne pas. Merci de me le corriger.

GUYTOU

3 réponses

Avatar
Thierry Boudet
On 2006-12-14, Guytou wrote:

Ce script ne fonctionne pas. Merci de me le corriger.

1) Il me faut une adresse postale pour envoyer le devis.

2) Veuillez préciser précisement votre version d'Unix.
3) Quel shell utilisez-vous ?


--
Pour ces souris, c'est index sur le bouton droit, majeur au-dessus de la
molette, annulaire sur le bouton droit et pouce et auriculaire sur les
côtés pour les mouvement latéraux.
{{ JL in fcol.debats: attention aux entorses }}

Avatar
Pascal Bourguignon
"Guytou" writes:
J'apprends à écrire des scripts SHELL (sh) ou (ksh).
J'aimerai apprendre à écrire des scripts interactifs qui génèrent des menus.
Voici le script que j'ai trouvé sur le WEB mais qui ne marche pas. Je ne
sais pas pourquoi.
Merci de m'aider à le faire tourner ou me proposer un autre script ou un
autre modèle plus facile.
Merci aussi de me conseiller des tutoriels ou des sites WEB qui m'aideront à
mieux apprendre à écrire de menus interactifs sous UNIX.


Le mieux c'est d'utiliser google.

Par exemple: tutorial shell programming
ou: initiation "programmation en shell"
etc..

Aussi, il ne faut pas forcément se limiter au shell, qui n'est apprès
tout qu'un langage de programmation bien limité (son seul avantage
étant sa spécialisation pour donner des commandes interactives et
combiner d'autres commandes et programmes). Je conseillerais donc une
initiation à la programmation générale, incluant une paire de langages
de programmation universels, comme Lisp (scheme) ou C (Pascal,
Modula-2), ou à la rigueur, Python ou Ruby ou Java.




En shell, on n'a pas beaucoup de choix au niveau des structures de
données. Ça rend la programmation assez difficile. Par exemple on
peut utiliser des vecteurs, mais on n'a pas de tableau à deux
dimensions ni plus. On peut s'en sortir en bidouillant avec les
chaînes.

Par exemple, je pourrais défini un menu comme un vecteur de chaînes
contenant une "structure" avec les informations suivante sur un
article de menu:

- chaîne à saisir pour lancer la commande.
- la commande à exécuter.
- le libélé de l'article de menu.


menu1=( 'x!echo "Executer commande X"!Commande X'
'c!ls -l!Lister fichiers.'
'z!echo truc!Faire truc'
'q!return 0!Quitter' )


# on peut alors afficher le menu comme ça:

print_menu () {
for item in "$@" ; do
echo "$item" | ( IFS='!' read key command label ; echo "${key}) ${label}" )
done
}


# et trouver l'article de menu sélectionné avec:

select_menu () {
local result=""
local choice="$1"
shift
result="$(for item in "$@" ; do
echo "$item"
| ( IFS='!' read key command label
if [ "$choice" = "$key" ] ; then
echo "$item"
fi )
done)"
if [ -z "$result" ] ; then
echo '!echo "There'''s no command '"$choice"'"!'
else
echo "$result"
fi
}


# et afficher le menu et lire le choix avec:

get_command () {
local choice
print_menu "$@" >> /dev/tty
read -p "Enter command: " choice >> /dev/tty
select_menu "$choice" "$@"
}


# ce qui permet d'écrire une boucle de commande comme ça:

main () {
while true ; do
eval "$(get_command "${menu1[@]}" | ( IFS='!' read key command label ; echo "$command" ))"
done
}


main




# Un autre type de menu, où l'on numérote des options en en mettant
# plusieurs par ligne:

menu_items=("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m")
menu_lines=3
menu_span=$(( ( $menu_lines - 1 + ${#menu_items[@]} ) / $menu_lines ))
column_width=$(( 80 / $menu_span ))
format="%2d %-$(( ${column_width} - 3 ))s"
i=0
while [ $i -lt $menu_lines ] ; do
j=$i
while [ $j -lt ${#menu_items[@]} ] ; do
printf "$format" $j ${menu_items[$j]}
j=$(( $j + $menu_lines ))
done
printf "n"
i=$(( $i + 1 ))
done
echo -n "Enter the file name or number: "
read namonum
if [ -z ${namonum//[0-9]} ] ; then
file="${menu_items[$namonum]}"
else
file="$namonum"
fi
echo file=$file




--
__Pascal Bourguignon__ http://www.informatimago.com/

"Specifications are for the weak and timid!"

Avatar
Moi

1) Il me faut une adresse postale pour envoyer le devis.
2) Veuillez préciser précisement votre version d'Unix.
3) Quel shell utilisez-vous ?


Je pense qu'il est bien inutile d'aider le guytou
On lui a proposé des soluces et il n'a même pas daigner nous
dire si cela lui convenait

Je m'en vais faire un tour à la buvette

Thierry