《Linux Shell》之七:变量的高级用法
9.1 内部变量
BASH:记录bash shell的路径
BASH_VERSION:bash shell版本信息
GROUPS:记录当前用户所属的群组
HOSTNAME:主机名
REPLY:默认read后面要接一个变量,如果没有就将读取的值放入REPLY中,在select中将选择的数字赋给REPLy
SECONDS:记录脚本从开始执行到结束所消耗的时间
#!/bin/bash count=1 MAX=5 while [ "$SECONDS" -le "$MAX" ] do echo "This is the $count time to sleep" let count=$count+1 sleep 2 done echo "the running time of this script is $SECONDS"
TMOUT:用于设置shell的过期时间,当TMOUT不为0时候,shell在TMOUT秒后自动注销。TMOUT放在脚本中,可以规定脚本的执行时间。
9.2 字符串处理:
* 字符串长度:
${#string} 或者 expr length "$string"
* 子串的索引:
expr index "$string" "$substr",从1开始,如果找不到,返回0
* 从开头匹配:
expr match $string $substr 其中substr可以是正则表达式,返回匹配的子串长度,如果没有返回0
* 抽取子串:
#{string:position}
#{string:position:length}
注意:上面的position从0开始
expr substr $string $position $length
注意:上面的position是从1开始的,我勒个擦,并且length必须指定
* 正则式抽取子串:
expr match $string '\($substr\)' --> 抽取开头的子串
expr match $string '.*($substr\)' -->抽取最后的子串
* 删除子串
${string#substr} 开头删最短
${string##substr} 开头删最长
${string%substr} 结尾删最短
${string%%substr} 结尾删最长
******* 替换子串 *******
可以在替换字符串中任意满足条件的子串
${string/substring/replacement} 仅仅替换第一次匹配
${string//substring/replacement} 替换所有的匹配
注:substring不是正则式,*跟shell中的*类似
9.3 有类型变量
declare [option] var
选项名 | 意义 |
-r | 变量设置为只读 |
-i | 变量为整型 |
-a | 变量为数组 |
-f | 显示此脚本前定义过的所有函数名及内容 |
-F | 仅显示此脚本前定义的函数名 |
-x | 声明为环境变量 |
declare -x var=value
9.4 间接变量引用
variable1=variable2
variable2=value
类似于spring配置文件中的占位符,现在variable1的值肯定是variable2字符串,那么怎样获得variable的间接引用值呢?也就是说${variable1}肯定等于字符串variable2,那么怎样获取value这个字符串呢?
两种方式实现:
eval result=\$$variable1
result=${!variable1}
换个角度说明下:间接引用中,variable1其实是放的是最终值的地址指针而已。
9.5 bash数学运算
expr 100 \* 200
9.5.2 bc运算器
脚本中调用bc运算器的一般格式为:
variable=$(echo "options; expression" | bc)
#!/bin/bash var1=20 var2=3.141592657 var3=`echo "scale=1; $var2 * 2 / 1" | bc` echo "the semi... is $var3"
本人博客已搬家,新地址为:http://yidao620c.github.io/