将Perl脚本转换为Bash

时间:2014-04-28 03:15:23

标签: linux perl bash wget tar

下面我有一个Perl脚本,我想将其转换为一个bash脚本,但伤心地说,我有Bash中的困难。任何人都可以帮助我。

#!/usr/bin/perl

use strict;
use warnings;


my $output = `df -h`;
my $bundle = "`awk -F \'=\' \'{print \$2}\' config.txt`";
my $bundlename = `echo $bundle | awk -F \'/\' \'{print \$11}\'`;
print $output;

system ("wget $bundle");
print "$bundlename\n";
tar();


sub tar {
    my $cd = system ("tar -xzvf $bundlename") ;
    system ("rm -vf $bundlename");
}

任何人都可以将其转换为Bash脚本吗?

2 个答案:

答案 0 :(得分:2)

#!/bin/sh
bundle=$(awk '$0=$2' FS== config.txt)
bundlename=$(awk '$0=$11' FS=/ <<< "$bundle")
dh -h
wget $bundle
echo $bundlename
tar -xzvf $bundlename
rm -vf $bundlename

答案 1 :(得分:1)

这是一个非常直接的Perl直接音译:

#!/bin/bash

output=$(df -h)
bundle=$(awk -F = '{print $2}' config.txt)
bundlename=$(echo $bundle | awk -F / '{print $11}')  # Possible echo "$bundle" instead?
echo "$output"

wget $bundle
echo "$bundlename"
tar -xzvf "$bundlename"
rm -vf "$bundlename"

鉴于您对$output变量的处理方式,您可以简单地写一下:

bundle=$(awk -F = '{print $2}' config.txt)
bundlename=$(echo $bundle | awk -F / '{print $11}')  # Possible echo "$bundle" instead?
df -h

wget $bundle
echo "$bundlename"
tar -xzvf "$bundlename"
rm -vf "$bundlename"

不清楚df -h是否为脚本带来任何好处;你可能只是删除该行。