企業Shell面試題及企業運維實戰共30道案例


企業Shell面試題及企業運維實戰共30道案例

 

1.1 批量生成隨機字符文件名案例

使用for循環在/oldboy目錄下批量創建10個html文件,其中每個文件需要包含10個隨機小寫字母加固定字符串oldboy,名稱示例如下:

[root@oldgirl C19]# ls /oldboy

apquvdpqbk_oldboy.html  mpyogpsmwj_oldboy.html  txynzwofgg_oldboy.html

bmqiwhfpgv_oldboy.html  mtrzobsprf_oldboy.html  vjxmlflawa_oldboy.html

jhjdcjnjxc_oldboy.html  qeztkkmewn_oldboy.html

jpvirsnjld_oldboy.html  ruscyxwxai_oldboy.html

 

解答:

方法1:

#!/bin/bash

DIR=/oldboy

. /etc/init.d/functions

[ ! -d $DIR ] || mkdir /oldboy -p

 

cd $DIR &>/dev/null || {

        echo "cd $DIR fail"

        exit 2

}

 

cd $DIR && {

        for i in {1..10}

        do

          touch $(echo $RANDOM|md5sum|tr [0-9] [a-z]|cut -c 1-10)_oldboy.html

          action 'file  create success' /bin/true

          exit 0

        done

}

echo "file  create fail"

 

  

 

方法2 :

  

#!/bin/bash

dir=/oldboy

[ -d $dir ] || mkdir -p $dir

 

cd $dir && \

for i in {1..10}

  do

    shu=$(uuidgen|tr '0-9-' 'a-z'|cut –c 1-10)

    touch ${shu}_oldboy.html

done

 

 

 

 

 

 

1.2 批量改名特殊案例

將以上面試題19.1.1中結果文件名中的oldboy字符串全部改成oldgirl(最好用for循環實現),並且將擴展名html全部改成大寫。

解答:

 

#!/bin/bash

dir=/oldboy

 

cd $dir && \

 

for i in $(ls $dir)

  do

    shu=$(echo $i |cut -c 1-10)

    mv  ${shu}_oldboy.html  ${shu}_oldgirl.HTML

done

 

  

 

 

 

1.3 批量創建特殊要求用戶案例

批量創建10個系統帳號oldboy01-oldboy10並設置密碼(密碼為隨機數,要求字符和數字等混合)

不用for循環的實現思路:http://user.qzone.qq.com/49000448/blog/1422183723

解答:

 

#!/bin/bash

. /etc/init.d/functions

file=/tmp/user_pass.txt

for i in oldboy{01..10}

  do

    useradd $i &>/dev/null

     if [ $? -eq 0 ];then

       action "$i 創建成功"  /bin/true

       mima=$(echo $RANDOM|md5sum|cut -c 1-10)

       echo $mima|passwd --stdin $i &>/dev/null

       if [ $? -eq 0 ];then

         action "$i 設置密碼成功"  /bin/true

         echo

       else

         action "$i 設置密碼失敗" /bin/false

         echo

         exit 2

       fi

         echo ${i}:$mima >>/tmp/user_pass.txt

     else

       action "$i 已經存在"   /bin/false

     fi

done

 

  

 

 

 

 

1.4 掃描網絡內存活主機案例

寫一個Shell腳本,判斷10.0.0.0/24網絡里,當前在線的IP有哪些?

解答:

 

nmap -sT 10.0.0.0/24  掃描網絡

#!/bin/sh
#
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
function IP_count(){
  for n in 10.0.0.{0..255}
   do
    IP_check=`nmap -sP $n|grep "Host is up"|wc -l`
    if [ ${IP_check} -eq 1 ];then
      action "$n" /bin/true
      let i+=1
    fi
  done
}
function main(){
  IP_count
  echo "The total number of online IP Addresses is " $i
}
main

 

      

 

 

#!/bin/bash

source /etc/init.d/functions

 

for i in 10.0.0.{1..254}

  do

    {

    ping -c 1 -W 1 $i  &>/dev/null

    if [ $? -eq 0 ]

      then

        action "$i" /bin/true

    fi

    sleep 10

    } &             #並發執行 ping命令,同時開啟254個進程

done

 

  

 

                

1.5 解決DOS攻擊生產案例

寫一個Shell腳本解決DOS攻擊生產案例。

