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 bnn3, 字符串的删除
${变量名称#被删除的内容} 从左往右删除 ${变量名称%被删除的内容} 从右往左删除 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