当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > 利用变量在Linux中给文件命名

Unix/Linux
linux 操作技巧收集_
linux下如何读取使用iso 镜像文件的方法
Linux平台下文件的压缩与解压参数说明
Linux下常用压缩格式的压缩与解压方法
Linux JDK,TOMCAT安装及环境设置
Linux sleep命令使用参数
Linux cat命令参数
nfs 配置的简单例子
linux kill 关闭进程命令
linux ultrasphinx Anonymous modules have no name to be referenced by
Linux oracle 9i图文安装方法一
Linux oracle 9i图文安装教程二
Linux oracle 9i图文安装教程三
Linux oracle 9i图文安装教程四
Linux oracle 9i图文安装教程五
Linux oracle 9i图文安装教程六 完结篇
linux AS3 oracle9i 安装指南
Linux 下 (RedHat 9.0) JDK,Tomcat,MySQL的安装
RedHat 9.0下Apache+PHP+MySQL服务器安装配置
Linux 下用 Python 连接 MSSql Server 2008

Unix/Linux 中的 利用变量在Linux中给文件命名


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-20   浏览: 61 ::
收藏到网摘: n/a

前不久有一个Linux系统管理员向笔者求助。他说他们在Linux操作系统上部署了一个Oracle 10G的数据库系统。现在他们利用数据库系统中的数据泵工具从系统中备份数据。他们希望每天把这个备份文件复制到一个特定的地方。到这一步为止都没有问题。但是他们希望在复制的过程中,能够利用变量名对这个备份文件进行命名。如按星期几的不同,分别命名为1backup.dmp,2backup.dmp等等。前面的1、2就表示星期几的意思。这么设置的话,一个星期一个轮回。到下个星期一的话,新的备份文件就会把旧的备份文件替换掉。如此的话,备份文件所占用的硬盘空间也就不会无限制的增加上去。

笔者对于他们为什么不直接采用Oracle提供的备份工具制定备份策略对数据库进行备份感到不解。不过要实现上面这个利用变量来给文件命名的话,还是可以实现的。笔者根据他们企业的需求,给这个系统管理员详细的阐述了实现方法。

一、文件创建时间与系统时间的关系。

在利用变量来命名文件名字的时候(如时间变量),需要注意一个问题,就是文件的创建时间与系统时间的关系。如上面这个需求,如果某个文件是在星期一创建的,而在星期二时复制这个文件。那么此时文件的名字应该为多少呢?是按文件的创建时间来命名,还是按复制的时间来命名的。如果从上面这个需求来看,利用文件的创建时间来命名更加的合理。因为这个创建时间才真正体现了数据库的备份时间。

二、相关命令参数解析。

如果要把一个文件复制到另外一个地方,同时利用时间变量对其进行重命名的话,那么可以利用如下的命令来实现cp mydb.log "(date %w)"mydb.log。这个命令的意思就是把mydb.log复制到一个特定的位置(当前目录下),并对此进行重新命名。命名的规则就是在原来的文件变量前面加上一个时间参数,这里采用的是星期的时间变量。

"(date %w)"这个参数就是截取星期几的时间变量。注意,这里的时间是按照文件的创建时间来的,而不是参考文件复制的时间。也就是说,如果这个文件的创建时间是星期三,而复制时间是星期四的话,那么这个变量的值就为3,而不是4。因为文件的创建时间为3。笔者以前刚开始接触Linux操作系统的时候,经常犯这个错误。希望笔者这个过来人常犯的错误,能够引起大家的警惕。

另外上面这个时间参数,必须要用双引号括起来。不过不这么做的话,那么系统就会提示这个命令有错误。这是一个语法上的错误。所以如果系统管理员在批处理程序中使用这个命令的话,那么最好能够进行预先测试。因为这些语法错误的话,就算再老到的系统管理员,一不小心就容易犯。实践是检验真理的唯一标准,这句话是不会错的。

还有一个小细节就是"(date %w)"与"(date +%w)"有区别吗?这个既有区别,又可以说没有。这主要是看用在什么场合了。如果用在CP命令中,则中间加不加(+)加号,是一样的。但是,在其他一些命令场合中,必须要加入中间这个加号。否则的话,系统会提示错误。如下面笔者要谈到的ECHO命令,就有这方面的要求。

三、利用Echo命令来进行测试。

如果系统管理员对于自己编写的命令参数不怎么肯定的话,那么就可以利用echo命令来进行测试。Echo命令可以显示环境变量的值,也可以显示某些特定变量的值。其实这些变量就是系统中的环境变量。如下图所示。利用echo $(date +%w)就可以显示当天系统时间。这个命令只显示星期几。

如果使用这个命令的话,跟cp命令中最终的时间参数还是有一点差距,主要体现在以下这几个方面。

首先,要利用echo命令来显示系统变量值的时候,必须在变量前面加上$符号。如果加上这个符号,系统就会认为这是一个环境变量,或者由环境变量转换过来的一个变量。如果不加这个符号的话,则操作系统会无法识别,也就不能够正常显示这个变量的值了。

其次,在这个变量中,中间必须加入+号。如上图所示,如果不加入这个+号的话,则操作系统就会提示错误,说%w是一个无效的参数。但是在cp命令中,则没有这个强制的限制。在中间加不加这个加号,都能够达到同样的效果。不过为了提高参数的准确性,最好大家还是按照这个echo命令可以认可的格式下。因为echo命令可以认可的格式,则在其他命令中是通用的。相反,其他命令中可以用的格是,在echo等命令上不一定通用。所以为了提高编写的脚本程序的移植性,最好能够采用通用的变量书写方式。