一、截取子字符串
1.使用expr命令
基本用法:expr substr $var1 起始位置 截取长度
$ var1="Ubuntu18.04"
$ expr substr $var1 1 6
Ubuntu
$ expr substr $var1 7 5
18.04
2.使用cut命令
基本用法
命令输出 | cut -c 起始位置-结束位置
命令输出 | cut -d '分隔符' -f 字段编号
$ var1="Ubuntu18.04"
$ echo $var1 | cut -c 7-8
18
$ echo $var1 | cut -c -6 //简略用法,缺省从1开始
Ubuntu
$ echo $var1 | cut -d 't' -f 2
u18.04
3.使用${}表达式
基本用法(注:第一个起始位置的编号为0)
${var1:起始位置:截取长度}
${var1::截取长度}
$ var1="CentOS6.5"
$ echo ${var1:1:4}
entO
$ echo ${var1::4}
Cent
$ echo ${var1:6:3}
6.5
二、字符串替换
1.使用${}表达式
基本用法
${var1/old/new} //替换第一个匹配结果old
${var1//old/new} //替换所有的匹配结果old
$ var="CentOS6.5 Server"
$ echo ${var1/CentOS/RHEL}
RHEL6.5 Server
$ echo ${var1/e/##}
C##ntOS6.5 Server //只有第一个e被替换
$ echo ${var1//e/##}
C##ntOS6.5 S##rv##r //所有的e都被替换
例:批量替换应用
根据模板字串创建新的/etc/passwd记录
参照root的记录作为模板
新用户的登录名称由变量UN提供
$ var1="root:x:0:0:root:/root:/bin/bash"
$ UN="lisi";echo ${var1//root/$UN}
lisi:x:0:0:lisi:/lisi:/bin/bash
$ UN="wangwu";echo ${var1//root/$UN}
wangwu:x:0:0:wangwu:/wangwu:/bin/bash
2.tr单字替换工具
基本用法(可以不连续地替换)
命令输出 | tr 'abc' 'ABC'
命令输出 | tr -d 'abc'
$ head -l /etc/passwd | tr 'or' 'OR' //将字符o、r都改成大写
ROOt:x:0:0:ROOt:/ROOt:/bin/bash
$ head -l /etc/passwd | tr -d ':' //删除所有的:字符
rootx00root/root/bin/bash
三、路径分割
1.概念
文件路径/etc/passwd的含义
文件所在的位置:/etc
文件名称:passwd
目录路径/boot/grub的含义
目录所在的位置:/boot
目录名称:grub
文件/目录所在的位置称为目录名称,文件/目录本身称为基本名称
2.dirname 取目录名称
基本用法:dirname "字符串"
$ dirname "/etc/passwd"
/etc
$ var1="/boot/grub/"
$ dirname $var1
/boot
3.basename 取基本名称
基本用法:basename "字符串"
$ basename "/etc/passwd"
passwd
$ var="/boot/grub/"
$ basename $var1
grub
$ basename $(ls /etc/vsftpd/vsftpd.conf)
vsftpd.conf
$ dirname $(ls /etc/vsftpd/vsftpd.conf)
/etc/vsftpd
四、使用随机字符串
1.随机设备或工具
常见的随机性工具
随机数变量:RANDOM
特殊设备文件:/dev/urandom
UUID生成命令:uuidgen
$ uuidgen
d20dff5d-2859-42ea-8de4-ef578a6bbaea
$ head -1 /dev/urandom
/lasHdg$jsaUlg([agsGagj!lsag.salgM])
2.随机信息的转换
md5sum校验工具(将随机数、乱码转换成MD5编码的字符串)
根据输入文本计算出256位(32字符)的MD5编码值
输入文本有任何差异,编码结果都会不相同
$ md5sum /etc/passwd
123236k3h26h2j313jh5213j21k35h2k /etc/passwd
$ echo $RANDOM | md5sum
671c9f3f9596b7e0b6360ebd0b16fc35 -
$ echo $RANDOM | md5sum
7b1e7e85c23dd70156326ls0enra0169 -
$ head -1 /dev/urandom | md5sum
c5281670d8bl6c2b8o9263f820bkk23d -
$ head -1 /dev/urandom | md5sum
02326da20692dg2360sagjlsjgsa2lg9 -
3、截取随机字符串
1)使用cut命令
直接利用随机信息的md5sum转换结果
任意截取32位以内的连续字符串
$ echo $RANDOM | md5sum | cut -c -8 //取8位随机串
1bads8d4
$ echo $RANDOM | md5sum | cut -c -16 //取16位随机串
603235fds2368slg
2)处理uuidgen随机串
默认会有 - 连字符
可利用tr命令删除 - 连字符
再使用cut命令截取所需长度的字符串
$ uuidgen | tr -d '-' //去掉-字符的情形
93266h2e9g00sheh32g6802a1hd4kd02
$ uuidgen | cut -c -8 //取8位随机串
E63o0f23
$ uuidgen | tr -d '-' | cut -c -16 //取16为随机串
523hd082de9g40a1
五、命令替换
提取命令输出
使用场景:
i.简化运维任务,在命令行嵌入另一个命令的输出结果
ii.将命令的输出保存到指定变量
1.使用`反撇号
基本用法:`可执行命令`
例:查看tr所属软件包的名称、版本
$ which tr //找到命令在哪里
/usr/bin/tr
$ rpm -qf /usr/bin/tr //找到命令所属的软件包
coreutils-8.4-31.el6.x86_64
$ rpm -qf `which tr` //两步并作一步
coreutils-8.4-31.el6.x86_64
2.使用$()表达式
基本用法:$(可执行命令)
例:查看tr所属软件包的用途描述
$ rpm -qi $(rpm -qf $(which tr)) //方便嵌套使用
Name :coreutils Relocations:(not relocatable)
Version :8.4 Vendor:Red Hat,Inc.
Release :31.el6 Build Date:2013年10月18日 星期五 20时06分28秒
.. ..
Summary :A set of basic GNU tools commonly used in shell scripts
Description :These are the GNU core utilities. This package is the combination of the
old GNU fileutils, sh-utils, and textutils packages.
应用示例
i.列出/boot/下超过3M的文件的详细属性
$ ls -lh ${find /boot -size +3M}
-rw-------. 1 root root 17M 8月 12 10:13 /boot/initramfs-2.6.32-431.el6.x86_64.img
-rwxr-xr-x. 1 root root 4.0M 11月 2013 /boot/vmlinuz-2.6.32-431.el6.x86_64
ii.记录一个8位的随机密码,并为用户stu01设置此密码
$ PASS=$(uuidgen | cut -c -8) //提取随机串,存入变量
$ echo $PASS //确认取值结果
89d4e2c3
$ echo $PASS | passwd --stdin stu01 //利用变量值设密码
更改用户stu01的密码。
passwd:所有的身份验证令牌已经成功更新。