在编写脚本需要获取系统内核版本判断部分特性的支持情况,但是实际上内核的版本数是累加的,并不是严格的数字意义上的大小比较。
例如内核版本 3.16 实际是大于 3.9 的,然而数字比较不能直接比较大小,因此需要分离浮点数的证书部分和小数部分,然后进行分开比较。
思路
分别获取一个浮点数的整数和小数部分,或者将一个文件的文件名和扩展名拆分开,可以考虑使用 cut 或者 awk 命令实现。
实现
分离浮点量的整数部分和小数部分有多种方式
方式一
使用 cut 实现
$ num1=3.1415
$ echo $num1 | cut -d '.' -f1
3
$ echo $num1 | cut -d '.' -f2
1415方式二
使用 awk 实现
$ echo $num1 | awk -F '.' '{print $1}'
3
$ echo $num1 | awk -F '.' '{print $2}'
1415方式三
还有一种办法,更加高效和洁简,借助 % 操作符可以轻松将名称部分从“名称.扩展名”这种格式中提取出来
$ echo ${num1%.*}
3
$ echo ${num1#*.}
1415${VAR%.*}:从$VAR中删除位于%右侧的通配符(在前例中是.*)所匹配的字符串,通配符从右向左进行匹配。${VAR%%.*}:从$VAR中删除位于%右侧的通配符(在前例中是.*)所匹配的字符串,通配符从右向左进行贪婪匹配(尽可能多的匹配)。${VAR#*.}:从$VAR中删除位于#右侧的通配符(在前例中是*.)所匹配的字符串,通配符从左向右进行匹配。${VAR##*.}:从$VAR中删除位于#右侧的通配符(在前例中是*.)所匹配的字符串,通配符从左向右进行贪婪匹配(尽可能多的匹配)。
示例:
$ url=www.ibm.com
$ echo ${url%.*}
www.ibm
$ echo ${url%%.*}
www
$ echo ${url#*.}
ibm.com
$ echo ${url##*.}
com例如可用下面的脚本来批量重命名文件(不考虑文件名有空格的情形),下面的脚本可以批量重命名所有的以 .jpg 或 .png 结尾的图片。
#!/bin/bash
# filename: batchrename.sh
# Rename jpg and png files
count=1
# maxdepth参数尽量靠前是一个很好的习惯,可以避免find深度查找
for oldName in `find /tmp-maxdepth 1 -iname '*.png' -o -iname '*.jpg' -type f`
do
newName=image-$count.${oldName##*.}
mv $oldName $newName
let count++
done运行效果如下
$ find /tmp -maxdepth 1 -iname '*.png' -o -iname '*.jpg' -type f
/tmp/MyBG1a.jpg
/tmp/V1uBkW4.jpg
/tmp/XXxxzyFr.png
/tmp/A8hB3An8ey.png
/tmp/XXxxeb5t.PNG
$ bash rename.sh
$ find /tmp -maxdepth 1 -iname '*.png' -o -iname '*.jpg' -type f
/tmp/image-5.PNG
/tmp/image-1.jpg
/tmp/image-2.jpg
/tmp/image-4.png
/tmp/image-3.png附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2018-06-07 18:15 PM