0

perl スクリプトを使用して、ファイルからいくつかのパラメーターを読み取りたいと考えています。grep コマンドを使用して、これらのパラメーターの値を見つけました。

#!/usr/bin/perl

if( scalar @ARGV ==0)
{
  die "Number of argument is zero. Please use: perl <script_name> <cdc68.ini> \n";
}


if( !-f $ARGV[0])     ## if the 1st arg is not a file
{
   die "$ARGV[0] is not a valid file type \nInput Arguments not correct!!! \n";
}

my $file_cnf=$ARGV[0];

my $DEST_PATH=`grep relogin_logs $file_cnf | cut -d "=" -f2`;

my $SRC_PATH=`grep dump_logs $file_cnf | cut -d "=" -f2`;
my $FINAL_LOG=`grep final_log $file_cnf | cut -d "=" -f2`;

print "\n$DEST_PATH \n $SRC_PATH \n $FINAL_LOG\n";


if ( !-d $DEST_PATH)
{
  die "$DEST_PATH is not a dir";
}

else
{
  print "ok";
}

読みたいファイルは

cat cdc68.ini
reconn_interval=15
relogin_logs=/osp/local/home/linus/pravej/perlD/temp/relogin/
dump_logs=/osp/local/home/linus/pravej/perlD/temp/
final_log=/osp/local/home/linus/pravej/perlD/final_log/
Number_days=11

出力例:

perl readconfig.pl cdc68.ini
/osp/local/home/linus/pravej/perlD/temp/relogin/
/osp/local/home/linus/pravej/perlD/temp/
/osp/local/home/linus/pravej/perlD/temp/relogin/
is not a dir at readconfig.pl line 26.

ここで私が間違っていることを誰かが提案できますか? config や tiny.pm のような perl モジュールは使いたくないことに注意してください。また、これらのディレクトリはすでに私のUNIXシステムに存在します。よろしくお願いします

4

2 に答える 2

5

シェル utils の代わりに perl 解析を使用できます

my $file_cnf = $ARGV[0];

open my $fh, "<", $file_cnf or die $!;
my %ini = map /(.+?)=(.+)/, <$fh>;
close $fh;

print "\n$ini{relogin_logs} \n $ini{dump_logs} \n $ini{final_log}\n";
于 2014-02-04T09:39:31.223 に答える
3

mpapec の代替解析は、現在のスクリプトよりもはるかに優れています。しかし、価値があるのは、元の問題は、バックティック演算子の結果に文字列の末尾に改行文字が含まれることです。

chomp で削除できます。例:

my $DEST_PATH=`grep relogin_logs $file_cnf | cut -d "=" -f2`;
chomp $DESTDIR;

すべてのバックティック コマンドの結果を使用してこれを行います。

于 2014-02-04T10:09:30.080 に答える