# Iam, le script du développeur

**URL:** <https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505>\
**Category:** Programmation\
**Created:** [Octobre 29, 2024, 11:21 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505 "2024-10-29T23:21:20Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Octobre 29, 2024, 11:21 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/1 "2024-10-29T23:21:20Z")

</div>

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 ‹&nbsp;random&nbsp;› pour générer un nom et qui lit la liste des projets dans un répertoire «&nbsp;Projects&nbsp;»

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

Voici le script :

```bash
#!/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.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Octobre 30, 2024, 8:37 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/2 "2024-10-30T08:37:49Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Octobre 31, 2024, 1:02 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/3 "2024-10-31T13:02:58Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Octobre 31, 2024, 1:24 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/4 "2024-10-31T13:24:42Z")

</div>

> [@anon2873143](#):
>
> le besoin initial est d’être performant.

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).

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 2, 2024, 5:48 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/5 "2024-11-02T05:48:25Z")

</div>

Woais mais ici je parle pas d’un manager.

Et ben tu remplace «&nbsp;computerman&nbsp;» par git.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Novembre 2, 2024, 11:22 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/6 "2024-11-02T11:22:06Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![pichux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pichux/32/3081_2.png) [@pichux](https://www.debian-fr.org/u/pichux)\
**Post date:** [Novembre 3, 2024, 4:39 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/7 "2024-11-03T16:39:34Z")

</div>

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:

> [@anon2873143](#):
>
> `declare Response=;`

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 «&nbsp;classique&nbsp;», comme:

```auto
trou="2mon"

```

?

Même question pour `let`:

```auto
let Max=Max-1;

```

à comparer à:

```auto
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?

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Novembre 4, 2024, 11:07 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/8 "2024-11-04T11:07:45Z")

</div>

> [@pichux](#):
>
> J’aime bien réinventer des roues… Ça me permet de mieux comprendre comment d’autres ont fait la première invention,

Tout à fait d’accord ! On voit ce que donne actuellement la «&nbsp;productivité&nbsp;» 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.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Novembre 4, 2024, 12:14 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/9 "2024-11-04T12:14:23Z")

</div>

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=«&nbsp;hello world&nbsp;» 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.

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Novembre 6, 2024, 7:27 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/10 "2024-11-06T07:27:11Z")

</div>

Bonjour,

Je vois pas la pertinence de vos objections.  
Ce script fonctionne très bien.

---

<div class="post-metadata">

