shell入门 shell也有好多种

来源:互联网 发布:vb 如何获取窗体控件 编辑:程序博客网 时间:2024/06/05 06:19
1.IntroductionBourne Shell(即sh)是UNIX最初使用的shell,平且在每种UNIX上都可以使用。Bourne Shell在shell编程方便相当优秀,但在处理与用户的交互方便作得不如其他几种shell。LinuxOS默认的是Bourne Again Shell,它是Bourne Shell的扩展,简称bash,与Bourne Shell完全兼容,并且在Bourne Shell的基础上增加,增强了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多C Shell和Korn Shell中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面C Shell是一种比Bourne Shell更适合的变种Shell,它的语法与C语言很相似。Linux为喜欢使用C Shell的人提供了Tcsh。Tcsh是C Shell的一个扩展版本。Tcsh包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似C语言的语法,他不仅和Bash Shell提示符兼容,而且还提供比Bash Shell更多的提示符参数。Korn Shell集合了C Shell和Bourne Shell的优点并且和Bourne Shell完全兼容。Linux系统提供了pdksh(ksh的扩展),它支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。Linux还包括了一些流行的Shell 如:ash,zsh等。每个Shell都有它的用途,有些Shell是有专利的,有些能从Internet或其他来源获得。2.How does bash differ from sh, the Bourne shell?This is a non-comprehensive list of features that differentiate bash from the SVR4.2 shell.  The bash manual page explains these more completely.Things bash has that sh does not:        long invocation options        [+-]O invocation option        -l invocation option        `!' reserved word to invert pipeline return value        `time' reserved word to time pipelines and shell builtins        the `function' reserved word        the `select' compound command and reserved word        arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done        new $'...' and $"..." quoting        the $(...) form of command substitution        the $(<filename) form of command substitution, equivalent to                $(cat filename)        the ${#param} parameter value length operator        the ${!param} indirect parameter expansion operator        the ${!param*} prefix expansion operator        the ${param:offset[]} parameter substring operator        the ${param/pat[/string]} parameter pattern substitution operator        expansions to perform substring removal (${p%[%]w}, ${p#[#]w})        expansion of positional parameters beyond $9 with ${num}        variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,                   TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,                   LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,                   ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,                   HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,                   PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,                   SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,                   auto_resume        DEBUG trap        ERR trap        variable arrays with new compound assignment syntax        redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-        prompt string special char translation and variable expansion        auto-export of variables in initial environment        command search finds functions before builtins        bash return builtin will exit a file sourced with `.'        builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.                  export -n/-f/-p/name=value, pwd -L/-P,                  read -e/-p/-a/-t/-n/-d/-s/-u,                  readonly -a/-f/name=value, trap -l, set +o,                  set -b/-m/-o option/-h/-p/-B/-C/-H/-P,                  unset -f/-v, ulimit -m/-p/-u,                  type -a/-p/-t/-f/-P, suspend -f, kill -n,                  test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S        bash reads ~/.bashrc for interactive shells, $ENV for non-interactive        bash restricted shell mode is more extensive        bash allows functions and variables with the same name        brace expansion        tilde expansion        arithmetic expansion with $((...)) and `let' builtin        the `...' extended conditional command        process substitution        aliases and alias/unalias builtins        local variables in functions and `local' builtin        readline and command-line editing with programmable completion        command history and history/fc builtins        csh-like history expansion        other new bash builtins: bind, command, compgen, complete, builtin,                                 declare/typeset, dirs, enable, fc, help,                                 history, logout, popd, pushd, disown, shopt,                                 printf        exported functions        filename generation when using output redirection (command >a*)        POSIX.2-style globbing character classes        POSIX.2-style globbing equivalence classes        POSIX.2-style globbing collating symbols        egrep-like extended pattern matching operators        case-insensitive pattern matching and globbing        variable assignments preceding commands affect only that command,even for builtins and functions        posix mode        redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,                /dev/tcp/host/port, /dev/udp/host/port        debugger support, including `caller' builtin and new variables        RETURN trapThings sh has that bash does not:        uses variable SHACCT to do shell accounting        includes `stop' builtin (bash can use alias stop='kill -s STOP')        `newgrp' builtin        turns on job control if called as `jsh'        $TIMEOUT (like bash $TMOUT)        `^' is a synonym for `|'        new SVR4.2 sh builtins: mldmode, privImplementation differences:        redirection to/from compound commands causes sh to create a subshell        bash does not allow unbalanced quotes; sh silently inserts them at EOF        bash does not mess with signal 11        sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100        bash splits only the results of expansions on IFS, using POSIX.2                field splitting rules; sh splits all words on IFS        sh does not allow MAILCHECK to be unset (?)        sh does not allow traps on SIGALRM or SIGCHLD        bash allows multiple option arguments when invoked (e.g. -x -v);                sh allows only a single option argument (`sh -x -v' attempts                to open a file named `-v', and, on SunOS 4.1.4, dumps core.                On Solaris 2.4 and earlier versions, sh goes into an infinite                loop.)        sh exits a script if any builtin fails; bash exits only if one of                the POSIX.2 `special' builtins fails3.How does bash differ from the Korn shell, version ksh88?Things bash has or uses that ksh88 does not:        long invocation options        [-+]O invocation option        -l invocation option        `!' reserved word        arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done        arithmetic in largest machine-supported size (intmax_t)        posix mode and posix conformance        command hashing        tilde expansion for assignment statements that look like $PATH        process substitution with named pipes if /dev/fd is not available        the ${!param} indirect parameter expansion operator        the ${!param*} prefix expansion operator        the ${param:offset[]} parameter substring operator        the ${param/pat[/string]} parameter pattern substitution operator        variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,                   TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,                  HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,                   IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,                   PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,                   GROUPS, FUNCNAME, histchars, auto_resume        prompt expansion with backslash escapes and command substitution        redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-        more extensive and extensible editing and programmable completion        builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,                  exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,                  jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,                  read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,                  set -o braceexpand/-o histexpand/-o interactive-comments/                  -o notify/-o physical/-o posix/-o hashall/-o onecmd/                  -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,                  typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt,                  disown, printf, complete, compgen        `!' csh-style history expansion        POSIX.2-style globbing character classes        POSIX.2-style globbing equivalence classes        POSIX.2-style globbing collating symbols        egrep-like extended pattern matching operators        case-insensitive pattern matching and globbing        `**' arithmetic operator to do exponentiation        redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr        arrays of unlimited size        TMOUT is default timeout for `read' and `select'        debugger support, including the `caller' builtin        RETURN trap        Timestamps in history entries        {x..y} brace expansionThings ksh88 has or uses that bash does not:        tracked aliases (alias -t)        variables: ERRNO, FPATH, EDITOR, VISUAL        co-processes (|&, >&p, <&p)        weirdly-scoped functions        typeset +f to list all function names without definitions        text of command history kept in a file, not memory        builtins: alias -x, cd old new, newgrp, print,                  read -p/-s/var?prompt, set -A/-o gmacs/                  -o bgnice/-o markdirs/-o trackall/-o viraw/-s,                  typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence        using environment to pass attributes of exported variables        arithmetic evaluation done on arguments to some builtins        reads .profile from $PWD when invoked as login shellImplementation differences:        ksh runs last command of a pipeline in parent shell context        bash has brace expansion by default (ksh88 compile-time option)        bash has fixed startup file for all interactive shells; ksh reads $ENV        bash has exported functions        bash command search finds functions before builtins        bash waits for all commands in pipeline to exit before returning status        emacs-mode editing has some slightly different key bindingsWhich new features in ksh-93 are not in bash, and which are?New things in ksh-93 not in bash-3.0:        associative arrays        floating point arithmetic and variables        math library functions        ${!name[sub]} name of subscript for associative array        `.' is allowed in variable names to create a hierarchical namespace        more extensive compound assignment syntax        discipline functions        `sleep' and `getconf' builtins (bash has loadable versions)        typeset -n and `nameref' variables        KEYBD trap        variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,                   .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT        backreferences in pattern matching (N)        `&' operator in pattern lists for matching        print -f (bash uses printf)        `fc' has been renamed to `hist'        `.' can execute shell functions        exit statuses between 0 and 255        `+=' variable assignment operator        FPATH and PATH mixing        getopts -a        -I invocation option        printf %H, %P, %T, %Z modifiers, output base for %d        lexical scoping for local variables in `ksh' functions        no scoping for local variables in `POSIX' functionsNew things in ksh-93 present in bash-3.0:        [n]<&word- and [n]>&word- redirections (combination dup and close)        for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command        ?:, ++, --, `expr1 , expr2' arithmetic operators        expansions: ${!param}, ${param:offset[]}, ${param/pat[/str]},                    ${!param*}        compound array assignment        the `!' reserved word        loadable builtins -- but ksh uses `builtin' while bash uses `enable'        `command', `builtin', `disown' builtins        new $'...' and $"..." quoting        FIGNORE (but bash uses GLOBIGNORE), HISTCMD        set -o notify/-C        changes to kill builtin        read -A (bash uses read -a)        read -t/-d        trap -p        exec -c/-a        `.' restores the positional parameters when it completes        POSIX.2 `test'        umask -S        unalias -a        command and arithmetic substitution performed on PS1, PS4, and ENV        command name completion        ENV processed only for interactive shells        set -o pipefail

0 0
原创粉丝点击