持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情
一、基本算术运算
- 使用
$((expression))算术运算符表达式,注意这种方式只支持整数运算
A=3
B=$((100 * A + 5))# 305
- a + b addition (a plus b);a加上b
- a - b substraction (a minus b);a减去b
- a * b multiplication (a times b);a乘以b
- a / b division (integer) (a divided by b);a除以b,由于只支持整数运算,除法可能会出问题
- a % b modulo (the integer remainder of a divided by b);a除以b的整数余数
- a ** b exponentiation (a to the power of b);a的b次幂
都是比较简单的,除了除法是整数运算导致精度丢失问题。
当然了,还是有办法解决的,引入其他的工具be
a是bc的一个内置函数,代表反正切arctan,由于tan(pi/4)=1,于是4 * arctan(1) = pi,即圆周率
当然了,关于be的工具还有很多方法,这里不会一一列举。
二、字符串操作
直接上脚本
# 注意非拉丁语系字符串长度计算
M_STRING="中文"
export LANG=C.UTF-8 # 设置UTF-8
echo ${#M_STRING} # 2,认为是2个长度
export LANG=C # 默认用单字节长度
echo ${#M_STRING} # 6,认为是6个长度字节--一个中文字符占3个字节
在本地命令行直接使用命令:
在某些线上环境使用命令:
注意到了使用 export LANG=C的时候,输出长度有所区别
(在线环境)使用locale查看只有Lang变成了C
(虚拟机环境)但是在虚拟机环境使用locale查看,全变成了C
而真正影响环境的变量是LC_ALL,比如在线环境修改一下,确实输出6个字节了
vim 9-1.sh
#!/bin/bash
# 获得字符串长度值
STRING="this is a string"
echo ${#STRING} # 16
# 注意非拉丁语系字符串长度计算
M_STRING="中文"
export LANG=C.UTF-8 # 设置UTF-8
echo ${#M_STRING} # 2,认为是2个长度
export LANG=C # 默认用单字节长度
echo ${#M_STRING} # 6,认为是6个长度字节--一个中文字符占3个字节
# 字符串截取子串
STRING="this is a string"
POS=1
LEN=3
echo ${STRING:$POS:$LEN} # his,表示截取第1到第3,
echo ${STRING:1} # $ his is a string,表示截取第1到末尾
echo ${STRING:12} # ring,表示截取第12到末尾
# 注意非拉丁语系字符串截取
export LANG=C
echo -n "${M_STRING:0:1}" | xxd -p # e4,xxd表示以16进制输出
export LANG=C.UTF-8
echo -n "${M_STRING:0:1}" | xxd -p # e4b8ad
# 字符串查找并替换第一次匹配到的子串
STRING="to be or not to be"
echo ${STRING[@]/be/eat} # to eat or not to be,将遇到的第一个be替换成了eat
输出,上面的注释已经写清楚了