LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2586|回复: 11

为一组文件改名的脚本程序

[复制链接]
发表于 2002-12-27 20:12:08 | 显示全部楼层 |阅读模式
#!/bin/sh

for i in $*
do
    echo "$i -> $i.bak"
    mv $i $i.bak
done
将这个脚本保存为renameall.sh,然后chmod +x ranameall.sh。执行时在目录中用./renameall.sh *
这个程序会将当前目录中的所有程序改为后缀为.bak的文件。
发表于 2002-12-27 21:22:58 | 显示全部楼层
$*从哪里来?

ls赋给一个变量i

$*改成$i
 楼主| 发表于 2002-12-27 21:48:21 | 显示全部楼层
最初由 langzhiwu 发布
$*从哪里来?

ls赋给一个变量i

$*改成$i

忘记讲程序应该如何执行了。这个程序要带参数。用renameall *,这样当前目录中所有的文件名就成为程序的参数了。
发表于 2002-12-27 21:50:31 | 显示全部楼层
那*怎样才能成为当前目录下的所有文件?
 楼主| 发表于 2002-12-27 22:04:11 | 显示全部楼层
如果脚本程序执行时带有参数,这些参数会传递到脚本程序中去,并用参数变量引用。$1,$2,...表示脚本程序的第一个,第二个参数,。。。,$*表示一个全体参数组成的清单。这是一个单独的变量,各个参数之间用环境变量IFS中的第一个字符分隔开。这个IFS一般是一个空格。
用renameall *时,就会把所有的文件名(*代表所有的文件)传递到脚本中去,如当前目录下只有aa,bb两个文件,则 * 代表aat和bb,传递到脚本中后,成为一个$*的内容。即$*为"aa bb" ,其中$1为aa,$2为bb。
发表于 2002-12-27 22:21:20 | 显示全部楼层
如果该目录下有100个文件,要将这100个文件加.bak的话

你岂不得renameall 文件1 文件2 ……
发表于 2002-12-27 23:10:19 | 显示全部楼层

俺笨,这样成不?

这个就不写脚本了

for i in * ;do
mv $i $i.bak
done

这样就可以了呀~~~~
而且,把中间那句mv换成你需要的别的功能,可以作很多事情的
发表于 2002-12-28 00:23:37 | 显示全部楼层
sigh
 楼主| 发表于 2002-12-28 12:14:45 | 显示全部楼层
最初由 langzhiwu 发布
如果该目录下有100个文件,要将这100个文件加.bak的话

你岂不得renameall 文件1 文件2 ……

你不知道在SHELL命令中" * ”是通配符,代表全体吗?这目录下有多少文件,它都可以代表。
发表于 2002-12-28 21:21:30 | 显示全部楼层
那就要请教大哥renameall *之后
$1是什么东西?是*还是第一个文件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表