在编写脚本需要获取系统内核版本判断部分特性的支持情况,但是实际上内核的版本数是累加的,并不是严格的数字意义上的大小比较。
例如内核版本 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