测试

  1 #!/usr/bin/env bash
  2 # ******************************************************
  3 # Author       : kunfer
  4 # Last modified: 2019-06-13 18:38
  5 # Email        : kklinux@126.com
  6 # Filename     : jiying-A.sh
  7 # Description  : 
  8 # ******************************************************
  9 
 10 red_font="33[31m"
 11 green_font="33[32m"
 12 yellow_font="33[33m"
 13 green_bg="33[42;37m"
 14 red_bg="33[41;37m"
 15 end_font="33[0m"
 16 info="${green_font}[信息]${end_font}"
 17 tip="${yellow_font}[提示]${end_font}"
 18 error="${red_font}[错误]${end_font}"
 19 
 20 #清屏函数
 21 function qp() {
 22 tput clear
 23 }
 24 #菜单函数
 25 function menu() {
 26 qp
 27 echo -e "  ${red_bg}一键评测脚本${end_font}
 28 
 29 ${green_font}0.${end_font} ${red_font}	综合${end_font}
 30 ${green_font}1.${end_font} ${red_font}	第1题${end_font}
 31 ${green_font}2.${end_font} ${red_font}	第2题${end_font}
 32 ${green_font}3.${end_font} ${red_font}	第3题${end_font}
 33 ${green_font}4.${end_font} ${red_font}	第4题${end_font}
 34 ${green_font}5.${end_font} ${red_font}	第5题${end_font}
 35 ${green_font}6.${end_font} ${red_font}	第6题${end_font}
 36 ${green_font}7.${end_font} ${red_font}	第7题${end_font}
 37 ${green_font}8.${end_font} ${red_font}	第8题${end_font}
 38 ${green_font}9.${end_font} ${red_font}	第9题${end_font}
 39 ${green_font}10.${end_font} ${red_font}	第10题${end_font}
 40 ${red_font}——————————————${end_font}
 41 ${info}${yellow_font}q为退出脚本${end_font}
 42 ${info}${yellow_font}e为重设学号${end_font}
 43 "
 44 echo && read -e -p "请输入数字 [0-10]:" num
 45 
 46 until [[ $num == 0 || $num == 1 || $num == 2  || $num == 3 || $num == 4 || $num == 5 || $num == 6 || $num == 7 || $num == 8 || $num == 9 || $num == 10 || $num == q || $num == e ]]
 47 do
 48     echo -ne "$tip" && read -e -p "请输入数字 [0-10]:" num
 49 done
 50 case "$num" in
 51     1)
 52     qp
 53     t1
 54     quits
 55     ;;
 56     2)
 57     qp
 58     t2
 59     quits
 60     ;;
 61     3)
 62     qp
 63     t3
 64     quits
 65     ;;
 66     4)
 67     qp
 68     t4
 69     quits
 70     ;;
 71     5)
 72     qp
 73     t5
 74     quits
 75     ;;
 76     6)
 77     qp
 78     t6
 79     quits
 80     ;;
 81     7)
 82     qp
 83     t7
 84     quits
 85     ;;
 86     8)
 87     qp
 88     t8
 89     quits
 90     ;;
 91     9)
 92     qp
 93     t9
 94     quits
 95     ;;
 96     10)
 97     qp
 98     t10
 99     quits