請根據web日志或者或者網絡連接數,監控當某個IP並發連接數或者短時內PV達到100(讀者根據實際情況設定),即調用防火牆命令封掉對應的IP。防火牆命令為:iptables-I INPUT -s IP地址 -j DROP。

解答:

 

#!/bin/bash
web_log=/application/access.log

awk '{i[$1]++}END{for (IP in i) print IP,i[IP]}' $web_log|awk '$2>1000 {print $1,$2}'|column -t|sort -rnk2 >/tmp/web_log.txt

IP=$(awk '{i[$1]++}END{for (IP in i) print IP,i[IP]}' $web_log |awk '$2>1000{print $1}')

 echo "超過並發連接數IP"

 cat /tmp/web_log.txt

for i in $IP

  do

 iptables -I INPUT -s $i -j DROP

done

 

  

 

 

1.6 MySQL數據庫分庫備份

請實現對MySQL數據庫進行分庫備份,用腳本實現。

解答:

 

 

 

 

 

1.7 MySQL數據庫分庫分表備份

如何實現對MySQL數據庫進行分庫加分表備份,請用腳本實現。

解答:

 

 

 

1.8 篩選符合長度的單詞案例

利用bash for循環打印下面這句話中字母數不大於6的單詞(某企業面試真題)。

I am oldboy teacher welcome to oldboy trainingclass

解答:

 

#!/bin/bash

for i in I am oldboy teacher welcome to oldboy training class

 do

   if [ "${#i}" -le 6 ];then

  echo $i

   fi

done

 

  

 

 

1.9 MySQL主從復制異常監控案例

開發一個守護進程腳本每30秒監控MySQL主從復制是否異常(包括不同步以及延遲),如果異常,則發送短信並發送郵件給管理員存檔。提示:如果沒主從復制的環境,可以把下面文本放到文件里讀取來模擬主從復制狀態:

解答:

 

 

 

 

1.10 比較整數大小經典案例

綜合實戰案例:開發shell腳本分別實現以腳本傳參以及read讀入的方式比較2個整數大小。用條件表達式(禁止if)進行判斷並以屏幕輸出的方式提醒用戶比較結果。

注意:一共是開發2個腳本。當用腳本傳參以及read讀入的方式需要對變量是否為數字、並且傳參個數不對給予提示。

解答:

 

  1.  腳本傳參

#!/bin/bash
[ $# -ne 2 ] && echo "USAGE: sh $0 int1 int2" && exit 2

n1=$1

n2=$2

expr $n1 + 1 &>/dev/null

[ $? -eq 2 ] && echo "the first is not int"  && exit 3

expr $n2 + 1 &>/dev/null

[ $? -eq 2 ] && echo "the second is not int"  && exit 3

[ "$n1" -gt "$n2" ] && echo "$n1 > $n2" && exit

[ "$n1" -eq "$n2" ] && echo "$n1 = $n2" && exit

echo "$n1 < $n2"

 

  

  2. red讀入

 

#!/bin/bash
read -p "the first num:"  n1
read -p "the second num:" n2
[ -z "$n1" -o -z "$n2" ] && echo "請輸入數據"  && exit 2
expr $n1 + 1 &>/dev/null
[ $? -eq 2 ] && echo "the first is not int"  && exit 3
expr $n2 + 1 &>/dev/null
[ $? -eq 2 ] && echo "the second is not int"  && exit 3
[ "$n1" -gt "$n2" ] && echo "$n1 > $n2" && exit
[ "$n1" -eq "$n2" ] && echo "$n1 = $n2" && exit
echo "$n1 < $n2"

 

 

 

  

 

 

1.11 菜單自動化軟件部署經典案例

綜合實例:打印選擇菜單,按照選擇一鍵安裝不同的Web服務。

示例菜單:

[root@oldboy scripts]# shmenu.sh

1.[install lamp]

2.[install lnmp]

3.[exit]

pls input the num you want:

要求:

1、當用戶輸入1時,輸出“startinstalling lamp.提示”然后執行/server/scripts/lamp.sh,腳本內容輸出"lampis installed"后退出腳本,工作中就是正式lamp一鍵安裝腳本;

2、當用戶輸入2時,輸出“startinstalling lnmp.提示” 然后執行/server/scripts/lnmp.sh輸出"lnmpis installed"后退出腳本,工作中就是正式lnmp一鍵安裝腳本;

3、當輸入3時,退出當前菜單及腳本;

4、當輸入任何其它字符,給出提示“Input error”后退出腳本;

5、要對執行的腳本進行相關的條件判斷,例如:腳本文件是否存在,是否可執行等判斷,盡量用上前面講解的知識點。

解答:

 

 

#!/bin/bash

cat <<EOF

==================

echo

1.[install lamp]

2.[install lnmp]

3.[exit]

==================

EOF

read -p "pls input the num you want:" install

 

case $install in

  1)

   echo "start install lamp"

   if [ -x /server/scripts/lamp.sh ];then

      /server/scripts/lamp.sh

    else

      echo "/server/scripts/lamp.sh 沒有執行權限"

   fi

   ;;

  2)

   echo "start install lnmp"

   if [ -x /server/scripts/lnmp.sh ];then

      /server/scripts/lnmp.sh

    else

      echo "/server/scripts/lamp.sh 沒有執行權限"

   fi

   ;;

  3)

  exit

   ;;

  *)

  echo "請選擇[1-3]"

