我们在使用Unix的时候,经常需要运用到Unix自动化的知识。今天,我们就来了解下Unix自动化的知识。任务自动化是一个很泛的主题。我将本节仅限于非交互式 简单自动化。对于交互式命令的Unix自动化,Expect 是当前可用的***工具。应该要么了解它的语法,要么用 Perl Expect.pm 模块。可以从 CPAN 获取 Expect.pm;请参阅参考资料以了解更多详细信息。
利用 cfengine,可以根据任意标准Unix自动化几乎任何任务。但是,它的功能非常象 Makefile 功能,对变量的复杂操作是很难处理的。
当发现需要运行这样的命令,该命令的参数来自于散列或通过单独的函数时,通常***切换到 shell 脚本或 Perl。由于 Perl 的功能,其可能是较好的选择。虽然,不应该将 shell 脚本弃为替代来使用。有时,Perl 是不必要的,您只需要运行一些简单的命令。
Unix自动化中,自动添加用户是一个常见问题。可以编写自己的 adduser.pl 脚本,或者用大多数现代 Unix 系统提供的 adduser 程序。请确保使用的所有 Unix 系统间语法是一致的,但不要尝试编写一个通用的 adduser 程序接口。
它太难了,在您认为涵盖了所有 Unix 变体后,迟早会有人要求 Win32 或 MacOS 版本。这不是仅仅用 Perl 就能解决的问题之一,除非您是非常有野心的。这里只是让脚本询问用户名、密码、主目录等等,并以 system() 调用来调用 adduser。
清单 4:用简单的脚本调用 adduser
- #!/usr/bin/perl -w
- use strict;
- my %values; # will hold the values to fill in
- # these are the known adduser switches
- my %switches = ( home_dir => '-d', comment => '-c', group => '-G',
- password => '-p', shell => '-s', uid => '-u');
- # this location may vary on your system
- my $command = '/usr/sbin/adduser ';
- # for every switch, ask the user for a value
- foreach my $setting (sort keys %switches, 'username')
- {
- print "Enter the $setting or press Enter to skip: ";
- $values{$setting} = ;
- chomp $values{$setting};
- # if the user did not enter data, kill this setting
- delete $values{$setting} unless length $values{$setting};
- }
- die "Username must be provided" unless exists $values{username};
- # for every filled-in value, add it with the right switch to the comma
- nd
- foreach my $setting (sort keys %switches)
- {
- next unless exists $values{$setting};
- $command .= "$switches{$setting} $values{$setting} ";
- }
- # append the username itself
- $command .= $values{username};
- # important - let the user know what's going to happen
- print "About to execute [$command]\n";
- # return the exit status of the command
- exit system($command);
Unix自动化的一个问题,我们就讲解到这里了。
【编辑推荐】