User Tools

Site Tools


ultimate_differences_amongst_unix_shells

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ultimate_differences_amongst_unix_shells [2021/03/09 23:45] – [C Shell] hc9ultimate_differences_amongst_unix_shells [2024/08/31 07:11] (current) – [Other Shells] _rc hc9
Line 1: Line 1:
 +====== Ultimate Differences Amongst UNIX® Shells ======
 +
 +This tutorial is a work in progress (WIP).
 +
 +===== Introduction =====
 +
 +The UNIX shells described in this tutorial include: osh (a port of the Thompson shell), sh (and sh-like shells), csh (and csh-like shells), and others.
 +
 +What are the critical differences and/or similarities among the various UNIX shells? The differences are generally command-line syntax issues.
 +
 +In the following sections, each example command line is noted by "Ecl [123]:". You can get an idea of how the shells differ by comparing the "Ecl [123]:" from each section against its corresponding "Ecl [123]:" in the other sections.
 +
 +The similarities among the UNIX shells described in this tutorial are more important than the differences. This is because when you learn how to use one shell, you in effect also learn how to use the others. In essence, each of the shells plays the same role from the user's perspective. That role is to act as an interface to the functionality which is available in the UNIX operating system.
 +
 +===== Thompson Shell =====
 +
 +In UNIX history, the Thompson shell preceded both the Bourne shell and the C shell, and its command language is a subset of both of these shells. Control flow in the Thompson shell is implemented via [[http://v6shell.org/man/if.1.html|if]](1) and [[http://v6shell.org/man/goto.1.html|goto]](1), which are external shell utilities. However, flow control in the Bourne and C shells is built into each shell.
 +
 +An enhanced port of the Thompson shell is available on SDF as ''/usr/pkg/bin/osh''. You can read its manual by doing a ''man osh'' at the command prompt. You can also read its manual [[http://v6shell.org/man/osh.1.html|online]] if you prefer to do so.
 +
 +**Ecl 1:**
 +
 +  % setenv PATH /usr/pkg/bin:/usr/bin:/bin ; printenv PATH
 +  /usr/pkg/bin:/usr/bin:/bin
 +
 +**Ecl 2:**
 +
 +  % which osh if goto ^ ( tr '\n' ' ' ; echo ) ^ sed 's/.*/ls -l &/' ^ osh
 +  -r-xr-xr-x  1 root  wheel   7880 Jul 18 21:37 /usr/pkg/bin/goto
 +  -r-xr-xr-x  1 root  wheel  14160 Jul 18 21:37 /usr/pkg/bin/if
 +  -r-xr-xr-x  1 root  wheel  38216 Jul 18 21:37 /usr/pkg/bin/osh
 +
 +**Ecl 3:**
 +
 +  % if -r /netbsd echo /netbsd: Is readable ; \
 +    if -w /netbsd echo /netbsd: Is writable
 +  /netbsd: Is readable
 +
 +... \\  Notice that the ''setenv'' command above is not available in the original Thompson shell. This is just one of the **osh** enhancements. Do we want to say anything about the PWB shell?
 +
 +===== Bourne Shell =====
 +
 +This includes the original Bourne shell, its derivatives, and workalikes. A true Bourne shell or a Bourne-like shell typically serves as the standard command interpreter on most UNIX systems.
 +
 +A Bourne-shell workalike is available on SDF as ''/bin/sh''. You can read its manual by doing a ''man sh'' at the command prompt. You can also read its manual [[http://netbsd.gw.com/cgi-bin/man-cgi?sh+1.alpha+NetBSD-2.1|online]] if you prefer to do so.
 +
 +**Ecl 1:**
 +
 +  $ PATH=/usr/pkg/bin:/usr/bin:/bin ; export PATH ; printenv PATH
 +  /usr/pkg/bin:/usr/bin:/bin
 +
 +**Ecl 2:**
 +
 +  $ ls -l `which sh ksh bash`
 +  -r-xr-xr-x  1 root  wheel  298431 Oct 24  2005 /bin/ksh
 +  -r-xr-xr-x  1 root  wheel  199717 Oct 24  2005 /bin/sh
 +  -rwxr-xr-x  1 root  wheel  963696 Jun  4 08:57 /usr/pkg/bin/bash
 +
 +**Ecl 3:**
 +
 +  $ if test -r /netbsd ; then echo /netbsd: Is readable ; fi ; \
 +  > if test -w /netbsd ; then echo /netbsd: Is writable ; fi
 +  /netbsd: Is readable
 +
 +===== Bourne-Again Shell =====
 +
 + The Bourne-Again shell (Bash) was written for the GNU project as a free software replacement for the Bourne shell. Bash can execute the vast majority of Bourne shell scripts without modification. However, its syntax has many extensions that are not present in the Bourne shell.
 +
 +The Bourne-Again shell is available on SDF as ''/usr/pkg/bin/bash''. You can read its manual by doing a ''man bash'' at the command prompt.
 +
 +
 +**Ecl 1:**
 +
 +  $ PATH=/usr/pkg/bin:/usr/bin:/bin ; export PATH ; printenv PATH
 +  /usr/pkg/bin:/usr/bin:/bin
 +
 +**Ecl 2:**
 +
 +  $ ls -l `which sh ksh bash`
 +  -r-xr-xr-x  1 root  wheel  298431 Oct 24  2005 /bin/ksh
 +  -r-xr-xr-x  1 root  wheel  199717 Oct 24  2005 /bin/sh
 +  -rwxr-xr-x  1 root  wheel  963696 Jun  4 08:57 /usr/pkg/bin/bash
 +
 +**Ecl 3:**
 +
 +  $ if test -r /netbsd ; then echo /netbsd: Is readable ; fi ; \
 +  > if test -w /netbsd ; then echo /netbsd: Is writable ; fi
 +  /netbsd: Is readable
 +
 +
 +===== Z Shell =====
 +
 +The Z shell (Zsh) is an extended Bourne shell with many improvements. Paul Falstad wrote the first version of Zsh in 1990 at Princeton University.
 +
 +The Z shell is available on SDF as ''/usr/pkg/bin/zsh''. You can read its manual by doing a ''man zsh'' at the command prompt.
 +
 +
 +**Ecl 1:**
 +
 +  % PATH=/usr/pkg/bin:/usr/bin:/bin ; export PATH ; printenv PATH
 +  /usr/pkg/bin:/usr/bin:/bin
 +
 +**Ecl 2:**
 +
 +  % ls -l `which csh tcsh zsh`
 +  -r-xr-xr-x  1 root  wheel  214333 Oct 24  2005 /bin/csh
 +  -r-xr-xr-x  1 root  wheel  459408 Jun 29  2005 /usr/pkg/bin/tcsh
 +  -r-xr-xr-x  2 root  wheel    6352 May 11  2007 /usr/pkg/bin/zsh
 +
 +**Ecl 3:**
 +
 +  % if test -r /netbsd ; then echo /netbsd: Is readable ; fi ; \
 +  > if test -w /netbsd ; then echo /netbsd: Is writable ; fi
 +  /netbsd: Is readable
 +
 +===== C Shell =====
 +
 +This includes the original C shell, its derivatives, and workalikes.
 +
 +The C shell is available on SDF as ''/bin/csh''. You can read its manual by doing a ''man csh'' at the command prompt. You can also read its manual [[http://netbsd.gw.com/cgi-bin/man-cgi?csh+1.alpha+NetBSD-2.1|online]] if you prefer to do so.
 +
 +**Ecl 1:**
 +
 +  % setenv PATH /usr/pkg/bin:/usr/bin:/bin ; printenv PATH
 +  /usr/pkg/bin:/usr/bin:/bin
 +
 +**Ecl 2:**
 +
 +  % ls -l `which csh tcsh zsh`
 +  -r-xr-xr-x  1 root  wheel  214333 Oct 24  2005 /bin/csh
 +  -r-xr-xr-x  1 root  wheel  459408 Jun 29  2005 /usr/pkg/bin/tcsh
 +  -r-xr-xr-x  2 root  wheel    6352 May 11  2007 /usr/pkg/bin/zsh
 +
 +**Ecl 3:**
 +
 +  % if (-r /netbsd) echo /netbsd: Is readable ; \
 +    if (-w /netbsd) echo /netbsd: Is writable
 +  /netbsd: Is readable
 +
 +===== Other Shells =====
 +
 +This section will include information about the Z shell, [[plan_9_9front#plan_9_-_rc |rc]] (AT&T Plan 9 shell), and any other UNIX shell which does not neatly fall into one category..?
 +
 +===== Conclusion =====
 +
 +Expand on the differences/similarities in light of the preceding content. One important thing to notice is that though there are differences... The similarities are more important IMO. After all, it is the similarities that allow the user to switch from one shell to another with little difficulty.
 +
 +----
 +
 +UNIX® is a registered trademark of [[http://www.opengroup.org/tm-guidelines.htm|The Open Group]]. \\ \\  $Id: shells.html,v 1.1 2008/12/19 16:35:57 jwodder Exp $ [[http://sdf.org/?tutorials/shells|Ultimate Differences Amongst UNIX® Shells]] - traditional link (using [[wp>Revision_Control_System|RCS]])