korn shell基礎知識(轉)

ba發表於2007-08-12
korn shell基礎知識(轉)[@more@]【導讀】較詳細介紹IBM AIX作業系統上常用的korn shell的基礎知識。



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]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-952382/,如需轉載,請註明出處,否則將追究法律責任。