熟悉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

Linux中ksh的功能描述,学习Linux中ksh的用法相关推荐

  1. 红旗系统是不是linux,红旗linux操作系统是Linux吗?我想学习Linux,已经按完红旗的了、不知道是不是Linux,有没有被红旗改变过。还能按正常的方式学吗?...

    红旗linux操作系统是Linux吗?我想学习Linux,已经按完红旗的了.不知道是不是Linux,有没有被红旗改变过.还能按正常的方式学吗? 更新时间:2019-10-23 17:07 最满意答案 ...

  2. linux ksh教程下载,学习Linux中ksh的用法

    熟悉Linux的朋友肯定都知道bash,它是Linux默认的命令行解释程序,熟悉Solaris的也应该知道csh, 但是csh用起来比较费劲,于是乎产生了Korn Shell (http://www. ...

  3. windows下学习linux,在Windows环境下学习Linux命令行的几种方法

    Linux高手通常将Windows工作平台的人鄙视得一无是处, 其实这完全没有必要.请不要装. 对于想进军linux的人来说, 学好linux命令行无疑是最基本的东西. 本文讲述如何在Windows环 ...

  4. linux access源码,从零开始学习Linux:Day04 源码安装Nginx 。acess/status/referer

    从零开始学习Linux:Day04 源码安装Nginx .acess/status/referer 常见web服务器有IIS,apche,nginx,tomcat,tengine等等,现在nginx使 ...

  5. linux invalid argument_Linux | 那些年学习Linux你被坑过的故障集合

    关注[老男孩Linux运维]离大牛更近一步 一. 文件和目录类 1.1 File exist 文件已经存在 [root@oldboyedu59 ~]# mkdir   /data   /lidao   ...

  6. linux shared,从 0 开始学习 Linux 系列之「22.共享内存 Shared Memory」

    共享内存 版权声明:本文为 cdeveloper 原创文章,可以随意转载,但必须在明确位置注明出处! 共享内存 Shared Memory 这次我们来学习在 Linux 中最快的一种 IPC 方式:共 ...

  7. linux cadaver 命令,(个人学习Linux经历)文本命令

    [vbird@www ~]$command [-options] parameter1 parameter2... 命令     选项      参数(1)    参数(2) 说明: 0. 一行命令中 ...

  8. arm linux驱动 知乎_学习linux驱动开发的方法?

    大二搞完51单片机,大三搞了msp430,飞思卡尔,大四前开始arm9+linux,读研三年就是折腾了linux和一些小项目,现在工作两年多了,相对来说自我感觉成长比较快.C语言是最基础最基础的开始, ...

  9. linux三剑客有什么区别,学习Linux三剑客

    Linux三剑客 grep.sed.awk被称为Linux中的"三剑客" 作用 grep适合单纯的查找或匹配文本 sec适合编辑匹配到的文本 awk适合格式化文本,对文本进行复杂的 ...

最新文章

  1. 云平台已经成为发生网络攻击的重灾区
  2. 【译】Making Sense of Ethereum’s Layer 2 Scaling Solutions: State Channels, Plasma, and Truebit
  3. Objective C 基础教程
  4. 基于linux实现DNS互联网的搭建
  5. typecho 调用评论最多热门文章
  6. ruby学习笔记(3)--语法层面的先见之明
  7. Python3常用字符串操作
  8. bootstrap table 服务器端分页--ashx+ajax
  9. 【数学建模】历年数学建模国赛评价类题目汇总
  10. 【MATLAB】进阶绘图 ( MATLAB 颜色值 | 条形图示例 | 查找对象属性方法 | 修改条形图属性 )
  11. sql join与笛卡尔积
  12. 浅析Relaxed Ordering对PCIe系统稳定性的影响
  13. html转换vmax,CSS里px、em、rem、%、vw、vh、vmin、vmax这些单位的区别
  14. 杨百翰大学计算机科学专业,杨百翰大学有哪些专业_专业排名
  15. java部门管理_系统管理模块_部门管理_实现基本的增删改查功能
  16. 初中教资计算机考试知识点,教资考试初中物理电学知识点总结来了
  17. VScode与VSstdio差别该如何选择C语言IDE(集成开发环境)
  18. 1条毛巾用27年:100个商界大佬的抠门绝活
  19. 国内的windows硬件检测软件算是很牛逼的吧!!!?
  20. 阿里副总裁人设“翻车”:30 岁成 AI 顶尖科学家,但我很懒

热门文章

  1. 确保人生悲惨的七大秘诀
  2. 标识符python_《标》字意思读音、组词解释及笔画数 - 新华字典 - 911查询
  3. 笔记笔记笔记笔记笔记笔记
  4. 今天小暑是什么时间_小暑是几月几日星期几2020 是什么季节
  5. Java中的tiles_【JAVA 之Tiles 介绍】
  6. python 形式参数_Python 函数的参数形式
  7. GitKraken使用—01、GitKraken的安装与破解
  8. 粉丝圈定制服务:让社区与商城无缝连接!
  9. 2019全球汽车品牌营收排名
  10. IntellJ IDEA配置Git/码云插件实现团队协同开发