内部变量
$$与$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