Shell - mitä tarkoitan / käytän - Which shell ? | ||||
Shell frontpage
|
Howto
Shell scriptingShell Posix-standard based on Bourne Shell (bsh) and extension for bsh based from : Korn Shell (ksh88). There are lot of other shells which try to be also Posix/BourneShell compatible: bash, ash, dash, zsh, ...Some of the shells has good interactive using properties, better than bsh/ksh (if not like vi or emacs), but when I like to make compatible scripts, then my answer is ksh93. Most pure Posix shell is maybe ash/dash, but others include lot of good extension for scripting. I'll say that if you use #!/bin/sh then shell must be ash, dash or ksh. Those shell include full support for Posix. But if your script include line #!/bin/sh, I'll say: it include only Bourne Shell compatible lines. Why I say ksh93, not ksh ? Because some of *nix systems still use old ksh88 version. On the older *nix systems sh has been Bourne-Shell. Today situation is grazy: sh is ksh or posix-sh or bash or ash or dash or ... I have used shell scripting since 1984, most of my code in last 20 years has done using shell script. My answer for script shell is ksh ( ksh93). It support old Bourne Shell syntax and include Posix-standard. It also include some usable extension for scripting, example:
Why /bin/sh is not so good?Basic problem has defined in previous section.Solution ? Make selection which shell you use in your script. Make selection between ksh, ash, bash or zsh. My answer is ksh (read previous section), but you make your own. Ofcourse most of scripts can be compatible, works all of those shells, if use pure old Bourne Shell syntax.
Copy shell binary version to the some fixed dir and name: ex. /usr/local/bin/mysh
and use that path in your script. After this you know which shell you are using.
After this your first line in script:
My sh - which version it is ?Bash ? Look value of variable BASH_VERSINFO. If you have not bash then you get nothing. Newest (2009/8 status) is release 4.
echo "$BASH_VERSINFO"
Bourne Shell ? Original version for command substitution was use commandline
between ` `. After ksh88 has published, it has been also in Posix-standard and
I think every other than Bourne Shell can use more readable $( ) command substitution
marking. I like this because ( ) is subshell, so adding $ before it is
something "take value of command".
Zsh ? Look value of variable ZSH_VERSION. If you have not zsh then you get nothing.
Newest (2009/8 status) is version 4.3.
Ksh ? There is old ksh88 version in many commercial Unix, but since 1993 has been
ksh93. Ksh93 is easy to see, look variable .sh.version:
Ash/dash ? If all previous variable testing give always empty string or error, then maybe
it is ash (or dash). If typeset, echo substring, ... give also error then maybe ash ...
C-ShellSyntax is different, I stopped csh scripting about 20 years ago. I don't know any reason why to use it. If I need something more, then I use awk, perl, php, python, C, java, ...Some answers for csh.
|