34, 字符串和数字

1,参数展开

空变量

${parameter:-word}

如果parameter没有设置或者为空,该展开会给出一个值word。如果parameter不空,该展开会给出parameter的值。注意:不会把word的值赋给parameter。

 

${parameter:=word}

展开的规则跟${parameter:-word}一样,如果parameter没有设置或者为空,该展开会给出一个值word。如果parameter不空,该展开会给出parameter的值。注意:该展开执行之后,会把word值赋给parameter。

 

${parameter:?word}

如果parameter没有设置或为空,该展开会导致脚本错误exit,word会显示在标准错误输出,如果parameter不空,扩展会给出parameter的值。

 

${parameter:+word}

如果parameter没有设置或为空,该展开什么也不做。如果parameter非空,该扩展会输出word值,但是parameter不会改变。

字符串操作

${#parameter}    返回字符串parameter长度

 

${parameter:offset}

${parameter:offset:length}         

返回字符串parameter的一部分。如果offset是负值,则从尾部开始计数,负值前面必须有空格,以与${parameter:-word}区分。

 

${parameter#pattern}

${parameter##pattern}       

删除parameter中pattern匹配到的前导部分,pattern是通配符模式,跟pathname expansion类似,#删除最短的匹配,##删除最长的匹配。

[me@linuxbox ~]$ foo=file.txt.zip
[me@linuxbox ~]$ echo ${foo#*.} 
txt.zip
[me@linuxbox ~]$ echo ${foo##*.} 
zip

${parameter%pattern}

${parameter%%pattern}

跟${parameter#pattern}  ${parameter##pattern}  类似,只不过是从尾部开始删除。

 

${parameter/pattern/string}

${parameter//pattern/string}

${parameter/#pattern/string}

${parameter/%pattern/string}     

扩展在parameter上执行search-and-replace操作,匹配pattern,替换成string。正常模式下,值替换第一次匹配到的,//模式下,替换掉所有匹配到的,/#模式,要求必须在开头才能匹配上,/%模式,要求在结尾才能匹配。所以模式下,/string都可以忽略,执行删除。

大小写转换

declare -u variable  // 把variable的值都转换成大写
declare -l variable  // 把variable的值都转换成小写

2,数学运算

$((expression))

基数

number  10进制

0number  8进制

0xnumber  16进制

base#number  

shell算术运算仅仅作用于整数,所以整数的除法结果还是整数。

比特运算

~  取反

<<  左移运算

>>  右移运算

&  与

|  或

^  异或

逻辑运算

用于(( )) 里整数比较

<=    >=    <    >    ==     !=    &&     ||      expr1?expr2:expr3

bc的用法

bc 可以从文件输入。例如

# foo.bc

2+ 2

bc -q foo.bc

直接执行bc命令, 可以进入交互界面。

还可以从标准输入 bc < foo.bc

还可以使用here string,例如:bc <<< "2+2"

在脚本中,还可以使用here doc的方式。

bc <<- EOF
    scale = 10
    i = $interest / 12
    p = $principal
    n = $months
    a = p * ((i * ((1 + i) ^ n)) / (((1 + i) ^ n) - 1))
    print a, "\n"
EOF

 scale 可以修改bc的精度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值