一道Shell筆試題解答


看到一道Shell面試題,練練手,如果有更好的方法可以分享下。


題目描述:

序列號是服務器身份的唯一標識,我們定義序列號由大寫字母組成,長度6-20位不 等。現有一個文本文件sn.txt,每行的格式如下:

【服務器序列號】【空格】【數據網IP】

ABCDEFG 192.168.0.123  

數據網與管理網存在如下的對應關係,管理網=數據網第二個C段+1  

對於上面的服務器,管理網爲192.169.0.123  

爲了完成核查資產的任務,我們需要連接到每臺服務器的管理網,執行一條查看序列號的命令$CMD$IP,命令正確執行返回0,執行錯誤返回-1.在正確執行的前提下,輸出的值爲序列號。對比返回的序列號與記錄的序列號是否相符。如果相符,則認爲資產信息準確,將信息輸出到SUC.txt;如不相符,則信息錯誤,輸出到FAL.txt;如果執行命令出錯,則返回值非零,輸出到ERR.txt。


根據上面的要求寫出測試文檔sn.txt如下:

$cat sn.txt
ABCDEFG 192.168.0.123
BCDEFGHI 192.168.0.2
CCCDDDEEE 192.168.0.2
EEERRROOO 192.168.0.111


寫出測試用程序cmd.cpp,使用g++編譯生成可執行文件cmd

root@localhost:~/temp/test_server$cat cmd.cpp
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
        if(argc != 2)
                return -1;
        string ip;
        ip=argv[1];
        //simulate go wrong
        if (ip == "192.169.0.111" )
                return -1;
        if (ip == "192.169.0.2")
                cout << "CCCDDDEEE";
        else
                cout << "FFFFFFFFF";
        return 0;
}


最後就是腳本了:

#!/bin/bash
DIR=`pwd`
CMD="$DIR/cmd"
FILE="$DIR/sn.txt"
while read line
do
sn=${line%%" "*}
ip=${line##*" "}
newip=`echo $ip | awk -F "." 'BEGIN{OFS="."}{print $1,$2+1,$3,$4}'`
echo $sn
sn2=`$CMD $newip`
if [ "$?" -eq 0 ]
then
        if [ "$sn" = "$sn2" ]
        then
                echo $sn >> SUC.txt
        else
                echo "Wrong" >> FAL.txt
        fi
else
        echo "Error" >> ERR.txt
fi
done < sn.txt
exit 0


調試幾次後順利通過測試,結果如下:

$cat SUC.txt; echo "========="; cat FAL.txt; echo "=========" ; cat ERR.txt
#輸出:
CCCDDDEEE
=========
Wrong
Wrong
=========
Error

完畢。


.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章