shell-字符串处理学习笔记一

计算字符串长度

  • ${#string}
  • expr length "$string" string 有空格,则必须加双引号
str="hello world"
# ${#string}
len=${#string}
echo $len
11

# `expr length "$string"`
len=`expr length "$str"`
echo $len
11

对字符串切片

  • ${var:n:m} 从第n+1个开始,连续取m个
  • ${var:n} 从n+1个开始取,直到结尾;或删除前n个字符

删除某个子串 ###%%%删除匹配字符串

  • ###是从左开始删除匹配, 其中#是最小匹配,##是最大匹配
    • ${var#x*a} 从左边删除,以x开始a结尾的最小删除
  • %和%%是从右开始删除匹配, 其中%是最小匹配, %%最大匹配
    • ${var%x*z} 从右边删除,以x开始,以z结尾的最小删除

字符串替换

  • ${var/src/dst} 把var中src的子串替换为dst,自动替换第一个匹配的结果
  • ${var//src/dst} 把var中src的子串全部替换为dst
  • ${var/#src/dst} 把var中从头开始匹配src的子串,替换为dst
  • ${var/%src/dst} 把var中从尾部开始匹配src的子串,替换为dst

字符串未定义,给予默认值

  • ${var-xyz} 如果var变量未定义,才会赋予默认值xyz,否则输出对应的变量值
  • ${var:-xyz} 如果var只要为空,使用默认值xyz
  • ${var+xyz} 只有变量var赋值后,默认值生效。如果var定义为空,也会生效
  • ${var:+xyz} 如果变了var为空,不使用默认值xyz
  • ${var?xyz} 问号后面跟错误信息,如果var变量为定义,则报错,并提示后面定义的错误信息
  • ${var:?xyz} 如果var未定义或定义为空,则报错,并提示定义的错误信息

获取字符的索引位置

  • expr index "$string" $substring 会将substring拆分成一个个字符,返回最先匹配的字符位置
var1="quickstart is app"
ind=`expr index "$var" start`
echo ${ind}

计算子串长度

  • expr match $string substr 子串必须从头开始匹配,否则是匹配不到的
var="quichstart is a app"
substr="app"
sublen=`expr match "$var" $substr`
echo $sublen

抽取子串

  • ${string:position} 从string的position开始
  • ${string:position:length} 从position开始,匹配长度为length
  • ${string: -position} 从右边开始匹配,冒号:-中间有空格
  • ${string:(position)} 从左边开始匹配
  • expr substr "$string" $position $length 从position开始,匹配商都为length
var1="quickstart is a app"
sub=${var1:1}
sub=${var1:1:2}
sub=${var1: -1}
sub=${var1:(-1)}
sub=`expr substr "$var1" 1 2`

命令替换-获取命令执行结果

  • command
  • $(command)
# 获取系统的所有用户并输出
index=1
for user in `cat /etc/passwd | cut -d ":" -f 1`
do
  echo   "This is $index user: $user"
  index=$(($index + 1))
done

# 根据系统时间计算今年或明年
echo "This is $(date + %Y) year"  
echo "This is $(($(date + %Y) + 1)) year"

变量声明

declare和typeset命令两者等价,declare、typeset命令都是用来定义变量类型的

  • declare
    • -r 将变量设置为只读
    • -i 将变量设为整数
    • -a 将变量定义为数组
    • -f 显示此脚本前定义过的所有函数和内容
    • -F 仅显示此脚本前定义过的函数名
    • -x 将变量声明为环境变量
  • typeset

bash数学运算

  • expr $num1 operator $num2
  • $(($num1 operator $num2)) 进行加减乘除求余运算,对=和!=运算,会抛语法错误,对于逻辑运算,推荐使用expr命令

bash运算bc

  • 路径/usr/bin/bc
  • shell中使用方法echo "scale=4;32.4+32.1" | bc
posted @ 2022-11-01 22:55  phper-liunian  阅读(38)  评论(0编辑  收藏  举报