Bash命令行是自动执行任务的绝佳方式。无论您是使用在服务器上运行的Linux来管理日志文件或其他文件,还是在PC上组织文件以保持桌面整洁,使用Bash的自动化功能都将使您的工作更加轻松。自动化文件任务:for如果你想同时处理一堆文件并对每个文件执行相同的操作,使用for命令。该命令遍历文件列表并执行一个或多个命令。for命令如下所示:forvariableinlistdocommanddone我在示例中添加了额外的空格和换行符来分隔for命令的不同部分。看起来你不能在命令行上同时运行多个命令,但你可以使用;将所有命令放在同一行,如下所示:forvariableinlist;执行命令;让我们看看它的实际效果。我使用for命令重命名一些文件。最近,我有一些截图,想重命名它们。这些截图被命名为filemgr.png或terminal.png,我想在每个名字前加上screenshot。我可以使用for命令一次重命名30个文件。下面是两个文件的示例:$lsfilemgr.pngterminal.png$forfin*.png;做mv$fscreenshot-$f;done$lsscreenshot-filemgr.pngscreenshot-terminal.pngfor命令使得一系列对文件执行一个或多个操作变得容易。您可以使用有意义的变量名称,如image或screenshot,或者您可以在示例中使用“缩写”变量f。当我使用for循环编写脚本时,我会选择有意义的变量名。但是我在命令行使用for的时候,一般会选择缩写变量名,比如f代表文件,d代表目录等等,不管你选择什么变量名,在引用变量的时候一定要加上$符号。这会将变量扩展为您正在处理的文件的名称。在Bash提示符下键入helpfor以了解有关for命令的更多信息。有条件地执行:当您需要对每个文件执行相同的操作时,使用for循环遍历某些文件很有用。但是,如果您需要对某些文件做一些不同的事情怎么办?为此,您需要使用if语句进行条件执行。if语句如下:iftestthencommandfi也可以用if、else语句判断:iftestthencommandelsecommandfi可以用if、elif、else语句来实现更复杂的程序。当我需要一次自动处理很多文件时,我会在脚本中使用:iftest1thencommandeliftest2thencommandeliftest3thencommandelsecommandfiif命令可以让你做各种判断,比如判断一个文件是否是文件,或者文件是否为空文件(零字节)。在命令行输入helptest可以立即查看使用if语句可以执行的各种测试。例如,假设我想清理一个包含几十个文件的日志目录。日志管理中的一个常见任务是删除所有空日志文件,并对其他日志进行压缩。解决此问题的最简单方法是删除空文件。没有if测试可以精确匹配,但是我们有-s选项判断是否是文件,判断文件不为空(size不为0)。这与我们想要的相反,但我们可以使用!否定某些东西不是文件或为空的测试。让我们用一个例子来看看这个过程。我创建了两个测试文件:一个是空的,另一个包含一些数据。我们可以用if来判断,如果文件为空,则打印空信息:$lsdatafileemptyfile$if[!-s数据文件];然后回声“空”;如果[!-s空文件];然后回声“空”;fiempty我们可以结合if和for命令来检查日志文件列表中的空文件并删除它们:$ls-ltotal20-rw-rw-r--。1jhalljhall2Jul101:02log.1-rw-rw-r--。1jhalljhall2Jul201:02log.2-rw-rw-r--。1jhalljhall2Jul301:02log.3-rw-rw-r--。1jhalljhall0Jul401:02log.4-rw-rw-r--。1jhalljhall2Jul501:02log.5-rw-rw-r--。1jhalljhall0Jul601:02log.6-rw-rw-r--。1jhalljhall2Jul701:02log.7$forfinlog.*;如果[!-s$f];然后rm-v$f;;doneremoved'log.4'删除了'log.6'$ls-ltotal20-rw-rw-r--。1jhalljhall2Jul101:02log.1-rw-rw-r--。1jhalljhall2Jul201:02log.2-rw-rw-r--。1jhalljhall2Jul301:02log.3-rw-rw-r--。1jhalljhall2Jul501:02log.5-rw-rw-r--。1jhalljhall2Jul701:02log.7使用if命令在需要时执行一些操作,使脚本变得智能。当我需要确定一个文件在我的系统上是否存在,或者当脚本正在检查的项目是一个文件或目录时,我经常在脚本中使用if。使用if使脚本能够根据需要采取不同的操作。
