Iam, le script du développeur

Bonjour.

Je me suis écrit un script de managment pour un accès rapide à mes projets.
C’est un script relativement simple faisant appel à la commande 'name à laquelle on passe la longueur de la chaîne grâce à la commande ‹ random › pour générer un nom et qui lit la liste des projets dans un répertoire « Projects »

Ici on appelle computerman version 5 qui démarre automatiquement en mode Manager et on peut remplacer ces appel par emacs.

Voici le script :

#!/bin/bash
declare Response=;
declare Name=;
if [ ! -d Projects ]; then
    mkdir Projects ;
fi;
declare -a Projects=(`ls Projects`) ;
declare Max="`ls Projects | cat -n | tail -1 | awk '{print $1}'`";
declare Min="0";
declare Exist="False";
declare Index=0 ;
let Max=Max-1;
echo "create and maintain your projects ;"
echo "iam version 1"
date
echo "enter the name of project or"
echo "try 'no' to skip or"
echo "try 'yes' for to create project."
echo "try 'exit' to quit."
while (true) do
      #echo ${Projects[@]} ;
      #echo "Max=$Max" ;
      #echo "Min=$Min" ;
      #if [ ! $Max == 0 ]; then
      for I in $(seq 0 $Max); do
	  echo ${Projects[$I]} ;
      done;
      #fi;
      declare Count=`random` ;
      Name=`name $Count`;
      
      echo "am i $Name?" ;
      read Response ;
      if [ \"$Response\" = "\"yes\"" ]; then
	  echo "yes!" ;
	  mkdir Projects/$Name ;
	  
	  declare -a Projects=(${Projects[@]} $Name) ;
	  cd Projects/$Name ;
	  tar -x -v -f computerman-18.1.5b.tar
	  make -C computerman-18.1.5b head tail clean mrproper all
	  cp computerman-18.1.5b/bin/cpu ~/bin
	  ./computerman-18.1.5b/bin/computerman
	  cd ..
	  cd ..
      elif [ \"$Response\" = "\"exit\"" ]; then
	  break ;
      else
	  for J in $(seq 0 $Max); do
	      echo ${Projects[$J]} ;
	      if [ ${Projects[$J]} = $Response ]; then
		  declare Exist="True" ;
	      else
		  declare Exist="False" ;
	      fi;	      
	  done;
	  if [ $Exist = "True" ]; then
	      cd Projects/$Response ;
	      ./computerman-18.1.5b/bin/computerman
	      cd ..
	      cd ..
	  elif [ \"$Response\" = "\"\"" ]; then
	      echo ""
	  elif [ \"$Response\" = "\"no\"" ]; then
	      echo ""
	  else
	      mkdir Projects/$Response ;
	      
	      declare -a Projects=(${Projects[@]} $Response);
	      
	      cd Projects/$Response ;
	      tar -x -v -f ../../computerman-18.1.5b.tar
	      make -C computerman-18.1.5b head tail clean mrproper all
	      cp computerman-18.1.5b/bin/cpu ~/bin
	      ./computerman-18.1.5b/bin/computerman
	      cd ..
	      cd ..
	  fi;
      fi;
      declare -a Projects=(`ls Projects`) ;
      declare Max="`ls Projects | cat -n | tail -1 | awk '{print $1}'`";
      let Max=Max-1;
done;

A chaque tour de boucle on affiche la liste des projet est on attends la réponse.

Bonjour,
Quel est le besoin fonctionnel initial?
Quels types de projets?

utiliser git? ou svn? Gérer les projets avec Eclipses ? etc…

Bonjour Zargos.

Pour répondre à tes integrrogations, le besoin initial est d’être performant.
Pour ce qui est des projets, je penses que c’est une idée logicielle.
Cependant le manager de computerman ne gère que les projet Ada.

Alors réinventer la roue, c’est contre-productif.
Les outils comme git, svn, etc… se moquent du langage utilisé.
Et Eclipse est capable de gérer des projets ADA (et d’utiliser git et svn pour le versionning en prime, et quelques autres).