**Author:** ![pichux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pichux/32/3081_2.png) [@pichux](https://www.debian-fr.org/u/pichux)\
**Post date:** [Novembre 24, 2024, 6:29 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/11 "2024-11-24T18:29:33Z")

</div>

Merci bien, mais ceci ne répond point à mon questionnement concernant l’intérêt ou pas d’avoir recours à l’instruction `declare`.

---

<div class="post-metadata">

**Author:** ![pichux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pichux/32/3081_2.png) [@pichux](https://www.debian-fr.org/u/pichux)\
**Post date:** [Novembre 24, 2024, 6:30 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/12 "2024-11-24T18:30:02Z")

</div>

Ah, mais je n’ai aucune objection, bien au contraire!

C’est chouette, un script qui marche, bravo.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Novembre 24, 2024, 8:23 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/13 "2024-11-24T20:23:53Z")

</div>

> [@pichux](#):
>
> Merci bien, mais ceci ne répond point à mon questionnement concernant l’intérêt ou pas d’avoir recours à l’instruction `declare` .

declare ne sert à rien excepté si tu veux que la variable soit déclarée avec un type.

une déclaration implicite est suffisante dans la plupart des cas:

```auto
mavar="du texte"

```

Mais su tu veux un variable integer:

```auto
declare -i iVar

```

ou la declarer en array:  
Indexée

```auto
declare -a aVar

```

associatif

```auto
declare -A aVar

```

etc…

Ce qui fait que dans ton script:

```auto
declare variable=

```

Ca ne sert à rien.

Après pour imprimer la variable Projects, je pense que tu peux te passer d’une boucle avec:

```auto
printf '%s\n' "${Projects[@]}"

```

> [@anon2873143](#):
>
> `declare -a Projects=(`ls Projects`) ;`

Le point-virgule à la fin ne sert à rien. Il n’est utilisé que si tu met une autre commande derrière avec un espace après le point-virgule.

> [@anon2873143](#):
>
> ```auto
> declare Max="`ls Projects | cat -n | tail -1 | awk '{print $1}'`";
> 
> ```

Pour calculer Max:

```auto
Max=${#Projects[@]}

```

je ne connais pas les fonction `name` et `random` qui ne sont pas des fonctions de base de Bash.

> [@anon2873143](#):
>
> `if [\"$Response\" = "\"yes\""]; then`

Pourquoi les \ pour Response et yes ? il suffit de mettre:

```auto
if ["$Response" = "yes"]; then

```

> [@anon2873143](#):
>
> `declare -a Projects=(${Projects[@]} $Name) ;`

le declare est de trop , et même il suffit de faire:

```auto
Project=+("$Name")

```

Plutot que de faire des `if then elif` pour traiter les cas à Response, tu devrai plutôt utiliser `case esac`

> [@anon2873143](#):
>
> ```auto
> for J in $(seq 0 $Max); do
> echo ${Projects[$J]} ;
> if [${Projects[$J]} = $Response ]; then
> declare Exist="True" ;
> else
> declare Exist="False" ;
> fi;	      
> done;
> 
> ```

utiliser un Max calculé,peut être remplacé directement par une boucle while si ton tableau a au moins un élément:

```auto
while red -r _response
do
	      echo $_response ;
	      if ["$_response" = $Response]; then
		  declare Exist="True" ;
	      else
		  declare Exist="False" ;
	      fi;
done <<< "${Projects[@]}"

```

Ceci dit, le dernier élément a toujours raison, c’est lui qui détermine la suite. de fait, si le dernier donne Exist=false, quelques soient les autres résultats précédent, Exist ne pourra jamais être à True

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Décembre 30, 2024, 2:26 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/14 "2024-12-30T14:26:10Z")

</div>

Je vois pas la pertience de vos objections.  
Ce scripte functionne très bien.  
2

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Décembre 30, 2024, 2:29 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/15 "2024-12-30T14:29:27Z")

</div>

Si je réponds «&nbsp;lisibilité&nbsp;» ; J’ai bon ?

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Janvier 2, 2025, 2:25 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/16 "2025-01-02T14:25:14Z")

</div>

Bonjour @anon2873143  
Pour la lisibilité et si c’est possible, les lignes avec declare mériteraient une indentation. Consultez aussi la PEP 257 ainsi que les PEP 256 et PEP258 pour des pistes relatives à la documentation et donc à la lisibilité du code. Elles sont dédiées à Python mais elles peuvent s’appliquer à beaucoup de langages.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Janvier 3, 2025, 1:40 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/17 "2025-01-03T13:40:17Z")

</div>

Si tu ne vois pas la pertinence alors tu es condamné à faire du code sale.  
et du code sale c’est du code mal maintenu avec des effets collatéraux éventuels que tu ne verras probablement pas.

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Janvier 4, 2025, 7:00 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/18 "2025-01-04T19:00:39Z")

</div>

Je comprends votre aspiration à une écriture s’attachant à une bonne lisibilité et je la partage.

En revanche ici, l’indentation est celle permise à l’utilisation de Gnu/Emacs et j’en suis satisfait.

D’aileurs quelle indentation pourrait ton ajouter ?

---

<div class="post-metadata">

**Author:** ![anon2873143](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/ee59a6/32.png) [@anon2873143](https://www.debian-fr.org/u/anon2873143)\
**Post date:** [Janvier 4, 2025, 7:05 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/19 "2025-01-04T19:05:58Z")

</div>

Zargos, malgrè le respect que je vous dois ; Je vous prie de mesurer votre discours.

A moins que vous projettiez ; Je vous invite à réviser vos algorithmes ne correspondant pas aux miens.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Janvier 4, 2025, 11:19 UTC](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505/20 "2025-01-04T23:19:27Z")

</div>

Oui il me semblait bien que la critique ne faisait pas parti de vos algotruc.

[Page suivante](https://www.debian-fr.org/t/iam-le-script-du-developpeur/90505.md?page=2)
