linux中很多地方都需要这样或着那样的去使用、管理、操作字符,多掌握在linux中字符的控制方法直接决定能否写好脚本与更好的控制linux系统。
1, 字符串的截取
x=abcdef
${变量名:截取的位置:截取的位数}
echo ${x:1:2} //截取bc,位置是从0开始计算,所以要从1开始才能截取第二个字符b
echo ${x:1:1} //从第2个字符截取,截取1位
echo ${x:0:2} //从第1个字符截取,截取2位
echo ${x::2} //效果同上,如果从第1位开始截取的话,0可以省略不写
举个栗子:
编写脚本,可以获取随机的8位字符(将来可以作为为用户配置随机密码时使用)
#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 //定义变量
for i in {1..8} //循环8次
do
n=$[RANDOM%62] //得到0-61之间的随机数
a=${x:n:1} //随机截取一个x中的字符存储到变量a中
pass=$pass$a //将每次获取的随机字符存储到变量pass中
done
echo $pass //循环完8次之后,喊出最终结果,就得到了1个8位的字符
2,字符串的替换
${变量名称/被替换内容/新内容}
a=1234 //定义素材
echo ${a/3/6} //把3换成6
a=11223344 //定义素材
echo ${a/3/6} //把3换成6,默认只换一个
echo ${a//3/6} //使用两个/可以实现把所有3换成6
a=333444 //定义素材
echo ${a//3/} //把所有3换成空,相当于删除
bn bnnnnnnnnnnnnn bnn
3, 字符串的删除
${变量名称#被删除的内容} 从左往右删除
${变量名称%被删除的内容} 从右往左删除
a=abcdefghijklmn
echo ${a#abcdefgh} //从左往右删除到h
echo ${a#*h} //效果同上,更精简
echo ${a#ab} //从左往右删除到b
echo ${a#*b} //效果同上,更精简
a=abcxyzabcxyz
echo ${a##*b} //从左往右删除到最后一个b
a=abcxyzabcxyz
echo ${a%abcxyz} //从右往左删除abcxyz
echo ${a%a*} //效果同上,更精简
echo ${a%%a*} //从右往左删除到最后一个a
echo ${a%%y*} //从右往左删除到最后一个y
举个栗子:
编写脚本,实现批量修改文件的扩展名
touch abc{1..10}.txt //创建10个文件作为素材
#!/bin/bash
for i in $(ls *.txt) //找到所有txt文件交给for循环
do
n=${i%.*} //先用去尾删除扩展名
mv $i $n.doc //再将原文件修改为doc扩展名
done
变量初值(备用值)的定义
${变量名:-初值} //如果变量有值则使用本身的值,如果变量为空,则使用初值
栗子:
编写脚本,可以创建用户与配置密码,密码可以自定义,也可以使用默认的123456
#!/bin/bash
read -p "请输入用户名:" n
useradd $n
read -p "请输入密码:" p
echo ${p:-123456} | passwd --stdin $n //当用户没有输入密码时,密码就是123456