Shell

赛题

(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
#mv "$file" "${file%.txt}.dat"
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

# 定义7天
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
# echo "${URL_Done_List[@]}"

(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/
作者
小志
发布于
2024年12月15日
更新于
2024年12月17日
许可协议