shell脚本学习笔记(四) —— expr、basename、shift

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 "已完成"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值