Qu'est-ce que sh
sh
(ou de la Commande Shell Language) est un langage de programmation décrite par la norme POSIX
standard.
Il a de nombreuses implémentations (ksh88
, dash
, ...). bash
peut également être
considéré comme une œuvre d' sh
(voir ci-dessous).
Parce qu' sh
est une spécification, une mise en œuvre, /bin/sh
est un lien symbolique
(ou un lien en dur) pour une mise en œuvre effective sur la plupart des systèmes POSIX.
Qu'est-ce que bash
bash
a commencé comme un sh
-compatible mise en œuvre (même si elle est antérieure à la norme POSIX par quelques années), mais comme le temps passait, il a acquis de nombreuses extensions. Beaucoup de ces extensions peuvent modifier le comportement de valable POSIX scripts shell, par lui-même bash
n'est pas valide, le shell POSIX. C'est plutôt un dialecte du shell POSIX langue.
bash
prend en charge une --posix
de l'interrupteur, ce qui rend plus conforme à POSIX. Il tente également d'imiter POSIX si invoquée sh
.
sh == bash?
Pendant un long moment, /bin/sh
utilisée pour pointer /bin/bash
sur la plupart des systèmes GNU/Linux. En conséquence, il était presque devenu sans ignorer la différence entre les deux. Mais cela a commencé à changer récemment.
Certains des exemples de systèmes où l' /bin/sh
n'a pas de point d' /bin/bash
(et sur certains /bin/bash
peut même ne pas exister) sont:
- Moderne Debian et Ubuntu systèmes, qui symlink
sh
de dash
par défaut;
-
Busybox, qui est généralement de s'exécuter lors de la Linux démarrage du système dans le cadre de l'
initramfs
. Il utilise l' ash
shell de mise en œuvre.
- Les bsd. OpenBSD utilise
pdksh
, un descendant du Korn shell. FreeBSD sh
est un descendant de l'UNIX d'origine Bourne shell.
Ligne Shebang
En fin de compte, c'est à vous de décider lequel utiliser, par écrit, le «shebang» de ligne.
E. g.
#!/bin/sh
utilisera sh
(et tout ce qui arrive à point),
#!/bin/bash
utilisera /bin/bash
si elle est disponible (et échouer avec un message d'erreur si elle n'est pas). Bien sûr, vous pouvez également spécifier une autre mise en œuvre, par exemple
#!/bin/dash
Lequel utiliser
Pour mes propres scripts, je préfère sh
, pour les raisons suivantes:
- il est normalisé
- il est beaucoup plus simple et plus facile à apprendre
- il est portable sur les systèmes POSIX - même s'il leur arrive de ne pas avoir d'
bash
, ils sont tenus de disposer d' sh
Il y a des avantages à l'aide d' bash
. Ses caractéristiques en font une programmation plus pratique et similaire à la programmation dans d'autres langages de programmation modernes. Ces inclure des choses comme la portée des variables locales et des tableaux. Plaine sh
est un très minimaliste langage de programmation.