Plusieurs approches existent pour trouver le palindrome d'un nombre dans un script shell Unix. Voici deux versions :une utilisant uniquement les commandes shell intégrées (plus portables mais potentiellement moins efficaces pour de très grands nombres) et une autre utilisant `awk` (plus efficace pour des nombres plus grands).
Version 1 :utilisation uniquement des éléments intégrés au shell (bash)
Cette version est plus portable car elle s'appuie uniquement sur des fonctionnalités communes à la plupart des shells compatibles Bourne. Cependant, cette méthode est moins efficace pour les très grands nombres en raison de la manipulation des chaînes.
```bash
#!/bin/bash
read -p "Entrez un nombre : " num
Inversez le nombre en utilisant la manipulation de chaîne
reverse_num=$(echo "$num" | rév)
Comparez les numéros d'origine et inversés
if [ "$num" =="$reversed_num" ]; alors
echo "$num est un palindrome."
autre
echo "$num n'est pas un palindrome."
fi
```
Version 2 :Utilisation d'awk (plus efficace)
Cette version utilise `awk`, qui est généralement plus efficace pour les manipulations numériques, notamment avec des nombres plus grands.
```bash
#!/bin/bash
read -p "Entrez un nombre : " num
Utilisez awk pour inverser le nombre et vérifier le palindrome
awk -v num="$num" 'BEGIN {
inversé_num ="" ;
temp_num =num;
tandis que (num_temp>
0) {
inversé_num =inversé_num (temp_num % 10) ;
num_temp =int(num_temp / 10);
}
if (num ==inversé_num) {
print num "est un palindrome."
} autre {
print num "n'est pas un palindrome."
}
}'
```
Comment utiliser l'un ou l'autre script :
1. Enregistrez le code sous forme de fichier (par exemple, « palindrome.sh »).
2. Rendez-le exécutable :`chmod +x palindrome.sh`.
3. Exécutez-le :`./palindrome.sh`.
4. Entrez un numéro lorsque vous y êtes invité.
Explication de la version 2 (awk) :
* `-v num="$num"` :transmet le numéro d'entrée de la variable shell `num` au script `awk`.
* `BEGIN` :ce bloc s'exécute avant de traiter les lignes d'entrée.
* `reversed_num ="";` :Initialise une chaîne vide pour stocker le nombre inversé.
* `temp_num =num;` :Crée une copie temporaire du numéro pour éviter de modifier l'original.
* `while (temp_num> 0)` :boucle jusqu'à ce que le nombre temporaire devienne 0.
* `reversed_num =reversed_num (temp_num % 10);` :extrait le dernier chiffre à l'aide de l'opérateur modulo (`%`) et l'ajoute à `reversed_num`.
* `temp_num =int(temp_num / 10);` :Supprime le dernier chiffre par division entière (`/`).
* L'instruction finale « if » compare les nombres originaux et inversés et imprime le message approprié.
La version `awk` est généralement recommandée pour son efficacité, notamment lorsqu'il s'agit de grands nombres. Choisissez la version qui correspond le mieux à vos besoins et à votre environnement shell. N'oubliez pas de gérer les erreurs potentielles (comme les saisies non numériques) pour un script plus robuste dans un environnement de production.
|