繁体   English   中英

bash脚本在centos 7中创建虚拟主机

[英]bash script creating vhosts in centos 7

我有以下在CentOS 7 HTTP中创建虚拟主机的bash文件,我在“ ln -s”命令中遇到此问题。

如果我运行(sudo sh vhost.sh创建anothersite.com my_dir),我会看到“ ln -s”输出(/etc/httpd/sites-enabled//etc/httpd/sites-available/anothersite.com.conf),从脚本中可以看到变量是相同的,但是在ln命令中只有第二个变量显示了它。

ln -s / etc / httpd / sites-available / $ sitesAvailabledomain / etc / httpd / sites-enabled / $ sitesAvailabledomain

#!/bin/bash
### Set Language
TEXTDOMAIN=virtualhost

### Set default parameters
action=$1
domain=$2
rootDir=$3
owner=$(who am i | awk '{print $1}')
email='webmaster@localhost'
sitesEnable='/etc/httpd/sites-enabled/'
sitesAvailable='/etc/httpd/sites-available/'
userDir='/var/www/'
sitesAvailabledomain=$sitesAvailable$domain.conf

### don't modify from here unless you know what you are doing ####

if [ "$(whoami)" != 'root' ]; then
    echo $"You have no permission to run $0 as non-root user. Use sudo"
        exit 1;
fi

if [ "$action" != 'create' ] && [ "$action" != 'delete' ]
    then
        echo $"You need to prompt for action (create or delete) -- Lower-case only"
        exit 1;
fi

while [ "$domain" == "" ]
do
    echo -e $"Please provide domain. e.g.dev,staging"
    read domain
done

if [ "$rootDir" == "" ]; then
    rootDir=${domain//./}
fi

### if root dir starts with '/', don't use /var/www as default starting point
if [[ "$rootDir" =~ ^/ ]]; then
    userDir=''
fi

rootDir=$userDir$rootDir

if [ "$action" == 'create' ]
    then
        ### check if domain already exists
        if [ -e $sitesAvailabledomain ]; then
            echo -e $"This domain already exists.\nPlease Try Another one"
            exit;
        fi

        ### check if directory exists or not
        if ! [ -d $rootDir ]; then
            ### create the directory
            mkdir $rootDir
            ### give permission to root dir
            chmod 755 $rootDir
            ### write test file in the new domain dir
            if ! echo "<?php echo phpinfo(); ?>" > $rootDir/phpinfo.php
            then
                echo $"ERROR: Not able to write in file $rootDir/phpinfo.php. Please check permissions"
                exit;
            else
                echo $"Added content to $rootDir/phpinfo.php"
            fi
        fi

        ### create virtual host rules file
        if ! echo "
        <VirtualHost *:80>
            ServerName $domain
            ServerAlias $domain
            DocumentRoot $rootDir
        </VirtualHost>" > $sitesAvailabledomain
        then
            echo -e $"There is an ERROR creating $domain file"
            exit;
        else
            echo -e $"\nNew Virtual Host Created\n"
        fi


        ### enable website
        ln -s /etc/httpd/sites-available/$sitesAvailabledomain  /etc/httpd/sites-enabled/$sitesAvailabledomain

        ### restart Apache
        /etc/init.d/httpd reload

        ### show the finished message
        echo -e $"Complete! \nYou now have a new Virtual Host \nYour new host is: http://$domain \nAnd its located at $rootDir"
        exit;
    else
        ### check whether domain already exists
        if ! [ -e $sitesAvailabledomain ]; then
            echo -e $"This domain does not exist.\nPlease try another one"
            exit;
        else
            ### Delete domain in /etc/hosts
            newhost=${domain//./\\.}
            sed -i "/$newhost/d" /etc/hosts


            ### restart Apache
            service httpd restart

            ### Delete virtual host rules files
            rm $sitesAvailabledomain
        fi

        ### check if directory exists or not
        if [ -d $rootDir ]; then
            echo -e $"Delete host root directory ? (y/n)"
            read deldir

            if [ "$deldir" == 'y' -o "$deldir" == 'Y' ]; then
                ### Delete the directory
                rm -rf $rootDir
                echo -e $"Directory deleted"
            else
                echo -e $"Host directory conserved"
            fi
        else
            echo -e $"Host directory not found. Ignored"
        fi

        ### show the finished message
        echo -e $"Complete!\nYou just removed Virtual Host $domain"
        exit 0;
fi

看来,在这里您创建了变量$ sitesAvailabledomain

sitesAvailable='/etc/httpd/sites-available/'
sitesAvailabledomain=$sitesAvailable$domain.conf

此时它的值为='/etc/httpd/sites-available/anothersite.com.conf'。 假设您从问题中输入$ 1 $ 2 $ 3。

在这里,当您在ln命令中使用变量时(记住-该变量的值为'/etc/httpd/sites-available/anothersite.com.conf')

    ln -s /etc/httpd/sites-available/$sitesAvailabledomain  /etc/httpd/sites-enabled/$sitesAvailabledomain

加上额外的路径,因此它变为“ /etc/httpd/sites-available//etc/httpd/sites-available/anothersite.com.conf”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM