1 expr
Linux shell中expr的作用常用的主要是四则运算和字符串的操作。
1.1 expr四则运算
expr可以完成四则运算(加、减、乘、除)表达式的求值操作,需要注意的是运算符左右都要有空格,如果没有空格表示字符串连接。另外,乘法运算运算符前要加反斜杠进行转义——“*”。expr也可以进行求模运算(%)。这些运算都是针对整数而言,如果要进行浮点型的运算,就需要使用bc计算器命令。
result=`expr 2 + 3`
result=$(expr $no1 + 5)
#!/bin/bash
i=1.2
j=2.2
expr "$i + $j" | bc
这个在shell脚本学习笔记(一)中也有提及。
1.2 expr字符串操作
字符串的操作常用的就是求字符串的长度,包括字符串中的空格在内。
[root@kk bkeep]# expr length "bkeep zbb" //包含空格在内
9
len=`expr length $batid`
while [ $len -lt 4 ];do
batid="0$batid"
len=`expr length $batid`
done
至于expr更详细的用法,可以man一下。
2 basename
basename返回一个字符串参数的基本文件名称。用法:
basename [string] [suffix]
basename 命令读取 String 参数,删除以 /(斜杠) 结尾的前缀以及任何指定的 Suffix 参数,并将剩余的基本文件名称写至标准输出。
bsnm=`basename $0`
3 shift
shift 是 shell 中的内部命令,用于处理参数位置。每次调用 shift 时,它将所有位置上的参数减一。 $2变成了$1, $3变成了$2, $4变成了$3。
详细使用见博客:
http://blog.csdn.net/zhu_xun/article/details/24796235
下面是用到shift的一个例子:
#! /bin/ksh
#########################################
# 初始化指定批处理的状态 #
#########################################
db2 connect to $DBLINK
if [ $? -ne 0 ]; then
echo "无法连接到数据库 $DBLINK"
exit
fi
stat="0"
bsnm=`basename $0`
if [ $# -eq 0 ]; then
echo "usage:$bsnm [-s | -f | -r | -o] [all | bat_id] ..."
exit 1
elif [ $# -gt 1 ]; then
case $1 in
"-s"|"-S")
stat="S"
shift;;
"-f"|"-F")
stat="F"
shift;;
"-0"|"-o"|"-O")
stat="0"
shift;;
"-r"|"-R")
stat="R"
shift;;
"-d")
time=`date +20%y%m%d%H%M%S`
sql="update tbl_bat_cut_ctl set curr_stlm_dt='$2',lst_upd_tlr='',lst_upd_time='$time'"
rlt=`db2 "$sql"`
echo "日切已更新为:$2..."
exit 0;;
esac
fi
echo "批量初始化[$stat]..."
sql="update tbl_bat_task_ctl set bat_status='$stat',asn_status='0'"
if [ $1 = "all" ]; then
echo " [all]"
else
sql="$sql where 1=2"
for id in $@; do
batid=$id
len=`expr length $batid`
while [ $len -lt 4 ]; do
batid="0$batid"
len=`expr length $batid`
done
sql="$sql or bat_id='$batid'"
echo " $batid"
done
fi
rlt=`db2 "$sql"`
#echo $rlt | awk '{ printf "共 %d 个批量.\n",$1 }'
echo "已完成"