<b>實作内容:</b><b></b>
<b></b>
通過腳本自動建立虛拟主機要求如下:
1、 建立虛拟主機配置資訊在/etc/httpd/conf.d/virt_host.conf中
2、 建立虛拟主機目錄在/var/www下,名稱為虛拟主機域名即可
3、 建立過程要求互動式進行,隻需要輸入IP位址和域名即可。
4、 建立過程如果沒有輸入按回車無效,要求再次輸入在進入下一步。
<b>完善内容:(未操作)</b><b></b>
1、互動式過程中輸入的IP和域名是否有效,無效需要再次輸入
2、同一台主機兩個IP是如何添加虛拟主機的
思路如下:
1、 通過read –p指令進行互動式
2、 定義一個函數input_fun實作互動式輸入空值再次輸入
3、 通過cat指令将虛拟主機配置内容寫入文檔
Apache虛拟主機建立腳本如下:
#!/bin/bash
HTTP_CONF_DIR=/etc/httpd/conf.d //建立變量指向虛拟主機配置目錄
CONF_FILE_NAME=virt_host.conf //定義所有虛拟主機配置檔案名
HTTP_SITE_DIR=/var/www //定義虛拟主機網站主目錄位置
//以上路徑及名稱都可以根據需求任意改動
input_fun() //定義函數input_fun,實作輸入空資訊再次讀取
{
OUTPUT_VAR=$1 //這裡$1其實就是Input Host ip [192.168.0.1]:或Input Virtual Host Name [www.example.com]:
INPUT_VAR="" //定義變量INPUT_VAR起始值為空
while [ -z $INPUT_VAR ];do //判斷變量INPUT_VAR是否為空
read -p "$OUTPUT_VAR" INPUT_VAR //進入互動繼續輸入IP位址,直到輸出内容後退出循環
done
echo $INPUT_VAR
}
IPADDR=$( input_fun "Input Host ip [192.168.0.1]: ") //定義變量IPADDR,互動式輸入的IP位址為值
WEB_HOST_NAME=$(input_fun "Input Virtual Host Name [www.example.com]: ") //定義變量WEB_HOST_NAME,互動式輸入的域名為值
[ ! -d $HTTP_SITE_DIR/$WEB_HOST_NAME ] && mkdir -p $HTTP_SITE_DIR/$WEB_HOST_NAME //判斷虛拟主機目錄是否存在,不存在建立虛拟主機目錄
chown apache. $HTTP_SITE_DIR/$WEB_HOST_NAME && chmod 755 $HTTP_SITE_DIR/$WEB_HOST_NAME //修改虛拟主機目錄的所有權和通路權限
if [ -f $HTTP_CONF_DIR/$CONF_FILE_NAME ];then //判斷虛拟主機配置檔案是否存在
NameVir_key=$(grep NameVirtualHost $HTTP_CONF_DIR/$CONF_FILE_NAME) //如果存在,過濾裡面的NameVirtualHost字段複制給變量NameVir_key
fi
if [ -z "$NameVir_key" ];then //檢視NameVir_key是否為空值
echo "NameVirtualHost $IPADDR:80" >$HTTP_CONF_DIR/$CONF_FILE_NAME //如果為空,建立虛拟主機配置檔案,并寫入NameVirtualHost $IPADDR:80
cat >> $HTTP_CONF_DIR/$CONF_FILE_NAME << ENDF //寫虛拟主機配置檔案資訊追加到配置檔案中
<VirtualHost $IPADDR:80>
ServerAdmin webmaster@$WEB_HOST_NAME
DocumentRoot $HTTP_SITE_DIR/$WEB_HOST_NAME
ServerName $WEB_HOST_NAME
ErrorLog logs/$WEB_HOST_NAME-error_log
CustomLog logs/$WEB_HOST_NAME-access_loh common
</VirtualHost>
ENDF
/etc/init.d/httpd restart //重新開機httpd服務
腳本部分内容大盤點:
read -p "$OUTPUT_VAR" INPUT_VAR 文法為read –p “顯示内容” 變量 回車後輸入變量資訊
cat >>檔案名<<endf 内容 endf 可以安裝輸入格式寫入檔案中
input_fun(){ //函數部分,通過函數名即可調用
***************
}
while 條件; //while循環語句文法,判斷條件部分是否成立,成立就一直做do後面的内容,直到不成立循環結束
do
********
done
第一次運作腳本及結果
<a href="http://blog.51cto.com/attachment/201303/165259858.png" target="_blank"></a>
第二次運作腳本及結果
<a href="http://blog.51cto.com/attachment/201303/165316512.png" target="_blank"></a>
本文轉自淩激冰51CTO部落格,原文連結:http://blog.51cto.com/dreamfire/1152672,如需轉載請自行聯系原作者