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为空格