esac

 

  

 

 

 

 

 

 

1.12 Web及MySQL服務異常監測案例

用if條件語句實現對Nginx Web服務以及MySQL數據庫服務是否正常進行檢測,如果服務未啟動,則啟動相應服務。

解答:

    1. nginx異常檢測

#!/bin/bash
. /etc/init.d/functions

nginx_server=$(netstat -lntup|grep -wc nginx)

 

 

if [ $nginx_server -eq 0 ];then

    echo "nginx 沒有運行,啟動nginx"

    /application/nginx/sbin/nginx

  if [ $? -eq 0 ];then

    action  'nginx start' /bin/true

  else

    action  'nginx start' /bin/falese

  fi

    else

    echo "nginx 已經運行" 

fi

##狀態碼

http=$(curl -I 10.0.0.5 -s -w %{http_code} -o /dev/null)

if [ "$http" -eq 200 ];then

    echo -e "狀態碼:$http\nnginx 訪問正常"

  else

    echo -e "狀態碼:$http\nnginx 訪問失敗"

fi

 

  

 2. mysql異常檢測

#!/bin/bash

. /etc/init.d/functions

mysqld=$(netstat -lntup|grep -c mysqld)

 

function db_Start (){

  /etc/init.d/mysqld start &>/dev/null

  if [ $mysqld -eq 0 ];then

    action "Starting MySQL. SUCCESS!" /bin/true

  else

    action Starting MySQL. fail!

  fi

}

 

  if [ $mysqld -eq 0 ];then

    echo "MySQL not running Starting MySQL"

    db_Start

  else

    echo "MySQL  running!"

  fi

 

  

 

1.13 監控Memcached緩存服務是否正常

監控Memcached緩存服務是否正常,模擬用戶(web客戶端)檢測。

使用nc命令加上set/get來模擬檢測。
解答:

 

#!/bin/bash

. /etc/init.d/functions

cache_server=$(netstat -lntup|grep -wc memcached)

 

#判斷是否運行

if [ "$cache_server" -eq 0 ];then

    echo "mecached 沒有運行,啟動memcached"

   systemctl start memcached.service

    if [ $? -eq 0 ];then

     action 'memcached start' /bin/true

    fi

  else

   echo "memcached 運行正常"

fi

 

#測試讀寫

set_zhi=$(uuidgen|cut -c -8)

set=${#set_zhi}

 

printf "set key008 0 0 $set\r\n${set_zhi}\r\n"|nc 127.0.0.1 11211 &>/dev/null

if [ $? -eq 0 ];then

   get=$(printf "get key008\r\n"|nc 127.0.0.1 11211|awk 'NR==2'|tr -d '\r')

  else

    echo "set 賦值失敗"

    exit 2

fi

 

 

if [ "$set_zhi" == "$get" ];then

    echo "memcached 讀寫正常"

  else

    echo "memcached 讀寫失敗"

fi

 

  

 

 

 

 

1.14 開發腳本入侵檢測與報警案例

面試及實戰考試題:監控web站點目錄(/var/html/www)下所有文件是否被惡意篡改(文件內容被改了),如果有就打印改動的文件名(發郵件),定時任務每3分鍾執行一次。

解答:

 

#!/bin/bash

html_dir=/var/www/html

file_data=/tmp/html_file.txt

md5_data=/tmp/html_md5zhi.txt

. /etc/init.d/functions

status=$1

case $status in

  1)

  find $html_dir -type f >$file_data

  [ $? -eq 0 ] && action '文件庫生成:$file_data' /bin/true

  find $html_dir -type f|xargs md5sum >$md5_data

  [ $? -eq 0 ] && action 'md5值生成:$md5_data' /bin/true

  ;;

  2)

