知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

Linux Shell脚本攻略学习总结:三

发布时间:2014-09-05 14:17:37作者:知识屋

Linux Shell脚本攻略学习总结:三
 
根据扩展名切分文件名
首先,我们先来看两个例子:
[delphi] 
file_jpg="sample.jgp"  
name=${file_jpg%.*}  
echo File name is : $name  
输出结果:  
File name is sample  
 
[delphi] 
extension=${file_jpg#*.}  
echo Extension is : $extension  
输出结果:Extension is : jpg  
 
工作原理
在第一个任务中,为了从“名称.扩展名”中取得文件的名字,我们使用了%操作符
${$var%.*}的含义是:
1.从$var中删除位于%右侧的通配符所匹配的字符串。通配符从右向左进行匹配
2.给var赋值,所以结果会输出文件名
 
%属于非贪婪操作。它从右向左找出匹配通配符的最短结果。还有一个操作符 %% 。这个操作符与 % 相似,但行为模式确实贪婪的,这意味着它会匹配符合条件的最长的字符串。
 
在第二个任务中,原理是和 % 相似的,只是它的运行过程是从左到右。
操作符 ## 则用 *. 从左到右执行贪婪匹配。
 
下图展示一个例子:
其中 URL=“www.google.com”
 
 
批量重命名文件
下面这个例子实现的是批量处理文件重命名操作,支持的格式丰富:
首先,我们需要在目录下放置测试的图片,如下图所示:
 
 
其中rename.sh就是实现功能的脚本文件,我们运行脚本程序,得到如下所示的输出:
 
 
我们再来看看文件的状态是不是真的改变了:
 
 
下面给出实现的脚本程序:
[delphi] 
#!/bin/bash  
#rename.sh  
count=1;  
for img in *.[jJ][pP][gG] *.[pP][nN][gG]  
do  
new=image-$count.${img##*.}  
mv "$img" "$new" 2> /dev/null  
  
if [ $? -eq 0 ]  
then  
echo "Renaming $img to $new"  
let count++;  
fi  
done  
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