2013-10-01 93 views
-2

我有一个简短的bash脚本,它在/ etc/os-release中查找发行版ID,并根据该结果打印字符串。如果可能,我想将其转换为perl。我会很感激任何帮助。该脚本的Perl命令是什么?

下面是我使用的脚本:

#!/bin/bash 

grep "ID=fedora" /etc/os-release > /dev/null 2>&1 
if [ $? = 0 ]; then 
echo "You are running Fedora" 
else 
echo "You are running Ubuntu" 
fi 

感谢,并有一个伟大的日子:) 帕特里克。

+7

为什么你会希望它在Perl如果你明显不知道Perl? – Wrikken

+0

'sed -ne's/^ ID = /您正在运行/ p'/ etc/os-release' - > *您正在运行debian * ;-) –

+0

需要的背后故事是这样的:我有一个Amahi家庭服务器。其中一个脚本更改您的IP地址,并重新启动网络服务。如果它是一个bash脚本,那么基本上我为上面的代码放置了什么(可以通过“服务网络/网络重新启动”命令更改回显语句)。但脚本在Perl中。所以我想我会给他们perl的形式,我正在寻找。 – PatrickDickey

回答

0

的一种方式,althought不是最有效的,因为它读取整个文件在内存中:

perl -MList::Util=first -e ' 
    printf qq|You are running %s\n|, 
     (first { m/ID=fedora/ } <>) ? 
      q|Fedora| 
       : 
      q|Ubuntu| 
' /etc/os-release 
1

不知道为什么你会认为转换成Perl。 Shell脚本是满足这种需求的最佳方式。

以下perl脚本转换

#!/usr/bin/perl 
use warnings; 
use strict; 

my $fedora = 0; 
open my $fread "<", "/etc/os-release" or die $!; 
while (<$fread>) { 
    if (/ID=fedora/) { 
     $fedora = 1; 
     last; 
    } 
} 
if ($fedora) { 
    print "You are running Fedora\n"; 
} else { 
    print "You are running Ubuntu\n"; 
} 
close $fread; 
+0

最终它将成为更大的perl脚本的一部分。我需要的是grep和if then/else部分。而不是它回应线路,它将有系统(“服务网络重新启动”); Fedora和系统(“服务联网重启”);为Ubuntu。 – PatrickDickey

+0

该脚本是只能在Fedora或Ubuntu上运行的服务器的一部分,因此这些是唯一需要使用的两个值。 – PatrickDickey

+0

@PatrickDickey明白了。上面的代码解决了你的问题吗? – jkshah

1
#!/usr/bin/perl 
use strict; 
use warnings; 

# Open /etc/os-release and read lines into array @list 
open(F,'/etc/os-release'); 
my @list=<F>; 
close F; 

# Search for all lines containing "ID=fedora" 
my @matchinglines= grep /ID=fedora/,@list; 

# If the number of matching lines is >0 it's Fedora 
if(scalar @matchinglines>0){ 
    print "You are running Fedora\n"; 
} else { 
    print "You are running Ubuntu\n"; 
} 
0
perl -ne 'print "You are running $1\n" if /^ID=(.+)/' /etc/os-release 
+0

如果文件中没有出现'Fedora'和'Ubuntu'会怎么样? – Birei

+1

如果/^ID=(.+)/没有匹配,则不会打印任何内容。 –

1
perl -lne' 
    last if $f = /ID=fedora/; 
    END{ print "You are running ", $f ? "Fedora":"Ubuntu" } 
' /etc/os-release 
0

的一种方式作为一个老经验的神风:

#!/bin/bash 

ID="something unknown" 
test -r /etc/os-release && . /etc/os-release 
echo You are running "$ID" 
相关问题