BASH内置变量的使用

内部变量

$$与$BASHPID都代表着执行程序的进程ID,我们可以通过echo打印,并使用ps指令检查得到相同的进程ID
-echo $$
-echo $BASHPID
-ps ax | grep bash
=11015pts/2    R    0:00
    /bin/bash
位置参数(一)
。我们经常向一个程序传递以空格间隔的参数,我们按先后次序分成$0(脚本本身),$1(参数1),$2(参数2)......
。$#表示参数数量的总数,也就是总共有多少参数
。$*所有的参数以一行显示
。$@所有的参数以空格分隔
。E_BADARGS=65
。if [ ! -n "$1" ]
。then
    -echo "Usage: 'basename $0' arg1 arg2 ..."    #提示脚本使用方法
    -exit $E_BADARGS    #退出返回自定义错误代码
    fi

强制退出程序本身示例(一)

。$!代表进程本身
。vi &     #此处运行了一个vi编辑工具以便测试
。{ sleep ${TIMEOUT};    #休眠一定时间
。eval 'kill -9  $!' &>/dev/null;}    #杀死进程本身
。eval 可以对字符串的代码当成bash代码并运行,等同于
。"和$()  

强制退出程序本身示例(二)

TIMEOUT=30    #超时时间
count=0    #初始值
vi  &  {
    while ((count < TIMEOUT )) ;do
        eval ' [! -d "/proc/$!"] && ((count = TIMEOUT))'
        ((count++))    #计数器递增
        sleep 1
    done
eval ' [ -d "/proc/$!" ] && kill -l5 $!'    #判断程序运行后是否在/proc下存在以进程ID的目录夹,如果存在杀死该进程
}
。(())中变量无需在变量前使用$,而且没有空格的局限性  

字符长度

。这三种方法都可以取出字符串的长度
    ${#string}
    expr length $string
    expr "$string":'.*'
。stringZ=abcABC123ABCabc
。echo ${#stringZ}    #得到15
。echo 'expr length $stringZ'    #得到15
。echo 'expr "$stringZ" : '.*'‘    #得到15  

表达式方式取长度

。依据正则表达式取得相匹配部分的长度,注意表达式要用单引号
。expr match ”$string" '$substring’
。expr “$string" : '$substring'
stringZ=abcABC123ABCabc
    #    |---------|
    #    12345678
echo 'expr match "$stringZ" 'abc[A-Z]*.2''    # 得到8
echo 'expr "$stringZ" : 'abc[A-Z]*.2''    #    得到8  

子字符串的提取(符号)

。根据字符的位置提取字符串中一段,注意此方法索引由0开始
。${string:position}
。${string:position:length}

stringZ=abcABC123ABCabc
#0123456789......
echo ${stringZ:0}    #没有给定长度,又从0(第一个字符)开始,江区所有的字符得到abcABC123ABCabc
echo ${stringZ:1}    #从1(第二个字符)开始得到bcABC123ABCabc
echo ${stringZ:7}    #从7(第八个字符)开始得到23ABCabc
echo ${stringZ:7:3}    #从第八个字符开始,取三个字符得到23A 

 

子字符串的提取(函数)

。也可以使用substr函数提取,注意这个函数索引从1开始
。expr substr $string $position $length

stringZ=abcABC123ABCabc
#    123456789......
echo 'expr substr $stringZ 1 2'    #得到ab
echo 'expr substr $stringZ 4 3'    #得到ABC

  

原文地址:https://www.cnblogs.com/hongjinping/p/14020883.html