本文最后更新于 2024-12-17T15:45:10+08:00
赛题
(1)题目:检查当前系统中是否安装了某个特定的软件包。(根据系统实际情况进行解答)
注:获取用户输入进行软件包检查
1 2 3 4
| #! /bin/bash
read -p "包名:" $str rpm -q $str &> /dev/null
|
(2)题目:扫描指定目录下的所有文件,并列出其中所有符号链接的文件。
注:目录自定义,脚本正确即可
1 2 3 4
| #! /bin/bash
read -p "请输入路径:" path find $path -type l
|
(3)题目:监控一个日志文件,并实时显示文件中新增的内容
注:日志文件在/var/log/messages
1 2 3
| #! /bin/bash
tail -f /var/log/messages
|
(4)题目:统计一个文本文件中每个单词出现的次数,并按出现次数排序输出。
注:文件自定义,脚本正确即可
1 2 3 4
| #! /bin/bash
read -p "请输入文件:" file tr -sc 'A-Za-z' '\n' < $file | tr 'A-Z' 'a-z' | sed '/^$/d' | sort | uniq -c | sort -nr
|
(5)题目:批量修改一组文件的文件名,将它们的扩展名从.txt改为.dat。
注:目录自定义
1 2 3 4 5 6 7 8 9 10 11
| #! /bin/bash
read -p "请输入目录:" path cd $path for file in $(ls *.txt); do name=$(echo $file | awk -F "." '{print $1}') mv $file $name.dat echo "$file --> ${file%.txt}.dat" done
|
(6)题目:编写一个Shell脚本,从一个Web服务器上下载文件,并检查下载文件的完整性(例如,使用MD5或SHA256校验)。
注:自定义url链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #! /bin/bash
md5_yuan="fc5dc492fc2655b38cc7183587307056" url="http://192.168.1.35/demo.txt" filename=$(basename "$url")
wget -O "$filename" "$url" md5_dow=$(md5sum "$filename" | awk '{print $1}')
if [[ "$de5_yuam" -eq "$md5_dow" ]];then echo "文件下载完整" else echo "文件下载不完整" fi
|
(7)题目:编写一个Shell脚本,定期清理系统中某个目录下超过一定天数的临时文件。
注:下载目录自定义
1 2 3 4 5
| #! /bin/bash
day=7 find . -type f -mtime +"$day" -delete
|
(8)题目:编写一个Shell脚本,从一个文本文件中提取所有的URL链接,并验证链接的有效性。
注:url自定义,脚本正确即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #! /bin/bash
URL_Done_List=()
while read url; do curl -s --head $url > /dev/null if [[ $? -eq 0 ]];then echo "链接 $url 有效" else URL_Done_List+=("$url") fi done < url.txt echo "不可用链接:" for i in ${URL_Done_List[@]}; do echo $i done
|
(9)题目:编写一个Shell脚本,实现一个简单的数据库备份系统,定期备份指定的数据库到文件。
注:mysql数据库的备份
1 2 3 4 5
| #! /bin/bash
date=$(date +%Y%m%d-%H:%M.%S) echo $date mysqldump -uroot -padmin@123. test > mysqlbackup-$date
|
(10)题目:编写一个Shell脚本,定期检查系统中所有用户的密码有效期,并提醒用户在密码过期前修改密码。
1 2 3 4 5 6 7 8 9 10 11
| #! /bin/bash while read user; do expire=$(chage -l $user | grep "密码过期时间" | awk -F ":" '{print $2}') expiretime=$(date -d $expire +%s) time=$(date +%s) day=$((expiretime - time / (60*60*24))) if [[ $day -le 7 ]];then echo "该改密码了" fi done < <(cut -d: -f1 /etc/passwd)
|
Shell
http://www.xiao-zhi.xin/2024/12/15/Shell-demo/