Woais mais ici je parle pas d’un manager.

Et ben tu remplace « computerman » par git.

Donc c’est bien ce que je dit, une réinvention de roues existantes.

J’aime bien réinventer des roues… Ça me permet de mieux comprendre comment d’autres ont fait la première invention, et à quel point j’ai pu me fourvoyer et faire des âneries, en sortant des roues hexagonales ou dont l’axe est tordu. Et j’apprends.

Plus sérieusement: je ne connaissais pas cette syntaxe:

Et la page de man ne m’a pas trop aidé (PostgreSQL…); de toute évidence, ça fabrique une variable. Mais en quoi cette syntaxe serait-elle préférable à une déclaration plus « classique », comme:

trou="2monQ"

?

Même question pour let:

let Max=Max-1;

à comparer à:

Max=$(( $Max - 1 ))

?

Quels sont les avantages (ne pas taper de $ (anticapitalisme?..), ne pas taper de parenthèses (et avoir l’air (un peu) moins Lispeux)) et inconvénients des deux approches?

Tout à fait d’accord ! On voit ce que donne actuellement la « productivité » avec les mauvais résultats économiques. La réelle productivité existe lorsqu’on laisse le temps au cerveau de comprendre et de réfléchir. De plus, chercher à comprendre, réfléchir, développe et entretien les réseaux neuronaux, retarde le vieillissement, accentue la motivation, et améliore la créativité. Trop de connaissances sont superficielles à cause d’un manque de temps laissé aux apprenants ou aux développeurs. Ceci dit, il est intéressant de se pencher sur les outils de productivité mais ne pas en abuser au risque d’effet contraire !

Enfin @pichux , le choix des variables doit être approprié et ne pas appartenir au registre de la vulgarité. Je vous invite à éditer votre post précédent pour le corriger en conséquence.

Pour répondre aux différentes syntaxes (2mn sur google ou autre):

  • $((…)) est appelé expansion arithmétique, ce qui est typique des shells bash et ksh. Cela permet de faire de l’arithmétique simple en nombre entier, mais pas de calcul à virgule flottante. Le résultat de l’expression remplace l’expression, comme dans echo $((1+1)) deviendrait echo 2
  • ((…)) est appelé évaluation arithmétique et peut être utilisé dans le cadre de si ((…)); puis ou pendant que ((…)); faire des déclarations. L’expansion arithmétique $((…)) remplace la sortie de l’opération et peut être utilisée pour assigner des variables comme dans i=$((i+1)) mais ne peut pas être utilisée dans les instructions conditionnelles.
  • $[…] est l’ancienne syntaxe pour l’expansion arithmétique qui est déconseillée. Voir aussi. Ceci a probablement été gardé pour que les anciens scripts bash ne se cassent pas. Cela n’a pas fonctionné dans ksh93, donc je suppose que cette syntaxe est spécifique à bash. REMARQUE : les espaces sont très importants ici; ne confondez pas $[1+1] avec des choses comme [ $a -eq $b]. La commande [ avec des espaces est connue sous le nom de commande de test, et vous la voyez généralement dans les parties de prise de décision. Il est très différent dans le comportement et le but.
  • let est un mot-clé bash et ksh qui permet la création de variables avec une évaluation arithmétique simple. Si vous essayez d’assigner une chaîne comme let a=« hello world » vous obtiendrez une erreur de syntaxe. Fonctionne dans bash et ksh93.
  • $(…) est une substitution de commande, où vous prenez littéralement la sortie d’une commande et l’assignez à une variable. Votre commande ici est expr, qui prend des arguments positionnels, comme expr arg1 arg2 arg3, donc les espaces sont importants. C’est un peu comme une petite calculatrice en ligne de commande pour l’arithmétique des nombres entiers, plus certains types de vrai/faux et de regex. Ceci est une commande shell-neutre.
1 J'aime