while true

do

  md5_zhi=$(md5sum -c $md5_data 2>/dev/null |grep  "失敗")

  if [ -n "$md5_zhi" ];then

   echo "文件內容被修改或刪除的文件:$md5_zhi  $(date +%F_%H:%M)"

 #echo "文件內容被修改或刪除的文件:$md5_zhi  $(date +%F_%H:%M)" |mail -s "${html_dir}惡意篡改" 243541755@qq.com

    sleep 30

  fi

 

  hthl_file=$(find $html_dir -type f >/tmp/html_file-yanzheng.txt)

  file_yanzheng=$(diff /tmp/html_file*)

  if [ -n "$file_yanzheng" ];then

   echo "文件被改動: $file_yanzheng   $(date +%F_%H:%M)"

    sleep 30

  fi

done

  ;;

  *)

  echo -e "$0:{1|2}\n1:刷新文件庫和md5值\n2:實時監控站點目錄$html_dir"

esac

 

  

 

 

 

1.15 開發Rsync服務啟動腳本案例

寫網絡服務獨立進程模式下Rsync的系統啟動腳本,例如:/etc/init.d/rsyncd {start|stop|restart}。
要求:
1.要使用系統函數庫技巧。
2.要用函數,不能一坨SHI的方式。
3.可被chkconfig管理。

解答:

 

 

#!/bin/bash 
source /etc/init.d/functions

rsync=$(netstat -lntup|grep -wc rsync)

[ ! -f /etc/rsyncd.conf ] && echo "rsync /etc/rsyncd.conf not" && exit 2

status=$1

case $status in

   start)

     if [ $rsync -ne 0 ];then

       echo "rsync 正在運行"

     else

       rsync --daemon

       action 'rsync start' /bin/true

     fi

     ;;

    stop)

       pkill rsync

     if [ $? -eq 0 ];then

       action 'rsync stop' /bin/true

     else

       echo "停止失敗,rsync沒有運行"

     fi

     ;;

  restart)

     if [ $rsync -ne 0 ];then

        pkill rsync

        if [ $? -eq 0 ];then

          sleep 1

          rsync --daemon

          action 'rsync restart' /bin/true

        else

          action 'rsync stop' /bin/false

        fi

        else

        echo "重啟失敗,rsync沒有運行"

     fi

     ;;

        *)

   echo "$0:{start|stop|restart}"

esac

 

  

 

 

 

 

 

 

1.16 開發MySQL多實例啟動腳本

開發MySQL多實例啟動腳本:
已知MySQL多實例啟動命令為:mysqld_safe --defaults-file=/data/3306/my.cnf &
停止命令為:mysqladmin -u root -poldboy123 –S /data/3306/mysql.sock shutdown
請完成mysql多實例啟動啟動腳本的編寫
要求:用函數,case語句、if語句等實現。

解答:

 

 

 

 

1.17 天津項目學生實踐抓鬮案例

好消息,培訓學生外出企業項目實踐機會(第6次)來了(本月中旬),但是,名額有限,隊員限3人(班長帶隊)。

因此需要挑選學生,因此需要一個抓鬮的程序:

要求:

1、執行腳本后,想去的同學輸入英文名字全拼,產生隨機數01-99之間的數字,數字越大就去參加項目實踐,前面已經抓到的數字,下次不能在出現相同數字。

2、第一個輸入名字后,屏幕輸出信息,並將名字和數字記錄到文件里,程序不能退出繼續等待別的學生輸入
 解答:

echo  $(($RANDOM%99+1))  生成1-99隨機數
 #!/bin/bash
log_file=/tmp/zhajiu.txt

[ -f $log_file ] && rm -f "$log_file" || touch "$log_file"

[ -f $log_file ] && > $log_file || touch $log_file

function wait()

{  

    echo -en '\033[33m隨機抽取中,請稍等.\033[0m';

    for ((i=0;i<3;i++))

     do

      echo -n ".";sleep 1

    done

}

 

function name()

