日期:2014-05-16  浏览次数:20932 次

《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"

?

?

?

?

?

?

?

?