2010-09-09 10 views
1

Je suis très nouveau en programmation. La tâche suivante semble très simple mais je ne sais pas comment le faire. Appréciez si quelqu'un peut me donner quelques conseils. J'utilise Linux OS. Je voudrais créer un programme CLI et laisser l'utilisateur l'exécuter dans un terminal shell. Je prévois d'utiliser le script shell Bash pour créer ce programme, mais C++ ou Perl devrait aussi convenir. Le programme CLI accepte les commandes de l'utilisateur, les exécute et affiche éventuellement le résumé des résultats à l'écran. Lorsque le programme CLI est en cours d'exécution, je voudrais qu'il affiche toujours une "invite de shell" sur le côté gauche du terminal shell, tout comme l'invite du shell Bash. L'invite indique que le programme CLI attend que l'utilisateur saisisse une commande et appuie sur la touche de retour.Comment créer un programme CLI avec "shell prompt"?

[[email protected] user]$ # This is Bash shell 
[[email protected] user]$./CliApp.sh 
CliApp > # The CLI program is running, user can type in command here 
CliApp > exit 
[[email protected] user]$ # Now the user has returned to the Bash shell 

Je pense que je sais comment imprimer quelque chose sur l'écran et d'obtenir des entrées des utilisateurs, mais je trouve qu'il est très professionnel. Je crois qu'il existe une meilleure façon de créer ce genre de programme.

Quelqu'un peut-il me donner quelques conseils sur la façon de créer ce genre de programme? Appréciez si vous pouvez me donner les liens vers un exemple de programme. Merci.

+0

Montrez ce que vous avez déjà et posez des questions spécifiques à ce sujet. –

+1

quoi, exactement, pensez-vous semble non professionnel? L'exemple que vous avez fourni ressemble à l'exécution de commandes depuis un shell. Avez-vous des exemples d'éléments non professionnels? – atk

+0

Désolé pour la confusion. Je voudrais créer une invite de shell pour mon programme. L'invite doit se souvenir de "l'environnement" où l'utilisateur se trouve actuellement. L'exemple est le logiciel Cisco IOS. Lorsque l'utilisateur se connecte pour la première fois, l'invite est "Router>". Après avoir entré le mot de passe, l'utilisateur devient "Router #". Si l'utilisateur saisit la commande "terminal de configuration". Il deviendra "Router (config) #". Si l'utilisateur veut configurer une interface, l'invite deviendra "Router (config-if) #". L'environnement déterminera quelles commandes l'utilisateur peut utiliser. Certaines commandes ne peuvent être exécutées que dans certains environnements. – BGN

Répondre

3

puisque vous devez utiliser un interpréteur de commandes (bash, csh, sh, ou quelque chose d'autre) L'écriture d'un interpréteur de commandes par script shell semble un peu redondant pour moi, pour être en mesure de le faire.

Il est possible de personnaliser votre invite bash si c'est ce que vous cherchez.

Il existe des bibliothèques C/C++ que vous pouvez utiliser pour vous aider à construire votre propre processeur/interpréteur de commandes, qui comprend les fonctionnalités fantaisie, comme l'achèvement de l'onglet. Vous devriez jeter un regard ceux-ci:

+0

"Personnaliser bash" ici pourrait signifier simplement créer des fonctions (ou mettre des scripts sur le 'PATH') qui font les choses que vous voulez dans votre application, mais directement dans bash.(Par exemple, j'utilise bash/zsh tous les jours mais avec un tas de commandes supplémentaires disponibles à partir de [ma propre bibliothèque] (https://github.com/joeytwiddle/jsh) sur le 'PATH'.) – joeytwiddle

4

Vous cherchez quelque chose le long des lignes de ce qui suit?

#!/bin/bash                          
input="" 
while [ "$input" != "exit" ] 
do 
    echo -n "cliApp($mode) > " && read input 
    if [ "$input" = "config" ] 
    then 
     mode="config" 
    elif [ "$input" = "up" ] 
    then 
     mode="" 
    elif [ "$input" = "exit" ] 
    then 
    break 
    else 
     if [ "$mode" = "config" ] 
     then 
      if [ "$input" = "list" ] 
      then 
       echo "ABCD" 
      else 
       echo "Invalid" 
      fi 
     else 
      echo "Invalid" 
     fi 
    fi 
done 

exit 
Questions connexes