Shell脚本编程常用指令(中)

字符串处理
截取子字符串

使用expr命令

  • 基本用法
    • expr substr $var1 起始位置 截取长度
[root@Hincy:~]# var1="CentOS6.5"
[root@Hincy:~]# expr substr $var1 1 6
CentOS
[root@Hincy:~]# expr substr $var1 7 3
6.5

使用cut命令

  • 基本用法
    • 命令输出 | cut -c 起始位置-结束位置
    • 命令输出 | cut -d ‘分隔符’ -f 字段编号…
[root@Hincy:~]# var1="CentOS6.5"
[root@Hincy:~]# echo $var1 | cut -c 5-6
OS
[root@Hincy:~]# echo $var1 | cut -c -6		//简略用法,缺省从1开始
CentOS
[root@Hincy:~]# echo $var1 | cut -d 't' -f 2
OS6.5

使用${}表达式

  • 基本用法
    • ${var1:起始位置:截取长度}
    • ${var1::截取长度}
      注:第一个起始位置的编号为0
[root@Hincy:~]# var1="CentOS6.5"
[root@Hincy:~]# echo ${var1:1:4}
entO
[root@Hincy:~]# echo ${var1::4}
Cent
[root@Hincy:~]# echo ${var1:6:3}
6.5
字符串替换

使用${}表达式

  • 基本用法
    • ${var1/old/new}
    • ${var1//old/new}
[root@Hincy:~]# var1="CentOS6.5 Server"
[root@Hincy:~]# echo ${var1/CnetOS/RHEL}
RHEL6.5 Server
[root@Hincy:~]# echo ${var1/e/##}		//只有第一个e被替换
C##ntOS6.5 Server
[root@Hincy:~]# echo ${var1//e/##}		//所有的e都被替换
C##ntOS6.5 S##rv##r

批量替换应用

  • 根据模板字串创建新的/etc/passwd记录
    • 参照root的记录作为模板
    • 新用户的登陆名称由变量UN提供
[root@Hincy:~]# var1 = "root:x:0:0:root:/root:/bin/bash"
[root@Hincy:~]# UN="lisi";echo ${var1//root/$UN}
lisi:x:0:0:lisi:/lisi:/bin/bash
[root@Hincy:~]# UN="wangwu";echo ${var1//root/$UN}
wangwu:x:0:0:wangwu:/wangwu:/bin/bash

tr单字替换工具

  • 基本用法
    • 命令输出 | tr ‘abc’ ‘ABC’
    • 命令输出 | tr -d ‘abc’
[root@Hincy:~]# head -1 /etc/passwd | tr 'or' 'OR'			//将字符o、r都改成大写
ROOt:x:0:0:ROOt:/ROOt:/bin/bash
[root@Hincy:~]# head -1 /etc/passwd | tr -d ':'		//删除所有的:字符
rootx00root/root/bin/bash
路径分割
  • 文件路径 /etc/passwd 的含义

    • 文件所在的位置:/etc
    • 文件名称:passwd
  • 目录路径 /boot/grub 的含义

    • 目录所在的位置:/boot
    • 目录名称:grub

dirname取目录位置

  • 基本用法
    • dirname “字符串”
[root@Hincy:~]# dirname "/etc/passwd"
/etc
[root@Hincy:~]# var1="/boot/grub"
[root@Hincy:~]# dirname $var1
/boot

basename 取基本名称

  • 基本用法
    • basename “字符串”
[root@Hincy:~]# basename "/etc/passwd"
passwd
[root@Hincy:~]# var1="/boot/grub"
[root@Hincy:~]# basename $var1
grub
使用随机字符串

随机设备或工具

  • 常见的随机性工具
    • 随机数变量:RANDOM
    • 特殊设备文件:/dev/urandom
    • UUID生成命令:uuidgen
[root@Hincy:~]# uuidgen
d20dff5d-2859-42ea-8de4-3f76a6bbaea

[root@Hincy:~]# head -1 /dev/urandom
afsnlnqafoanfafna}M
[root@Hincy:~]# 

随机信息的转换

  • md5sum校验工具
    • 根据输入文本计算出256位(32字符)的MD5编码值
    • 输入文本有任何差异,编码结果都不会相同
[root@Hincy:~]# echo $RANDOM | md5sum
34bbrl2lhj1hjhvjhbrk1b2-
[root@Hincy:~]# echo $RANDOM | md5sum
13413h1b4l1yb13y51i9189b -
[root@Hincy:~]# head -1 /dev/urandom | md5sum
c211fib1ifnp1i31ru24bth2b -
[root@Hincy:~]# head -1 /dev/urandom | md5sum
09asncinaif0f080q83rnkfacibcei

截取随机字符串

  • 使用cut命令
    • 直接利用随机信息的md5sum转换结果
    • 任意截取32位以内的连续字串
[root@Hincy:~]# echo $RANDOM | md5sum | cut -c -8		//取8位随机串
1badd736
[root@Hincy:~]# echo $RANDOM | md5sum | cut -c -16		//取16位随机串
dd736hsyco9w7h3s

处理uuidgen随机串

  • 默认会有 -连字符
  • 再使用cut命令截取所需长度的字符串
[root@Hincy:~]# uuidgen | tr -d '-'
absjhr2b3uotb2u3ybfy8 2b8fy2un2
[root@Hincy:~]# uuidgen | cut -c -8
E6e0f322
[root@Hincy:~]# uuidgen | tr -d '-' | cut -c -16
E6e0f322E6e0f322

以上就是本期文章的所有内容,感谢观看,如果对您有帮助请点赞关注+收藏,一键三连,多谢支持!

你可能感兴趣的:(脚本实战,linux,服务器,bash)