Shell变量中截取字符串

一、说明

本文讲解在变量中处理字符串的部分语句,格式化变量值的输出

 

二、字符串截取的方式:

 

  • ${变量名:起始位置:长度}

1)仅截取前两个字符,其他字符删除

[root@server ~]# a="abcde"

[root@server ~]# echo ${a:0:2}

ab

其中“0”代表从哪个字符标识位截取,“2”代表截取的字符串个数

第一个字符标识位为0,后续为1、2、3、4

 

2)从第2个字符开始,截取3个字符

[root@server ~]# a="abcde"

[root@server ~]# echo ${a:1:3}

bcd

 

三、字符串替换的两种用法

 

  • 只替换第一个匹配结果:${变量名/old/new}
  • 替换全部匹配结果:${变量名//old/new}

  区别是替换全部使用连续的2个“/”

1)替换第一个字符 

[root@server ~]# echo $a

abcdec

[root@server ~]# echo ${a/c/3}

ab3dec

 

2)替换全部字符

[root@server ~]# echo $a

abcdec

[root@server ~]# echo ${a//c/3}

ab3de3

 

四、字符串最短和最长匹配

 

  • 从左向右,最短匹配删除:${变量名#*关键词}

  -即遇到第一个关键词进行匹配,删除自关键词往左字符串

  • 从左向右,最长匹配删除:${变量名##*关键词}

  -即遇到最后一个关键词进行匹配,删除自关键词往左字符串

  • 从右向左,最短匹配删除:${变量名%关键词*}

  -即遇到第一个关键词进行匹配,删除自关键词往右的字符串

  • 从右向左,最长匹配删除:${变量名%%关键词*}

  -即遇到最后一个关键词进行匹配,删除自关键词往右的字符串

 

1)匹配第一个‘:’之后的内容

[root@server ~]# echo $a

root:x:0:0:root:/root:/bin/bash

[root@server ~]# echo ${a#*:}

x:0:0:root:/root:/bin/bash

 

2)匹配最后一个‘:’之后的内容

[root@server ~]# echo $a

root:x:0:0:root:/root:/bin/bash

[root@server ~]# echo ${a##*:}

/bin/bash

 

3)匹配最后一个‘:’之前的内容

[root@server ~]# echo $a

root:x:0:0:root:/root:/bin/bash

[root@server ~]# echo ${a%:*}

root:x:0:0:root:/root

 

4)匹配第一个‘:’之前的内容

[root@server ~]# echo $a

root:x:0:0:root:/root:/bin/bash

[root@server ~]# echo ${a%%:*}

root

 

五、变量的初始值(缺省值)

 

  • ${var:-word}

 

  “:-”是固定写法,var代表变量,word代表初始值

 

测试创建用户,设置密码

[root@server ~]# cat test.sh
#!/bin/bash

read -p "请输入账号:" user
[ -z $user ] && exit
##如果没有输入用户名,则脚本自动退出

read -p "请输入密码:" pass
pass=${pass:-abcdef}
##如果没有输入密码,则缺省密码为abcdef

echo "$user"
echo "$pass"

 

posted @ 2021-09-12 19:11  龙骑士老尹  阅读(896)  评论(0编辑  收藏  举报