Linux中ksh的功能描述,学习Linux中ksh的用法

熟悉Linux的朋友肯定都知道bash,它是Linux默认的命令行解释程序,熟悉Solaris的也应该知道csh,

但是csh用起来比较费劲,于是乎产生了Korn Shell (http://www.kornshell.com),ksh综合了csh的强

大功能和bash的易用性,作为一名忠实的Linuxer,你不得不把这一强大的工具牢牢掌握!

关于shell的用法及shell编程方面的资料很多,但是专门讲解ksh的似乎挺少的,强子在此也结合几篇E

文加上一些自己的实践尽最大努力给大家讲解一下ksh,望对你能起到一定的作用,文末附上E文地址。

1. 准备工作首先请确保ksh程序已经安装在/bin/目录下,强子前几天装Fedora7却没有发现ksh被安装,如果没有则

直接上ksh官方网站上去下一个,然后重命名成ksh并拷贝到/bin目录下。

跟大多数脚本解释程序一样,可以选择交互式或者批处理运行,如果是交互式则直接在bash提示符下输

入#ksh,然后便进入ksh交互模式,如果是批处理,则:

先得建立一个ksh脚本文件:#vi myscript.ksh

然后在文件里添加脚本代码,Esc+:+wq保存,然后给予可执行权限: #chmod 777 myscript.ksh

最后直接运行便可:#./myscript.ksh 或者 #ksh ./myscript.ksh,如果需要参数,则直接在运行命令

后面输入:#ksh ./myscript.ksh arg1 arg2 arg3 ...

当然这些参数可以直接在程序体里面使用$1, $2, $3来调用,特别地:$0始终表示脚本文件名,因为它

其实才是真正的第一个参数(ksh命令后的第一个参数始终是脚本文件名)

注:为了确保批处理文件100%是被ksh解释的,最好在每个批处理的第一行加上

#!/bin/ksh (该行表示用ksh来解释下面的程序体,它是备注的一种特殊方式#!)

2. 变量

如何定义变量:myval = "hello world"

调用:echo $myval 则输出: hello world

如果是要执行数字运算,则我们必须显式声明变量类型,如:

integer val1=1

integer val2=2

integer val3=$val1+$val2

print $val3

该段程序如果不显式指明类型,则输出会是1+2而不是3

备注:通用的备注方法:# my comment

换行:\n

注意:ksh区分大小定,所有Linux的程序好像都区分大小写,这点强子并未确认

3. 流程控制if...else...fi语句

if ((ANIMAL=="cat")) then

print "Good"

else

print "Bad"

fi

判断条件:

== Equal

> Greater than

>= Greater than or equal to

<= Less than or equal to

!= Not equal to

case...in...esac语句(条件判断中可使用通配符)

echo input yes or no

read answer

case $answer in

yes|Yes|y)

echo got a positive answer;;

no)

echo got a 'no';;

q*|Q*)

exit;;

*)

;;

esac

while...do...done语句

keeplooping=1;

while [[ $keeplooping -eq 1 ]] ; do

read quitnow

if [[ "$quitnow" = "yes" ]] ; then

keeplooping=0

fi

if [[ "$quitnow" = "q" ]] ; then

break;

fi

done

util...do...done...语句

until [[ $stopnow -eq 1 ]] ; do

echo just run this once

stopnow=1;

echo we should not be here again.

done

for...do...done语句

list="one two three"

for var in $list ; do

echo $var

list="nolist"

done

或者

for ((i=0; i<5; i++))

do

echo `date`

sleep 1.5

done

4. 数组

定义数组:

array[1]="one"

array[2]="two"

array[3]="three"

three=3

调用数组:

print ${array[1]}

print ${array[2]}

print ${array[3]}

print ${array[three]}

5. 一些内置的常量

PWD - 当前目录

RANDOM - 产生一个随机数

$$ - 输出当前进程号

PPID - 你进程ID $1 to $9 - 参数

$? - 退出代码

$REPLY - 数字菜单的选择项

$# - 命令参数的数量

$* - 按空格分隔的参数的值,如果是"$*"则有所不同

$@ - 按空格分隔的参数的值,如果是"$@"则有所不同

至于ksh的$*, $@, "$*"和"$@"的区别,可参考以下代码:

set 'apple pie' pears peaches

for i in $* ; do

echo $i

done

# apple

# pie

# pears

# peaches

set 'apple pie' pears peaches

for i in "$*" ; do

echo $i

done

# apple pie pears peaches

set 'apple pie' pears peaches

for i in $@ ; do

echo $i

done# apple

# pie

# pears

# peaches

set 'apple pie' pears peaches

for i in "$@" ; do

echo $i

done# apple pie

# pears

# peaches

6. 函数

printmessage() {

echo "Hello, this is the printmessage function"

}

printmessage

内置的函数:

read varname -- 从终端读取标准输入并赋值给varname

set $varname -- 为参数设定值,如果调用set $val="first second third",则$1="first"

eval -- 直接执行命令如:eval 'print hello'则直接执行命令print hello

文本位置,颜色调整 -- 用法:

tput init

tput clear

tput cup 3 2

print -n "Here is a clean screen, with these words near the top"

endline=`tput cols`

tput cup $(($endline - 2))

print "and now, back to you"

sleep 2

构建自己的数字菜单选择项:

select word in one two three exit; do

echo word is $word

echo reply is $REPLY

if [[ "$word" = "exit" ]] ; then

break;

fi

done

运行这段脚本,将输出并等待用户作出选择

1) one

2) two

3) three

4) exit

#?

7. 在Ksh里面调用其它Linux系统工具

如cut, join, comm, fmt, grep, egrep, sed, awk

强子现在正在研究awk,一个文本分析处理工具,很强大,稍后附上研究心得

8. exit和return的区别exit会退出整个程序体,而return则只是退出当前函数体而非程序体,并有返回值

关于ksh的详细用法可参考在线手册:

http://www.cs.princeton.edu/~jlk/kornshell/doc/man93.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值