最近由于工作需要,在学习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文件时,需要安装相对应的ksh安装包
KSH,全称Korn Shell,是由David Korn开发的一种强大的命令解释器,它是Bash Shell的一个扩展,提供了许多高级特性。在这个主题中,我们将深入探讨Shell、Linux、Unix以及KSH的相关知识点。 首先,Shell是操作系统...
曾经在网上寻求很久都无法找到的ksh版本,在一个ksh资源网站寻得,在此仅将苦苦寻得的两个网址分享给大家,ksh各版本rpm版相当全,如果这两个网址没有相信很难再寻求到了!!!不要50分,仅需5分即可!
32位版本的ksh包,适用于CentOS Linux 6.9 系统,资源为rpm格式,使用rpm -ivh 包名 安装
在IT行业中,Unix Korn Shell(KSH)脚本是一种强大的工具,用于自动化Unix和Linux系统中的任务。本文将深入探讨Unix KSH脚本的基本概念、语法特点以及它在实际工作中的应用。 Unix Korn Shell是Brian K. Kernighan...
`ksh`(Korn Shell)是一种广泛使用的Unix/Linux shell,它扩展了Bash shell的功能,特别适合编写复杂和交互式的脚本。本话题将围绕如何使用ksh编写修改配置文件的脚本进行深入探讨。 首先,我们有两个关键的脚本...
根据给定文件的信息,我们可以深入探讨Korn Shell (KSH) 的关键概念和特性,这在IT行业,尤其是系统管理和脚本编程领域极为重要。以下是对文档标题、描述以及部分内容中提到的知识点的详细解析: ### 函数(Function...
ksh-20120801-22.el7_1.2.x86_64.rpm,ksh-20120801-22.el7_1.2.x86_64.rpm
【标题】"ksh实验代码"涉及的主要技术是KSH(K-means Shift Hashing),这是一种基于聚类的图像检索方法,旨在通过哈希编码快速有效地执行大规模图像库的相似性搜索。KSH的设计目标是优化哈希函数,使得相似的图像在...
根据提供的文件信息,本文将详细解释如何使用Korn Shell (ksh) 来实现一个程序,该程序可以生成并打印所有可能的排列组合。这里的关键是理解递归算法的应用以及 shell 脚本语言中的变量处理。 ### 核心概念 #### ...
ksh-20100621-19.el6.x86_64.rpm
### KSH 参考书:从入门到精通 #### KSH 概述 Korn Shell (KSH) 是一种在 Unix 系统上广泛使用的 shell,由 David G. Korn 在 AT&T Bell 实验室开发。它融合了 Bourne Shell 和 C Shell 的优点,并添加了许多新...
ksh-20120801-10.el6.x86_64.rpm
Bourne Shell(sh)、C Shell(csh)和Korn Shell(ksh)是UNIX系统中常见的三种命令行解释器,它们也是高级编程语言,主要用于脚本编写和自动化任务执行。下面详细介绍了这三种Shell的特点和主要区别。 1. Bourne ...
ksh-20120801-19.el7.x86_64.rpm
ksh-20100621-6.el6.x86_64.rpm
比较简单好学shell脚本,sh\csh\ksh
ksh-20100621-6.el6.i686.rpm
【ksh-WRF 介绍】 本文将对WRF(Weather Research and Forecasting)模型中的ksh脚本程序进行简要介绍。WRF是一款开源的高级气象预报系统,它使用ksh(Korn shell)脚本来处理一系列预处理、运行和后处理任务。ksh...
《Oracle安装中的ksh-20100621包详解》 在进行Oracle数据库的安装过程中,可能会遇到一个关键的依赖问题——缺少名为“ksh-20100621”的软件包。这个包对于Oracle的顺利安装至关重要,本文将详细解析这个包的用途、...