{

while true

do

  read  -p  "請輸入學生姓名:" name

if [ "$name" == "exit" ];then

    echo -en '\033[33m正在退出程序,拜拜.\033[0m';

    for ((i=0;i<3;i++))

     do

      echo -n ".";sleep 1

      done

     echo

     exit

fi

  name_test=$(egrep -wc $name $log_file)

  if [ $name_test -eq 0 ];then

    name_panduan=1

    break

  else

    echo "已經參加,請重新輸入"

    continue

  fi

done

}

function shuzi()

{

while true

do

  name

  if [ $name_panduan -eq 1 ];then

    shu=$(echo $(($RANDOM%99+1)))

    shuzi_test=$(egrep -wc $shu $log_file)

    if [ $shuzi_test -eq 0 ] ;then

     echo "$name:$shu" >> $log_file

     wait

     echo  "                         "

      echo

     echo -e "\033[34m抓鬮結果\033[0m"

     echo  "$name:$shu"

     echo

     echo -e "\033[34m獲獎名單\033[0m"

     echo -e "\033[34m------------------------\033[0m"

      awk -F ":" "{print $2}" /tmp/zhajiu.txt|column -t|sort -rnk 2 -t:|head -3

     echo -e "\033[34m------------------------\033[0m"

     echo

     echo

    fi

  fi

done

}

echo

echo

