Comprendre csh : syntaxe, usages et scripts
Auteur : Rédaction Domeny.ForSale Publié le
En bref : csh, ou C shell, est un interpréteur de commandes : un programme qui interprète les commandes saisies et lance d’autres programmes sur les systèmes Unix et apparentés. Il permet de travailler de manière interactive et d’exécuter des scripts, avec une syntaxe qui rappelle en partie le langage C. Vous pouvez le rencontrer dans des environnements anciens, des outils techniques et des scripts existants ; pour un nouveau script d’administration, Bash ou sh sera généralement plus pratique.
À quoi sert csh et en quoi diffère-t-il du terminal ?
Le terminal est une interface textuelle dans laquelle vous saisissez des commandes et consultez leurs résultats. L’interpréteur de commandes, aussi appelé shell, fonctionne dans cet environnement : il lit les commandes, développe les notations abrégées, gère les redirections et lance les programmes. Ouvrir une fenêtre de terminal ne signifie donc pas que vous utilisez csh : elle peut accueillir Bash, Zsh ou un autre shell.
C shell a été créé à l’université de Californie à Berkeley, principalement par Bill Joy. Son nom fait référence à la ressemblance de certaines structures de contrôle avec celles du langage C, et non à une capacité à exécuter du code C. Vous ne pouvez pas lancer un fichier source C avec csh comme un simple script.
Avec csh, vous pouvez changer de répertoire, lancer des outils, les relier par des tubes et rediriger leurs résultats vers des fichiers. Le shell prend aussi en charge l’historique des commandes, les alias, c’est-à-dire des raccourcis de commandes personnalisés, ainsi que la gestion des tâches exécutées en arrière-plan.
De nombreuses commandes simples s’écrivent de la même façon dans différents shells. Par exemple, ls lance un programme qui affiche le contenu d’un répertoire. Les différences deviennent importantes pour les variables, les conditions, les boucles et la redirection des messages d’erreur.
À quoi ressemble la syntaxe de csh ?
Dans csh, vous définissez une variable ordinaire avec la commande set et une variable d’environnement avec setenv. Une variable d’environnement est transmise aux programmes lancés, ce qui lui permet d’influencer leur comportement.
set nom = "Anne"
echo "Bonjour, $nom"
setenv APP_MODE test
La première variable sert ici à construire un message. La seconde met la valeur APP_MODE=test à la disposition des programmes lancés ; son effet dépend du fait que le programme concerné la lise ou non.
Voici un exemple de boucle csh :
foreach couleur (rouge vert bleu)
echo "Couleur : $couleur"
end
Cette boucle affiche trois lignes. Elle ne fonctionnera pas telle quelle dans Bash, qui utilise une autre structure de boucle. De même, une instruction trouvée dans un tutoriel pour Bash, comme export APP_MODE=test, n’est pas la bonne manière de définir une variable d’environnement dans csh.
Ne transférez pas des blocs entiers de script d’un shell à l’autre sans vérifier la syntaxe. La compatibilité d’une commande isolée, telle que echo, ne garantit pas celle du script entier.
Comment vérifier si csh est présent sur votre système ?
Sur un système de type Unix, vous pouvez vérifier si le programme est accessible dans le chemin actuel de recherche des commandes :
which csh
Si vous obtenez un chemin, par exemple /bin/csh, le système parvient à trouver une commande portant ce nom. L’absence de résultat ne prouve pas toujours que le programme n’est pas installé : il peut se trouver en dehors des répertoires parcourus par le shell. La disponibilité de l’outil which et la forme du message dépendent également du système.
La commande echo $SHELL affiche généralement le chemin du shell de connexion, c’est-à-dire le shell attribué par défaut à l’utilisateur. Ce n’est pas un moyen fiable d’identifier le shell en cours d’exécution, car la valeur de cette variable peut rester inchangée après le lancement manuel d’un autre shell.
Si csh est disponible, saisir csh lance une session de shell supplémentaire. La commande exit vous ramène à la précédente. Pour faire un essai, cette méthode est plus simple que de modifier le shell par défaut du compte ; pour les instructions d’installation, mieux vaut consulter la documentation du système concerné.
Csh, tcsh, Bash et sh : lequel choisir ?
tcsh est une évolution de csh, largement compatible avec lui et offrant des fonctions interactives plus avancées, notamment l’édition de la ligne de commande et la complétion des noms. Sur certains systèmes, la commande csh lance en réalité tcsh. Pour diagnostiquer un problème, c’est donc l’implémentation réellement utilisée qui compte, et pas seulement le nom de la commande.
| Shell | Quand l’utiliser |
|---|---|
| csh | Pour maintenir des scripts et des environnements nécessitant la syntaxe C shell. |
| tcsh | Pour travailler de manière interactive dans un environnement fondé sur la famille csh. |
| Bash | Pour de nouveaux scripts, lorsque Bash est disponible sur les machines cibles. |
| sh | Pour des scripts portables utilisant une syntaxe conforme à la norme POSIX. |
POSIX est une famille de normes qui décrivent des interfaces communes aux systèmes de type Unix, notamment le comportement du shell. Csh n’est pas compatible avec la syntaxe du shell POSIX. La recommandation d’utiliser Bash ou sh pour de nouveaux scripts tient surtout à la portabilité et à la facilité de réutilisation des outils et exemples courants d’administration, et non à une incapacité de csh à automatiser des tâches.
Comment lancer un fichier destiné à csh ?
Un fichier portant l’extension .csh contient généralement un script C shell, mais l’extension seule ne permet pas de déterminer son contenu. La première ligne, par exemple #!/bin/csh, donne une indication. Il s’agit du shebang : une ligne qui indique l’interpréteur à utiliser lorsqu’un fichier exécutable est lancé directement.
Après avoir examiné le contenu d’un fichier de confiance, vous pouvez le lancer en indiquant explicitement l’interpréteur :
csh skrypt.csh
Cette méthode ne nécessite pas d’accorder au fichier la permission d’exécution, mais elle exige la permission de lecture. Le script s’exécute avec les droits de l’utilisateur qui le lance : ne testez donc pas un fichier inconnu avec sudo.
Si les instructions du projet exigent csh, vérifiez d’abord sa disponibilité et les exigences du projet. Ne le remplacez pas automatiquement par la commande bash skrypt.csh : changer d’interpréteur ne traduit pas la syntaxe du script.
À lire aussi : Que se passe-t-il après l’expiration d’un nom de domaine ?
