字串处理

字串处理


字串截取

方法一、使用${}表达式
--格式:${var:起始位置:长度}
编号从0开始,可省略
[root@vh01 script]# a=12345678
[root@vh01 script]# echo ${a:0:3}
123

方法二、使用expr substr
--格式:expr substr "$var" 起始位置:长度
编号从1开始
[root@vh01 script]# a=12345678
[root@vh01 script]# expr substr $a 1 2
12

方法三、使用cut工具
--格式:echo $var|cut -b 起始位置-结束位置
编号从1开始
root@vh01 script]# a=12345678
[root@vh01 script]# echo $a|cut -b 1,3
13
[root@vh01 script]# echo $a|cut -b 1-3
123

[root@vh01 script]# cut -d: -f 7 /etc/passwd

-b bye 按字节截取
-c character 按字符截取
-f field 按列截取

basename 截取文件名
dirname 截取路径
[root@vh01 script]# basename /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0
[root@vh01 script]# dirname /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts

[root@vh01 script]# /etc/init.d/httpd
Usage: httpd {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}
[root@vh01 script]# /etc/init.d/sshd
用法: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}

字串替换的方法
只替换第一个匹配结果
--格式: ${var/old/new}
替换全部匹配结果
--格式: ${var//old/new}

[root@vh01 script]# a=12356783g3
[root@vh01 script]# echo ${a/3/x}
12x56783g3
[root@vh01 script]# echo ${a//3/x}

字符串掐头去尾
字符串掐头
从左向右,最短匹配删除
--格式:${变量名#*关键词}
从左向右,最长匹配删除
--格式:${变量名##*关键词}
#用来删除头部,*通配
[root@vh01 script]# u=`head -1 /etc/passwd`
[root@vh01 script]# echo $u
root:x:0:0:root:/root:/bin/bash
[root@vh01 script]# echo ${u#*:}
x:0:0:root:/root:/bin/bash
[root@vh01 script]# echo ${u##*:}
/bin/bash

字符串去尾
从右向左,最短匹配删除
--格式:${变量名%关键词*}
从右向左,最长匹配删除
--格式:${变量名%%关键词*}
%用来删除尾部,*通配
[root@vh01 script]# echo ${u%:*}
root:x:0:0:root:/root
[root@vh01 script]# echo ${u%%:*}
root

批量改名
[root@vh01 script]# vim k.sh
#!/bin/bash
for i in `ls /tmp/*.$1`
do
mv $i ${i%.*}.$2
done

给变量赋予初始值
初值的检测及设置
取值,${var:-word}
--若变量var已存在且非Null,则返回$var的值
--否则返回字串"word",变量var值不变

有值就用原来的值,没有值就显示后面的值,变量的值不变
[root@vh01 script]# echo ${ttt:-ok}
ok
[root@vh01 script]# ttt=12
[root@vh01 script]# echo ${ttt:-ok}
12

[root@vh01 script]# vim useradd1.sh
#!/bin/bash
read -p "请输入用户名:" user
stty -echo
read -p "请输入密码:" pass
stty echo
user=${user:-tom}
pass=${pass:-123}
useradd $user
echo "$pass"|passwd --stdin $user

有值就用原来的值,没有值就赋予值
[root@vh01 script]# echo ${op:-ok}
ok
[root@vh01 script]# echo $op

[root@vh01 script]# echo ${op:=ok}
ok
[root@vh01 script]# echo $op
ok
[root@vh01 script]#

posted @ 2021-09-17 13:54  Linux刀客  阅读(38)  评论(0编辑  收藏  举报