echo -e "\033[33m

     --------------- 好消息,好消息------------------

        學生外出企業項目實踐機會(第6次)來了(本月中旬)

         名額有限,隊員限3人(班長帶隊)。

     --------------- 同學們來抓鬮吧------------------\033[0m"

echo

echo

echo  -e "                                    \033[31m退出程序請輸入:exit\033[0m"

echo

 

 

shuzi

 


  

 

 

 

 

1.18 破解RANDOM隨機數案例

已知下面的字符串是通過RANDOM隨機數變量md5sum后,再截取一部分連續字符串的結果,請破解這些字符串對應的使用md5sum處理前的RANDOM對應的數字?

21029299

00205d1c

a3da1677

1f6d12dd

890684b

解答:

 

  生成字典包

for i in {0..32767}

 do

  echo "${i}:$(echo $i|md5sum)" >>/tmp/zidian.txt

done

 

  

 

 

  跑字典

[root@backup oldboy]# egrep "21029299|00205d1c|a3da1677|1f6d12dd|890684b"  /tmp/zidian.txt

1346:00205d1cbbeb97738ad5bbdde2a6793d  -

7041:1f6d12dd61b5c7523f038a7b966413d9  -

10082:890684ba3685395c782547daf296935f  -

25345:a3da1677501d9e4700ed867c5f33538a  -

25667:2102929901ee1aa769d0f479d7d78b05  -

 

  

 

 

 

1.19 批量檢查多個網站地址是否正常

企業面試題:批量檢查多個網站地址是否正常

要求:

1、使用shell數組方法實現,檢測策略盡量模擬用戶訪問。

2、每10秒鍾做一次所有的檢測,無法訪問的輸出報警。

3、待檢測的地址如下

http://blog.oldboyedu.com

http://blog.etiantian.org

http://oldboy.blog.51cto.com

http://10.0.0.7

解答:

 

curl -I http://oldboy.blog.51cto.com -s -w %{http_code} -o /dev/null  -L 

 -L 跟隨跳轉

 

#!/bin/bash

. /etc/init.d/functions

 

#定義url數組

checa_count=0

url_list=(

  http://blog.oldboyedu.com

  http://blog.etiantian.org

  http://oldboy.blog.51cto.com

  http://10.0.0.7

)

 

function wait()

{  

    echo -n '3秒后,執行檢查URL操作.';

    for ((i=0;i<3;i++))

     do

      echo -n ".";sleep 1

    done

}

function checa_url()

{

 wait

 echo

 for ((i=0;i<"$(echo ${#url_list[*]})";i++))

 do

  status_code=$(curl -I ${url_list[$i]} -s -w %{http_code} -o /dev/null  -L)

  if [ $status_code -eq 200 ];then

   action "${url_list[$i]}"  /bin/true

   else

   action "${url_list[$i]}"  /bin/false

  fi

done

   ((checa_count++))

}

function main()

{

  while true

  do

    checa_url

    echo "-----Checa Count:${checa_count}-----"

    sleep 10

  done

}

main

 

  

 

 

1.20 單詞及字母去重排序案例

shell處理以下內容

1、按單詞出現頻率降序排序!

2、按字母出現頻率降序排序!

the squid project provides a number ofresources to assist users design,implement and support squid installations.Please browse the documentation and support sections for more infomation,byoldboy training.

課堂實戰考察某企業shell面試考試題

http://oldboy.blog.51cto.com/2561410/1686891

解答:

 

[root@backup scripts]# cat /tmp/zimu.txt

the squid project provides a number ofresources to assist users design,implement and support squid installations.Please browse the documentation and support sections for more infomation,byoldboy training.

 

 

 

 

1.21 開發腳本管理服務端LVS案例

請在LVS負載均衡主節點上,開發管理LVS服務的腳本ip_vs。

實現:利用ipvsadm可以啟動並配置好LVS服務,腳本形式:/etc/init.d/lvs{start|stop|restart}

解答:

 

 

 

 

1.22 LVS節點健康檢查及管理腳本案例

請在LVS負載均衡主節點上,模擬keepalived健康檢查功能管理LVS節點,

當節點掛掉從服務器池中剔除,好了再加到服務器池中來。

解答:

 

 

 

 

1.23 LVS客戶端配置腳本案例

請在LVS客戶端節點上,開發LVS客戶端設置VIP以及抑制ARP的管理腳本

實現:/etc/init.d/lvsclient{start|stop|restart}

解答:

 

 

 

 

 

1.24 模擬keepalved軟件高可用案例

請在LVS服務端備用節點上,模擬keepalved vrrp功能,監聽主節點,如果主節點不可訪問則備節點啟動並配置LVS實現接管主節點的資源提供服務(提醒:注意ARP緩存),提示此題要借助19.1.21的功能。

解答:

 

 

 

1.25 編寫正(或長)方形圖形案例

請用shell或Python編寫一個正(或長)方形,接收用戶輸入的數字。

解答:

#!/bin/bash

function integer()

{

 expr 1 + $1 &>/dev/null

 if [ $? -eq 2 ];then

   echo "usage $0:請輸入整數"

   exit

 fi

}

  read -p "please enter a number:" num

   integer $num

  for ((i=1;i<=$num;i++))

  do

    for ((m=1;m<=$num;m++))

    do

      echo -n ""

    done

    echo

   done

 

  

 

 

1.26 編寫等腰三角形圖形字符案例

請用shell或Python編寫一個等腰三角形,接收用戶輸入的數字。

解答:

#!/bin/bash

function integer()

{

 expr 1 + $1 &>/dev/null

 if [ $? -eq 2 ];then

   echo "usage $0:請輸入整數"

   exit

 fi

}

  read -p "please enter a number:" num

   integer $num

  for ((i=1;i<=num;i++))

  do

    for ((m=$num-$i;m>0;m--))

    do

      echo -n " "

    done

     for ((h=1;h<=$((2*$i-1));h++))

     do

        echo -n '*'

     done

    echo

   done

 

  

 

 

 

 

1.27 編寫直角梯形圖形字符案例

請用shell或Python編寫一個畫直角梯形程序,接收用戶輸入的參數n(n>2),m。

解答

 

#!/bin/bash
if [ $# -ne 2 ];then

  echo "USAGE:$0 num1(>2) num2"

  exit

fi

 

for n in `seq $1 $2`

do

  for ((m=1;m<=$n;m++))

  do

    echo -n "*"

  done

  echo

done

 

  

 

 

 

 

 

 

 

 

1.28 51CTO博文爬蟲案例

獲取51CTO博客列表倒序排序考試題

 

老男孩教育培訓機構需求:需求入下:

請把http://oldboy.blog.51cto.com地址中的所有博文,按照時間倒序列表如下:

2013-09-13運維就是一場沒有硝煙的戰爭

http://oldboy.blog.51cto.com/2561410/1296694

2016-04-17運維人員寫項目方案及推進項目的基本流程思路

http://oldboy.blog.51cto.com/2561410/1764820

附加:高級要求:

生成html頁面,並設置超鏈接。

結果如下:

http://oldboy.blog.51cto.com/2561410/1862041

解答:

grep 取

#!/bin/bash

url="http://blog.51cto.com/oldboy/p"

html=/tmp/blog.html

[ -f $html ] && rm -f $html

for i in {1..29}

  do

   curl -s ${url}$i |grep -A 1 "\"tit\"" |sed -r 's#<span.*span>#<br>#' >>$html

done

 

  

 

awk 取

#!/bin/bash

LANG="zh_CN.UTF-8"

url="http://blog.51cto.com/oldboy/p"

html=/tmp/blog.html

[ -f /tmp/time.txt ] &&  rm -f /tmp/time.txt

[ -f /tmp/url.txt ] &&  rm -f /tmp/url.txt

[ -f /tmp/name.txt ] &&  rm -f /tmp/name.txt

[ -f /tmp/blog.html ] &&  rm -f /tmp/blog.txt

for i in 1

  do

   curl -s ${url}$i|awk  -F ":|<" '/<a href="javascript:;" class="time fl/ {print $3}' >>/tmp/time.txt

   curl -s ${url}$i|awk -F "\"" '/<a class="tit" href="/{print $4}' >>/tmp/url.txt

   curl -s ${url}$i|awk '/ <\/a>/{print $1}'|grep -v "</a>" >>/tmp/name.txt

   paste -d ' ' /tmp/time.txt /tmp/url.txt /tmp/name.txt >>/tmp/blog.html

done

 

     paste –d

paste命令用於將文本文件或標准輸出中的內容粘貼到新的文件,它可以將來自於不同文件的數據粘貼到一起,形成新的文件

 

 

 

 

 

 

 

1.29 Nginx負載節點狀態監測案例

開發通過Web界面展示監控Nginx代理節點狀態,效果圖如下,當節點宕機時,以紅色展示,當節點正常時以綠色展示。

 

解答:

#!/bin/bash

html_file=/application/nginx/html/index.html

port=80

web_IP=(

172.16.1.9

172.16.1.18

)

 

function web_check()

{

  for ((i=0;i<"$(echo ${#web_IP[*]})";i++))

  do

   web_Status[$i]=$(nmap ${web_IP[$i]} -p $port|grep -c open)

  done

}

function html_tihuan()

{

  if [ "${web_Status[0]}" -eq 0 ];then

    #echo ${web_IP[0]} Down!

     sed '27s#green#red#;27s#OK!#Down!#' -i $html_file

  else

    #echo ${web_IP[0]} OK!

     sed '27s#red#green#;27s#Down!#OK!#' -i $html_file

  fi

 

  if [ "${web_Status[1]}" -eq 0 ];then

    #echo ${web_IP[1]} Down!

     sed '33s#green#red#;33s#OK!#Down!#' -i $html_file

  else

    #echo ${web_IP[1]} OK!

     sed '33s#red#green#;33s#Down!#OK!#' -i $html_file

  fi

}

function main()

{

  while true

   do

   web_check

   html_tihuan

  done

}

   main

 

  

 

 

html文件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<meta http-equiv="refresh" content="1">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<style>

  h4{text-align: center;}

</style>

</head>

<body>

<h4> - </h4>

<h4> 老男孩教育43期 </h4>

<h4> web節點健康檢查 </h4>

<table width="400" height="200" border="1" align="center">

  <tr align="center" valign="middle">

    <td bgcolor="gray">主機名</td>

    <td bgcolor="gray">IP地址</td>

    <td bgcolor="gray">端口</td>

    <td bgcolor="gray">狀態</td>

      

  </tr>

  <tr align="center" valign="middle">

    <td >web01</td>

    <td >172.16.1.9</td>

    <td >80</td>

    <td bgcolor="green">OK!</td>

  </tr>

  <tr align="center" valign="middle">

    <td >web04</td>

    <td >172.16.1.18</td>

    <td >80</td>

    <td bgcolor="green">OK!</td>

  </tr>

 

</table>

<body background="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1522434774423&di=bf83edcd87b36ce3b6572231a1749e9a&imgtype=0&src=http%3A%2F%2Fwww.blended-html.com%2Fbackground-images%2Fbi-background-frame.png"></body>

</html>

  

1.30 企業代碼上線發布系統案例

寫一套簡單的企業代碼上線發布系統案例,利用SVN對代碼及配置文件進行管理,在辦公室服務器上從svn取出指定版本的代碼和配置,發布到IDC機房分發機服務器上,在分發服務器或者負載均衡器上或者應用服務器本地實現代碼平滑發布、上線、回滾腳本(具體設計請參考課堂講解的企業代碼發布方案)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM