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
- shell入门 shell也有好多种
- shell 入门
- shell入门
- shell入门
- Shell入门
- shell 入门
- shell入门
- shell入门
- shell入门
- SHELL入门
- shell 入门
- shell入门
- shell入门
- shell入门
- shell 入门
- shell入门
- Shell 入门
- shell入门
- 社説 20150328 御嶽山噴火半年 惨事を繰り返さぬ体制整備を
- 【深入了解cocos2d-x 3.x】内置数据结构(1)——智能指针
- Android利用Fiddler进行网络数据抓包
- Harris角点检测及代码分析
- C语言中可变参数的用法——va_list、va_start、va_arg、va_end参数定义
- shell入门 shell也有好多种
- 深入解读Tomcat (一)
- Sybase CEP 运维脚本
- 100小时学会SAP.Day5
- 调用系统照相机
- AVL树图解
- 新手程序员必备技能
- 蓝桥杯 代码填空 反转串
- Spring AOP 详解