ksh日常学习记录

Linux中的shell

  • Bourne shell(sh)
  • C shell(csh)
  • Korn shell(ksh).

字符串判断

-n string 如果字符串不为空,则结果为真
-z string 如果字符串为一个空串(null),则结果为真

#!/bin/ksh
var="hello world"
if [-n "$str"]
then
    echo $str
fi

运行后直接报错
test.ksh:行5: [-n: 未找到命令
[和-n之间要有空格,同里if 和[之间要有空格,Java写多了就会有这样的习惯,
常见的错误有如下,总之多加空格

# p=1
# if[[p=1]]  error  p应该是$p
# if[[$p=1]] error  应该是if [[ $p=1 ]] 注意有空格
# if [[ $p=1 ]] error  应该是if [[ $p=1 ]]; 注意‘;’
# if [[ $p=1 ]];  error  应该是 if [[ $p = 1 ]]; 注意=前后的空格
p=1
if [[ $p eq 1 ]];then #多加空格
    echo "true"
fi

改成如下

#!/bin/ksh 
var="hello world"
if [ -n "$var" ]
then
 echo $var
fi

;的作用

;表示命令结束,在同一行则继续执行下个命令,例如上面的then都在另一行,可以写成

#!/bin/ksh 
var="hello world"
if [ -n "$var" ];then
 echo $var
fi

“$var” 为什么要加“”

var=”hello world”中包含了空格,所以要加。
不加就报test.ksh: 第 3 行:[: hello: 需要二元表达式

ksh脚本可以接收的参数变量

$0 shell的命令本身(包括完整路径)
$1到$9 数字表示shell 的第几个参数
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的ID号
$! 后台运行的最后一个进程的ID号
$@ 单个显示字符参数,有空格隔开
$- 显示shell使用的当前选项。
$? 显示最后命令的执行状况。0表示没有错误。

if [ $# -lt 2 ]
then 
  echo "id and date is mandatory"
  exit 
fi
if [[ $? -ne 0 ]]
then
    MoveFailureFile.ksh
    exit
fi

数组(直接摘抄)

数组定义法1:

arr=(1 2 3 4 5) # 注意是用空格分开,不是逗号!!

数组定义法2:

array
array[0]="a"
array[1]="b"
array[2]="c"

获取数组的length(数组中有几个元素):

${#array[@]}

遍历(For循环法):

for var in ${arr[@]};
do
    echo $var
done

遍历(带数组下标):

for i in "${!arr[@]}"; 
do 
    printf "%s\t%s\n" "$i" "${arr[$i]}"
done

我的项目中
billRef是 123,234,456 要格式化成'123','234','456'

if [[ -n "${billRef}" ]]
then
#将IFS替换成,分割成数组
    OLD_IFS="$IFS"
    IFS=","
    arr=($billRef) 
    IFS="$OLD_IFS"

    len=$[${#arr[@]}-1]   
    for i in "${!arr[@]}";do
      inParam="${inParam}""'${arr[$i]}'"
          if [[ $i < $len ]]
            then
             inParam=${inParam}","
           fi
    done
fi

IFS 由 或 或 三者之一组成(我们常用 space )
默认IFS为空格

猜你喜欢

转载自blog.csdn.net/guo_xl/article/details/78525768
ksh