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


不积跬步无以至千里

浙公网安备 33010602011771号