Korn Shell执行命令的顺序
1.关键字,如if,for,function等
2.别名(Aliases)
3.内部命令,如cd, whence和函数等
4.函数Functions
5.脚本Scripts、在PATH中的可执行程序
※找到命令的根源用下面的命令:
whence -v command
或:
type command
Alias(别名)
alias aliasname=command
取消一个别名:
unalias aliasname
列出当前所有的别名:
alias
【TIP】
用来显式当前目录下的所有目录的别名:alias ldir='ls -l|grep ^d'
提问:alias|grep ^ls会看到:ls=/usr/bin/ls,请问:系统为什么要定义这个别名?
Functions(函数)
定义的位置:
Function可以在命令行、.kshrc(ENV文件,见下篇)或在shell script中定义
定义的方法:
function funcname {
shell commands
}
或:
funcname () {
shell commands
}
列出所有当前的functions
functions
取消一个function
unset -f funcname
输出一个function:
typeset -fx funcname
取消输出一个function:
typeset +fx funcname
※function是"typeset -f"的预定义的别名
Korn Shell 的选项
Korn Shell有一些选项,如果在.kshrc(ENV文件,见下篇)中设定他们,那么他们就是全局的,并且可以传递给subshell。
列出所有的Korn Shell选项:
set -o
设置一个选项
set -o OptionName
取消一个选项
set +o OptionName
Korn Shell 选项的意义
allexport 自动export随后定义地所有变量(文件名中不含有.).(等于set -a)
errexit 如果一个命令的返回值不为0,就执行错误陷阱(ERR trap)。但对profile文件例外。(等于set -e)
bgnice 后台进程以较低的优先级运行,这是缺省值
emacs 使用emacs风格的行内编辑器
gmacs 使用gmacs风格的行内编辑器
ignoreeof 遇到文件结束符时不退出shell。要想退出shell必须使用exit命令或者敲Ctrl-D 11次。
keyword 为了保持与Bourne shell的兼容性。(set -k)
markdirs 在完成文件名替换后在目录名后面加一个斜线(/)。
monitor Runs background jobs in a separate process and prints a line upon completion. (set -m)
noclobber 不能用>重定向符覆盖已经存在的文件。只能用>|来重写已经存在的文件。noexec 读入命令只检查它的语法但不执行。 (set -n)
noglob 禁止文件名替换。(set -f)
nolog 不在历史文件中保存函数的定义。
nounset 在试图扩展没有定义的变量时显示错误信息。(set -u)
privileged 禁止执行HOME/.profile file 并且使用/etc/suid _profile 而不是ENV文件。 (set -p)
verbose 显示shell读入的输入.(set -v)
trackall Designates each command as a tracked alias when first encountered.(set -h)
vi 使用vi风格的行内编辑器
viraw Processes each character as it is typed in vi mode.
xtrace 在运行命令前,先显示命令.(set -x)
※举例:使vi成为inline editor
set -o vi
Debuging(调试)
调试一个shell script的方法:
#set -o xtrace
然后再运行shell
或者直接执行
#ksh -x shellprog args
或
#sh -v shellprog args
Debug 一个function
#typeset -ft funcname
Prompts(提示)
PS1 主shell提示符(普通用户缺省是 $,而root缺省是#)
PS2 继续提示符( 缺省 > )
什么是继续提示符?
在命令行上输入
for i in 11 12 13 14 15 16
do
lspv hdisk$i
done
从第二行开始,屏幕最左面就是继续提示符。
PS3 在选择循环中的选择提示符(缺省是 #? )
PS4 调试提示符 (缺省是 + )
【tip】:命令行上提示主机名称和当前目录
export PS1="[`hostname`-"'$PWD]'
注意:一定是""包括``才能取得命令的结果,''包括变量才能随时更改变量的值
效果:
[hostname-/tmp]