`
justin.xxt
  • 浏览: 26892 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ksh 点滴

阅读更多

最近由于工作需要,在学习ksh。几年前用过shell,但是现在看ksh脚本仍是一头雾水,感觉就是天书。在google上搜索了一把,教程倒是不少,但不是那种大而全的,就是那种太初级的入门小儿科,等于啥都没讲。为了方便查阅,在学习的同时,记录一些点滴。

 

if 语句

if [ $? -eq 0 ] ; then
    print we are okay
else
    print something failed
fi

 $? - checks the exit status of the last command run.

 

case 语句

echo input yes or no
read  answer
case $answer in
    yes|Yes|y)
        echo got a positive answer
        # the following ';;' is mandatory for every set
        # of comparative xxx)  that you do
        ;; # ';;' is similar as break; in java case clause
    no)
        echo got a 'no'
        ;;
    q*|Q*)
        #assume the user wants to quit
        exit
        ;;
    *)
        echo This is the default clause. we are not sure why or
        echo what someone would be typing, but we could take
        echo action on it here
        ;;
esac

 关于case语句几点值得注意的地方

- 条件中的值可以是字符串和数字,不像java中只能是数字

- 如果希望某个case执行完后不再检查后面的case,可以使用;;,类似于java中的break。但是如果还是要继续后面的case检查,那就需要使用;&,类似于java中不要break.

- 可以在case中使用通配符,例如上面的例子中,如果answer的值以q或Q开头,则执行exit

 

while语句

keeplooping=1;
while [[ $keeplooping -eq 1 ]] ; do
    read quitnow
    if [[ "$quitnow" = "yes" ]] ; then
        keeplooping=0
    fi
    if [[ "$quitnow" = "q" ]] ; then
        break;
    fi
done

 几点解释

- read quitnow,是从console读取用户的输入并赋予变量quitnow

- [[ ... ]],类似于java中的括号(),[[ ... ]]里的字符一定要和[[和]]保持一个空格,否则shell会不认识

- break是跳出循环,这点和java中的语义是一样的

- if的结尾标识为fi,while的结尾标识为done

 

until语句

until [[ $stopnow -eq 1 ]] ; do
    echo just run this once
    stopnow=1;
    echo we should not be here again.
done

 

for语句

for var in one two three ; do
    echo $var
done

 上面的例子是打印出one, two, three,和下面的例子同样的效果

list="one two three"
for var in $list ; do
    echo $var
    # Note: Changing this does NOT affect the loop items
    list="nolist"
done

几点解释

- for var in $list和for var in "$list"是不一样的,前者会循环打印one, two, three,后者一次打印出one two three,因为#list会自动把"one two three"看成是一个string list,而"$list"则会把"one two three"整体看成是一个string

- 在for循环中,改变list的值并不会影响整个循环

 

括号的使用

two=2
print one$twothree
print one${two}three

- one$twothree,这里会把$twothree看做是变量名,因此这一行会打印one,$twothree变量不存在,为空

- one${two}three,这里就知道$two是一个变量,因此打印one2three

- echo one{$two}three会打印one{2}three

 

数组

array[1]="one"
array[2]="two"
array[3]="three"
three=3

echo ${array[1]}
echo ${array[2]}
echo ${array[3]}
echo ${array[three]}

- 这里three被赋值3,因此array[3]和array[three]是一样的

- 可以用echo ${array[*]}一次性打印出array所有的元素

 

特殊变量

PWD - echo ${PWD} or echo $PWD always print the current directory

RANDOM - ${RANDOM} or $RANDOM, the different number every time you access it

$$ - echo $$ or ${$}, print the current process id of the script, NOT the user's shell

PPID - the "parent process" ID (but not always, for functions)

$? - echo $? or ${?}, the exit status of the last command run

$1 to $9 - arguments 1 to 9 passed to your script or function

${#var} - 表示变量var包含的character的字符个数

 

DATESTRING=${DATESTRING:-$(date)}

如果变量DATESTRING没有被赋值的话则给它赋值为date,否则跳过

 

 

分享到:
评论

相关推荐

    centos系统下ksh的安装包

    centos系统下执行ksh文件时,需要安装相对应的ksh安装包

    shell linux unix ksh

    KSH,全称Korn Shell,是由David Korn开发的一种强大的命令解释器,它是Bash Shell的一个扩展,提供了许多高级特性。在这个主题中,我们将深入探讨Shell、Linux、Unix以及KSH的相关知识点。 首先,Shell是操作系统...

    ksh获取网址.rar

    曾经在网上寻求很久都无法找到的ksh版本,在一个ksh资源网站寻得,在此仅将苦苦寻得的两个网址分享给大家,ksh各版本rpm版相当全,如果这两个网址没有相信很难再寻求到了!!!不要50分,仅需5分即可!

    适用于CentOS Linux 6.9 的ksh包(32位)

    32位版本的ksh包,适用于CentOS Linux 6.9 系统,资源为rpm格式,使用rpm -ivh 包名 安装

    unix ksh script

    在IT行业中,Unix Korn Shell(KSH)脚本是一种强大的工具,用于自动化Unix和Linux系统中的任务。本文将深入探讨Unix KSH脚本的基本概念、语法特点以及它在实际工作中的应用。 Unix Korn Shell是Brian K. Kernighan...

    ksh修改配置文件脚本

    `ksh`(Korn Shell)是一种广泛使用的Unix/Linux shell,它扩展了Bash shell的功能,特别适合编写复杂和交互式的脚本。本话题将围绕如何使用ksh编写修改配置文件的脚本进行深入探讨。 首先,我们有两个关键的脚本...

    Learning KSH.doc

    根据给定文件的信息,我们可以深入探讨Korn Shell (KSH) 的关键概念和特性,这在IT行业,尤其是系统管理和脚本编程领域极为重要。以下是对文档标题、描述以及部分内容中提到的知识点的详细解析: ### 函数(Function...

    ksh-20120801-22.el7_1.2.x86_64.rpm

    ksh-20120801-22.el7_1.2.x86_64.rpm,ksh-20120801-22.el7_1.2.x86_64.rpm

    ksh实验代码

    【标题】"ksh实验代码"涉及的主要技术是KSH(K-means Shift Hashing),这是一种基于聚类的图像检索方法,旨在通过哈希编码快速有效地执行大规模图像库的相似性搜索。KSH的设计目标是优化哈希函数,使得相似的图像在...

    用ksh打印所有排列

    根据提供的文件信息,本文将详细解释如何使用Korn Shell (ksh) 来实现一个程序,该程序可以生成并打印所有可能的排列组合。这里的关键是理解递归算法的应用以及 shell 脚本语言中的变量处理。 ### 核心概念 #### ...

    ksh-20100621-19.el6.x86_64.rpm

    ksh-20100621-19.el6.x86_64.rpm

    ksh参考书,入门到精通

    ### KSH 参考书:从入门到精通 #### KSH 概述 Korn Shell (KSH) 是一种在 Unix 系统上广泛使用的 shell,由 David G. Korn 在 AT&T Bell 实验室开发。它融合了 Bourne Shell 和 C Shell 的优点,并添加了许多新...

    ksh-20120801-10.el6.x86_64.rpm

    ksh-20120801-10.el6.x86_64.rpm

    sh,ksh,csh介绍.pdf

    Bourne Shell(sh)、C Shell(csh)和Korn Shell(ksh)是UNIX系统中常见的三种命令行解释器,它们也是高级编程语言,主要用于脚本编写和自动化任务执行。下面详细介绍了这三种Shell的特点和主要区别。 1. Bourne ...

    ksh-20120801-19.el7.x86_64

    ksh-20120801-19.el7.x86_64.rpm

    ksh-20100621-6.el6.x86_64.rpm

    ksh-20100621-6.el6.x86_64.rpm

    比较简单好学shell脚本,sh\csh\ksh

    比较简单好学shell脚本,sh\csh\ksh

    ksh-20100621-6.el6.i686.rpm

    ksh-20100621-6.el6.i686.rpm

    ksh-WRF 介绍

    【ksh-WRF 介绍】 本文将对WRF(Weather Research and Forecasting)模型中的ksh脚本程序进行简要介绍。WRF是一款开源的高级气象预报系统,它使用ksh(Korn shell)脚本来处理一系列预处理、运行和后处理任务。ksh...

    ksh-20100621-6.el6.x86_64

    《Oracle安装中的ksh-20100621包详解》 在进行Oracle数据库的安装过程中,可能会遇到一个关键的依赖问题——缺少名为“ksh-20100621”的软件包。这个包对于Oracle的顺利安装至关重要,本文将详细解析这个包的用途、...

Global site tag (gtag.js) - Google Analytics