学习Linux中ksh的用法

来源:互联网 发布:印度外汇储备数据 编辑:程序博客网 时间:2024/06/05 05:48

熟悉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
Less than
>= Greater than or equalto
<= Less than or equalto
!= Not equal to
 
case...in...esac语句(条件判断中可使用通配符)
 echo input yes or no
 read  answer
 case $answer in
  yes|Yes|y)
   echogot a positive answer;;
  no)
   echogot 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 runthis once
  stopnow=1;
  echo we shouldnot 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`
        sleep1.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 printmessagefunction"
}

printmessage

内置的函数:
read varname -- 从终端读取标准输入并赋值给varname
set $varname -- 为参数设定值,如果调用set $val="first secondthird",则$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 thetop"
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

原创粉丝点击