100     ;;
101         0)
102     qp
103     t1
104     t2
105     t3
106     t4
107     t5
108     t6
109     t7
110     t8
111     t9
112     t10
113     grade
114     quits
115     ;;
116     q)
117     exit
118     ;;
119     e)
120     run
121     ;;
122     *)
123     echo -e "${Error} 请输入正确的数字 [1-10]"
124     ;;
125 esac
126 }
127 #返回菜单函数
128 function quits() {
129 echo && read -e -p "输入e返回菜单,q退出:" quit
130 until [[ $quit == q || $quit == e ]]
131 do
132     echo -ne "$tip"&& read -e -p "请输入 [q/e]:" quit
133 done
134 case "$quit" in
135     e)
136     menu
137     ;;
138     q)
139     qp
140     exit
141     ;;
142     *)
143     echo -e "${Error} 请输入q或e[q/e]"
144     ;;
145 esac
146 }
147 ##以下为功能函数
148 #
149 function t1() {
150 ##**********************************************##
151 ##--------------此处添加函数代码----------------##
152 
153 echo "--------------第一题----------------"
154 
155 echo -e "${info}"
156 
157 t1_sum=0
158 
159 hostnames=$(hostname)
160 
161 if [ $hostnames == hniu$snum.hniu.cn ];then
162     let t1_sum=$t1_sum+5
163     echo -e "${green_font}主机名配置正确加5分${end_font}"
164 else
165     echo -e "${error}${green_font}主机名配置错误不得分${end_font}"
166 fi
167 sleep 1s
168 
169 today=$(date +%y%m%d)
170 
171 if [ $today == 190616 ];then
172     let t1_sum=$t1_sum+5
173     echo -e "${green_font}日期配置正确,得5分${end_font}"
174 else
175     echo -e "${error}${green_font}日期配置错误,不得分${end_font}"
176 fi
177 sleep 1s
178 
179 echo -e "

${tip}${red_font}本题共10分,得 ${t1_sum} 分${end_font}"
180 
181 ##--------------此处添加函数代码----------------##
182 ##**********************************************##
183 sleep 2s
184 printf "

"
185 }
186 
187 function t2() {
188 ##**********************************************##
189 ##--------------此处添加函数代码----------------##
190 
191 echo "--------------第二题----------------"
192 
193 echo -e "${info}"
194 t2_sum=0
195 #判断用户是否创建正确
196 cat /etc/passwd |grep hniu$snum &>/dev/null
197 if [ $? -eq 0 ];then
198     #正确加5分
199     let t2_sum=$t2_sum+5
200     echo -e "${green_font}用户创建正确,得5分${end_font}"
201     sleep 1s
202     
203     ##判断UID设置是否正确
204     let suser_uid=1100+$snum
205     suser=$(cat /etc/passwd |grep hniu$snum|cut -d ':' -f3)
206     if [ $suser == $suser_uid ];then
207         #正确加5分
208         let t2_sum=$t2_sum+5
209         echo -e "${green_font}用户UID设置正确,得5分${end_font}"
210     else
211         echo -e "${error}${green_font}用户UID设置错误,不得分${end_font}"
212     fi
213 else
214     echo -e "${error}${green_font}用户创建错误,本题不得分${end_font}"
215 fi
216 
217 echo -e "

${tip}${red_font}本题共10分,得 ${t2_sum} 分${end_font}"
218 
219 ##--------------此处添加函数代码----------------##
220 ##**********************************************##
221 sleep 2s
222 printf "

"
223 }
224 
225 function t3() {
226 ##**********************************************##
227 ##--------------此处添加函数代码----------------##
228 #题3判断权限函数
229 function file_quan() {
230 t=$1
231 #获取指定文件的数值权限
232 quan=$(stat /hniu$snum/$t |grep Access: (|awk '{print $2}'|cut -f1 -d '/')
233 quan_a=${quan: -3}
234 #判断数值权限是否为777
235 if [ $quan_a == 777 ];then
236     let t3_sum=$t3_sum+5
237     echo -e "${green_font}文件权限正确,得5分${end_font}"
238 else
239     echo -e "${error}${green_font}文件权限错误,不得分${end_font}"
240 fi
241 
242 }
243 
244 echo "--------------第三题----------------"
245 echo -e "${info}"
246 t3_sum=0
247 #0先判断文件夹是否存在
248 t3_path="/hniu$snum"
249 if [ ! -d "$t3_path" ];then
250     echo -e "${error}${green_font}文件夹不存在,此题无分${end_font}"
251 else
252     #1判断文件是否存在和改名
253     t3_file1="passwd"
254     t3_file2="password"
255     ls -l ${t3_path}/ |grep ${t3_file2} &>/dev/null
256     if [ $? -eq 0 ];then
257         let t3_sum=$t3_sum+5
258         echo -e  "${green_font}文件复制并改名正确,得5分${end_font}"
259         file_quan ${t3_file2}
260     
261     else
262         #echo "没改名"
263         #2判断文件是否存在和改名
264         ls -l ${t3_path}/ |grep ${t3_file1} &>/dev/null
265         if [ $? -eq 0 ];then
266             #echo "只是没改名"
267             let t3_sum=$t3_sum+3
268             echo -e "${green_font}文件复制正确但未改名,得3分${end_font}"
269             file_quan ${t3_file1}
270         else
271             #echo "根本没复制"
272             echo -e "${error}${green_font}文件复制和改名错误,不得分${end_font}"
273         fi
274         #2判断文件是否存在和改名
275     fi
276     #1判断文件是否存在和改名
277 fi
278 
279 echo -e "

${tip}${red_font}本题共10分,得 ${t3_sum} 分${end_font}"
280 
281 ##--------------此处添加函数代码----------------##
282 ##**********************************************##
283 sleep 2s
284 printf "

"
285 }
286 
287 function t4() {
288 ##**********************************************##
289 ##--------------此处添加函数代码----------------##
290 echo "--------------第四题----------------"
291 echo -e "${info}"
292 t4_sum=0
293 
294 #获取网卡名称
295 ens=$(nmcli con show |grep ethernet |head -1|awk '{print $1}')
296 #获取网卡IP地址
297 nmcli device show $ens |grep IP4.ADDRESS &>/dev/null
298 if [ $? -eq 0 ];then
299     #有IP地址
300     ens_ip=$(nmcli dev show $ens |grep IP4.ADDRESS|awk '{printf $2}')
301     ##判断ip地址是否配置正确
302     if [ $ens_ip == "192.168.${snum}.${snum}/24" ];then
303     #IP地址配置正确
304     let t4_sum=$t4_sum+3
305     echo -e "${green_font}ip地址配置正确,得3分${end_font}"
306     sleep 0.5s
307         ###查看是否为永久性生效
308         cat /etc/sysconfig/network-scripts/ifcfg-$ens |grep IPADDR &>/dev/null
309         if [ $? -eq 0 ];then
310             #网卡文件内配置了IP地址
311             let t4_sum=$t4_sum+2
312             echo -e "${green_font}ip地址配置永久性生效正确,得2分${end_font}"
313             sleep 0.5s
314             else
315             #网卡文件内未配置IP地址
316             echo -e "${error}${green_font}ip地址配置永久性生效错误,不得分${end_font}"
317             sleep 0.5s
318         fi
319     ###
320     else
321     #IP地址配置错误
322     echo -e "${error}${green_font}ip地址配置错误,不得分${end_font}"
323     sleep 0.5s
324     
325     fi
326     
327 ##
328 else
329     #没有ip地址
330     echo -e "${error}${green_font}没有配置ip地址,不得分${end_font}"
331     sleep 0.5s
332 fi
333 
334 echo -e "

${tip}${red_font}本题共5分,得 ${t4_sum} 分${end_font}"
335 
336 ##--------------此处添加函数代码----------------##
337 ##**********************************************##
338 sleep 2s
339 printf "

"
340 }
341 
342 
343 function t5() {
344 ##**********************************************##
345 ##--------------此处添加函数代码----------------##
346 echo "--------------第五题----------------"
347 echo -e "${info}"
348 t5_sum=0
349 
350 #判断文件夹是否存在
351 t5_file="/opt/t5"
352 if [ ! -d "$t5_file" ];then
353     echo -e "${error}${green_font}文件夹不存在,不得分${end_font}"    
354 else
355     let t5_sum=$t5_sum+1
356     echo -e "${green_font}文件夹已存在,得1分${end_font}"
357     file_user=$(stat /opt/t5/ |grep Access: (|awk '{print $6}'|cut -f1 -d ')')
358     file_group=$(stat /opt/t5/ |grep Access: (|awk '{print $10}'|cut -f1 -d ')')
359     #判断所属用户
360     if [ ${file_user} == hniu${snum} ];then
361         let t5_sum=$t5_sum+2
362         echo -e "${green_font}所属用户配置正确,得2分${end_font}"
363         else
364         echo -e "${error}${green_font}所属用户配置错误,不得分${end_font}"
365     fi
366     #判断所属组
367     if [ ${file_group} == root ];then
368         let t5_sum=$t5_sum+2
369         echo -e "${green_font}所属组配置正确,得2分${end_font}"
370         else
371         echo -e "${error}${green_font}所属组配置错误,不得分${end_font}"
372     fi
373 fi
374 
375 echo -e "

${tip}${red_font}本题共5分,得 ${t5_sum} 分${end_font}"
376 ##--------------此处添加函数代码----------------##
377 ##**********************************************##
378 sleep 2s
379 printf "

"
380 }
381 
382 function t6() {
383 ##**********************************************##
384 ##--------------此处添加函数代码----------------##
385 echo "--------------第六题----------------"
386 echo -e "${info}"
387 t6_sum=0
388 
389 t6_path="/opt/t6/"
390 #判断文件夹是否存在
391 if [ ! -d ${t6_path} ];then
392     echo -e "${error}${green_font}文件夹不存在,不得分${end_font}"
393 else
394     ##文件夹存在
395     #创建对比文件夹
396     mkdir /opt/T6
397     find /etc/ -name group* -exec cp -rf {} /opt/T6 ; &>/dev/null
398     #判断找到的文件是否一致
399     diff -r $t6_path /opt/T6 &>/dev/null
400     if [ $? -eq 0 ];then
401         let t6_sum=$t6_sum+5
402         echo -e "${green_font}文件查找并复制正确,得5分${end_font}"
403     
404             #判断文件权限是否正确
405 

            stat $t6_path/* |grep Access: (|awk '{print $2}'|cut -f1 -d '/' >/tmp/t6_quan1
            echo -e "(0744 (0744 (0744" >/tmp/t6_quan2
            diff /tmp/t6_quan1 /tmp/t6_quan2 &>/dev/null
            
            if [ $? -eq 0 ];then
                let t6_sum=$t6_sum+5
                echo -e "${green_font}文件权限设置正确,得5分${end_font}"
            else
                echo -e "${error}${green_font}文件权限设置错误,不得分${end_font}"
            fi

            sleep 0.5s
            
    else
        echo -e "${error}${green_font}文件查找并复制错误,不得分${end_font}"
    fi

    sleep 0.5s
fi

#删除对比文件夹
rm -rf /opt/T6
rm -rf /tmp/t6_*


echo -e " ${tip}${red_font}本题共10分,得 ${t6_sum} 分${end_font}"
##--------------此处添加函数代码----------------##
##**********************************************##
sleep 2s
printf " "
}

function t7() {
##**********************************************##
##--------------此处添加函数代码----------------##
echo "--------------第七题----------------"
echo -e "${info}"

t7_sum=0
#判断YUM配置是否正确
yum clean all &>/dev/null
##yum list &>/dev/null
yum repolist 2>/dev/null |grep repo id &>/dev/null
if [ $? -eq 0 ];then
    let t7_sum=$t7_sum+5
    echo -e  "${green_font}yum配置正确,得5分${end_font}"
else
    echo -e "${error}${green_font}yum配置错误,不得分${end_font}"
fi
sleep 0.5s

#判断YUM的仓库ID与名称设置是否正确
yum_idlist=$(yum repolist 2>/dev/null |grep hniu |awk '{printf $1}')
yum_namelist=$(yum repolist 2>/dev/null |grep hniu |awk '{printf $2}')
if [ "$yum_idlist" = "hniu" ];then
    let t7_sum=$t7_sum+3
    echo -e  "${green_font}yum仓库ID设置正确,得3分${end_font}"
else
    echo -e  "${error}${green_font}yum仓库ID设置错误,不得分${end_font}"
fi
sleep 0.5s

if [ "$yum_namelist" = "jiying" ];then
    let t7_sum=$t7_sum+2
    echo -e  "${green_font}yum仓库名称设置正确,得2分${end_font}"
else
    echo -e  "${error}${green_font}yum仓库名称设置错误,不得分${end_font}"
fi
sleep 0.5s
#判断zsh是否安装
yum list installed |grep zsh &>>/dev/null
if [ $? -eq 0 ];then
    let t7_sum=$t7_sum+5
    echo -e "${green_font}zsh安装成功,得5分${end_font}"
else
    echo -e "${error}${green_font}zsh安装失败,不得分${end_font}"
fi
sleep 0.5s

echo -e " ${tip}${red_font}本题共15分,得 ${t7_sum} 分${end_font}"
##--------------此处添加函数代码----------------##
##**********************************************##
sleep 2s
printf " "
}


function t8() {
##**********************************************##
##--------------此处添加函数代码----------------##
echo "--------------第八题----------------"
echo -e "${info}"

t8_sum=0
#分区类型
function swap_disk() {
sleep 0.5s
echo -e "${tip}:${red_font}当前新swap分区为分区类型${end_font}"
sleep 0.5s
disk_size=$(lsblk |grep SWAP|grep -v swap|awk '{print $4}')
if [ "${disk_size}" == "1G" ];then
    let t8_sum=$t8_sum+2
    echo -e "${green_font}swap大小为$disk_size,得2分${end_font}"
else
     echo -e "${error}${green_font}swap大小为$disk_size,不得分${end_font}"
fi

}
#文件类型
function swap_file() {
sleep 0.5s
echo -e "${tip}:${red_font}当前新swap分区为文件类型${end_font}"
sleep 0.5s
t8_file=$(swapon -s|grep -v Type |grep -v /dev/dm |tail -1 |awk '{print $1}')
file_size=$(ls -lh $t8_file |awk '{print $5}')
if [ "$file_size" == "1.0G" ];then
    let t8_sum=$t8_sum+2
    echo -e "${green_font}swap大小为$file_size,得2分${end_font}"
else
    echo -e "${error}${green_font}swap大小为$file_size,不得分${end_font}"
fi

}
#永久性挂载判断(文件判断)
function swap_mount() {
sleep 1s
cat /etc/fstab |grep swap |grep -v mapper &>/dev/null
if [ $? -eq 0 ];then
    let t8_sum=$t8_sum+5
    echo -e "${green_font}swap分区永久性挂载正确,得5分${end_font}"
else
    echo -e "${error}${green_font}swap分区永久性挂载错误,不得分${end_font}"
fi
sleep 0.5s
}
sleep 1s
#判断有无新swap分区启用
swapon -s|grep -v Type |grep -v /dev/dm &>/dev/null
if [ $? -eq 0 ];then
    let t8_sum=$t8_sum+3
    echo -e "${green_font}有新swap分区启用,得3分${end_font}"
        #判断swap为什么类型
        swap_type=$(swapon -s|grep -v Type |grep -v /dev/dm |tail -1 |awk '{print $2}')
        case "$swap_type" in
            partition)
            swap_disk
            swap_mount
            ;;
            file)
            swap_file
            swap_mount
            ;;
            *)
            echo -e "${error}${green_font}未知的swap类型,不得分${end_font}"
            ;;
        esac
else
    echo -e "${error}${green_font}新swap分区未启用,不得分${end_font}"
fi

echo -e " ${tip}${red_font}本题共10分,得 ${t8_sum} 分${end_font}"
##--------------此处添加函数代码----------------##
##**********************************************##
sleep 2s
printf " "
}

function t9() {
##**********************************************##
##--------------此处添加函数代码----------------##
echo "--------------第九题----------------"
echo -e "${info}"

t9_sum=0

lsblk |grep sd |grep G |grep ─|grep -v /boot|grep -v SWAP|head -2 |grep 2G &>/dev/null
if [ $? -eq 0 ];then
    let t9_sum=$t9_sum+5
    echo -e "${green_font}有分区为2G,得5分${end_font}"
    sleep 0.5s
    #判断分区文件系统
    disk_name=$(lsblk |grep sd |grep G |grep ─|grep -v /boot|grep -v SWAP|head -2 |grep 2G|awk '{print $1}'|cut -f2 -d '─')
    disk_fs=$(lsblk -f|grep $disk_name|awk '{print $2}')
    t9_mount="/mnt/disk"
    disk_mount=$(lsblk -f|grep $disk_name|awk '{print $4}')
    if [ "${disk_fs}" == "ext4" ];then
        let t9_sum=$t9_sum+2
        echo -e "${green_font}该分区的文件系统为${disk_fs},得2分${end_font}"
    else
        echo -e "${error}${green_font}该分区的文件系统为${disk_fs},不得分${end_font}"
    fi
    sleep 0.5s

    #判断分区文件挂载
umount ${t9_mount} &>/dev/null
mount -a $>/dev/null
    if [ "${disk_mount}" == "${t9_mount}" ];then
        let t9_sum=$t9_sum+3
        echo -e "${green_font}该分区的挂载设置正确,得3分${end_font}"
    else
        echo -e "${error}${green_font}该分区的挂载设置错误,不得分${end_font}"
    fi
    sleep 0.5s
else
    echo -e "${error}${green_font}}没有分区为2G,不得分${end_font}"
    sleep 0.5s
fi

echo -e " ${tip}${red_font}本题共10分,得 ${t9_sum} 分${end_font}"
##--------------此处添加函数代码----------------##
##**********************************************##
sleep 2s
printf " "
}

function t10() {
##**********************************************##
##--------------此处添加函数代码----------------##
echo "--------------第十题----------------"
echo -e "${info}"

t10_sum=0

#判断卷组hniu是否存在
vgscan |grep hniu &>/dev/null
if [ $? -eq 0 ];then
    let t10_sum=$t10_sum+5
    echo -e "${green_font}卷组hniu创建成功,得5分${end_font}"
    #判断逻辑卷hniuX是否存在
    lvs |grep hniu$snum &>/dev/null
    if [ $? -eq 0 ];then
        let t10_sum=$t10_sum+3
        echo -e "${green_font}逻辑卷hniu${snum}创建成功,得3分${end_font}"
        #判断逻辑卷大小
        lvm_size=$(lvs |grep hniu$snum|awk '{print $4}')
        if [ "${lvm_size}" == "1.00g" ];then
            let t10_sum=$t10_sum+2
            echo -e "${green_font}逻辑卷大小为${lvm_size},得2分${end_font}"
        else
            echo -e "${error}${green_font}逻辑卷大小为${lvm_size},不得分${end_font}"
        fi
        #判断文件系统
        lvm_fs=$(lsblk -f|grep hniu$snum|awk '{print $2}')
        if [ "${lvm_fs}" == "xfs" ];then
            let t10_sum=$t10_sum+3
            echo -e "${green_font}逻辑卷文件系统为${lvm_fs},得3分${end_font}"
        else
            echo -e "${error}${green_font}逻辑卷文件系统为${lvm_fs},不得分$${end_font}"
        fi
        #判断挂载点
        lvm_mount=$(df -h |grep hniu$snum |awk '{print $6}')
        if [ "${lvm_mount}" == "/mnt/lvm" ];then
            let t10_sum=$t10_sum+2
            echo -e "${green_font}挂载点正确,得2分${end_font}"
        else
            echo -e "${error}${green_font}挂载点错误,不得分${end_font}"
        fi
    else
        echo -e "${error}${green_font}逻辑卷hniu${snum}未创建,不得分${end_font}"
    fi
else
    echo -e "${error}${green_font}卷组hniu未创建,不得分${end_font}"
fi

echo -e " ${tip}${red_font}本题共15分,得 ${t10_sum} 分${end_font}"
##--------------此处添加函数代码----------------##
##**********************************************##
sleep 2s
printf " "
}

function grade() {
##**********************************************##
##--------------此处添加函数代码----------------##
zsum=$(expr $t1_sum + $t2_sum + $t3_sum + $t4_sum + $t5_sum + $t6_sum + $t7_sum + $t8_sum + $t9_sum + $t10_sum)
echo -e " ${tip}${red_font}本试卷总分100分,您得 ${zsum} 分${end_font}"
##--------------此处添加函数代码----------------##
##**********************************************##
printf " "
}

#学号函数
function xuehao () {
snum=60
while [[ $snum -le 0 || $snum -gt 55 ]]
do
echo -ne "${red_font}请输入学号[1-55]:${end_font}" && read -e snum
done
}

function run() {
xuehao
menu
}

run

原文地址:https://www.cnblogs.com/kunges/p/11074053.html