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

来源:互联网 发布:我做淘宝在哪找货源 编辑:程序博客网 时间:2024/05/18 02:00

1 expr

  Linux shell中expr的作用常用的主要是四则运算和字符串的操作。

1.1 expr四则运算

  expr可以完成四则运算(加、减、乘、除)表达式的求值操作,需要注意的是运算符左右都要有空格,如果没有空格表示字符串连接。另外,乘法运算运算符前要加反斜杠进行转义——“*”。expr也可以进行求模运算(%)。这些运算都是针对整数而言,如果要进行浮点型的运算,就需要使用bc计算器命令。

result=`expr 2 + 3` result=$(expr $no1 + 5)
#!/bin/bashi=1.2j=2.2expr "$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 $DBLINKif [ $? -ne 0 ]; then    echo "无法连接到数据库 $DBLINK"    exitfistat="0"bsnm=`basename $0`if [ $# -eq 0 ]; then    echo "usage:$bsnm [-s | -f | -r | -o] [all | bat_id] ..."    exit 1elif [ $# -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;;    esacfiecho "批量初始化[$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"    donefirlt=`db2 "$sql"`#echo $rlt | awk '{ printf "共 %d 个批量.\n",$1 }'echo "已完成"
0 0
原创粉丝点击