不同发行版的脚本

时间:2014-02-27 13:41:30

标签: linux perl bash

我第一次来这里,我是个新人,我很抱歉我的英语很差我的错误:)

我需要使用perl(或bash)编写一个安装脚本,但我一直在寻找一种方法让它在不同的Linux发行版中运行。特别是,如果尚未安装httpd和mysql,则应安装此脚本。我可以使用很多if-else,但我想知道是否存在任何可以为我做的自动化系统,即使我找不到任何东西。例如:

伪代码

//find httpd if is installed, if not it will try to install
try(service httpd status) ..
else try (service apache2 status)
if (not_installed) { 
   try yum install httpd
   else try apt-get install apache2
   else try pacman ....
}

我在想类似于autotools的东西..它存在吗?

谢谢,再见所有人:)

4 个答案:

答案 0 :(得分:0)

您可以使用chkconfig --list查找已安装的服务。

可以这样做:

#!/bin/bash
chkmysql=`chkconfig --list | grep mysql | wc -l`
chkhttp=`chkconfig --list | grep http | wc -l`
if [[ chkmysql > 0 ]]
then
        echo "mysql is installed"
else
        echo "mysql is not installed"
        #write code to install mysql
fi
if [[ chkhttp > 0 ]]
then
        echo "http is installed"
else
        echo "http is not installed"
        #write code to install httpd service

fi

答案 1 :(得分:0)

`$ ^ O``变量将报告您所使用的操作系统,请参阅文档perlports platform部分了解其工作原理

perl还有一个Config模块,它包含perl编译时所有的信息 - 使用类似于autotools的方法

Config手册页中的示例程序显示了可用的信息

        use Config;
       if ($Config{usethreads}) {
           print "has thread support\n"
       }

       use Config qw(myconfig config_sh config_vars config_re);

       print myconfig();

       print config_sh();


       config_vars(qw(osname archname));

顺便说一句,puppet非常擅长在不同平台上安装软件包以及不同的配置路径。虽然它使用红宝石,但可能不适合您的工具链的其余部分

答案 2 :(得分:0)

由于您没有运行一次性安装,我假设您处于某种系统管理员角色。你看过linux kickstarts吗? kickstart允许您以您想要的方式获得系统,然后将其映像以便稍后进行远程安装。这样,如果系统出现故障,可以通过最少的外部依赖性快速恢复。设置系统的自我修复方法的问题是它可能会导致更多问题,然后当它无法正常工作时解决。 $ 0.02

答案 3 :(得分:0)

您可以使用bash builtin'type'来确定是否安装了给定的程序;或者具有相同名称的函数/别名。

if ! type PROGRAM >& /dev/null; then...

您可以解析/ etc / issue的内容以获取操作系统的名称。

if grep 'Arch Linux' /etc/issue >& /dev/null; then...