第一组
1.wc-l命令可以统计输入内容的行数,请统计/etc/passwd文件行数
2.将cat/etc/passwd输出内容中的sb替换为**(提示:sed命令)
3.输出/etc/passwd文件的第5行(提示:tail和head命令)
4.输出0-20以内随机数(提示:$RANDOM环境变量)
5.查找/etc/目录下所有b开头的文件,将输出按字母顺序排序(提示:sort命令)
6.用/etc/passwd文件的第3行作为提交留言内容
7.输出/etc/passwd文件中所有用户名字段(提示:awk命令)
8.统计/etc/passwd文件中包含sb的行数(提示:grep和wc命令)
9.用一句命令判断是否存在/etc/jx目录,如果不存在则创建并进入
10.将/etc/passwd文件内容作为grep-v sb的输入,将输出结果重定向到/tmp/busb.txt
第二组
1.鸡兔同笼,输入两个参数为笼顶有多少个头和笼底多少只脚,输出鸡有几只兔有几只
示例:bash chook.sh26
输出:鸡1只,兔1只
2.输入两个参数为两个整数,输出两个整数的和、差、积、商、求余
示例:bash calc.sh26
输出:和8 差-4 积12 商0 余2
3.随机一个系统中用户信息中包含sb的用户,将其用户信息中的sb替换为**后提交留言
4.显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小
5.每日将/etc/目录备份到/root/etcyyyy-mm-dd中(yyyy-mm-dd举例2022-04-28格式)
6.显示当前硬盘分区中空间利用率最大的值。
7.计算/etc/passwd文件中的第10个用户和第20用户的ID之和
8.统计/etc,/var,/usr目录中共有多少个一级子目录和文件
第三组
1.输入任意三个整数,判断最大数
示例:bash max.sh 1 2 3
输出:3
2.输入任意1个整数,判断是奇数还是偶数
示例:bash jiou.sh 1
输出:奇数
示例:bash jiou.sh 2
输出:偶数
3.输入一个用户名,判断用户是否存在,如果存在,显示一下用户默认的shell。
示例:bash user.sh root
输出:/bin/bash
4.输入一个数代表最大用户数量,如果当前登录用户数量超过此数,提示危险
提示:用w命令显示当前登录用户列表
示例:bash maxlogin.sh 3
输出:危险
5.输入一个IP地址,检查是否可以通信
6.检查给定路径文件是否存在,并且有执行权限,如果同时满足,
输出同时满足。否则创建文件并增加执行权限
示例:bash chkfile.sh /root/abc.txt
动作:创建/root/abc.txt,增加执行权限
示例:bash chkfile.sh /usr/bin/cat
输出:文件存在并且有执行权限
7.判断100米赛跑的秒数,大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,
进入选拔赛的成员再进一步判断男女性别,如果是男生进男生组,女生进女生组(0为男,1为女)
示例:bash chkrun.sh 8 0
输出:8秒进入选拔赛,分配到男生组
示例:bash chkrun.sh 9 1
输出:9秒进入选拔赛,分配到安生组
示例:bash chkrun.sh 13 1
输出:13秒直接淘汰
8,检查某个目录的磁盘使用率,输入目录和最大使用率,输出是否超过
示例:bash chkdir.sh /root10
输出:使用率超过10%
示例:bash chkdir.sh /run1
输出:使用率不超过1%
第四组
1.给定文件num.txt每行一个数字,找出最大的数字,并求出所有数字的和
示例:bash maxsum.sh num.txt(文件中第1行为1,第二行为2,...第100行为100)
输出:最大数字100,和为5050
2.打印99乘法表
示例:bash99.sh
输出:99乘法表
3.检查局域网192.168.5.0/24内主机是否可以通信
-------------------------------------------------------
示例:bash ping.sh 101 120
输出:
192.168.5.101 可以通信
....
192.168.5.110 不可以通信
....
192.168.5.120 可以通信
-------------------------------------------------------
4.给定文件num.txt每行一个学生成绩,将所有小于60的分数修改为60,存放numok.txt每行一个
-------------------------------------------------------
示例:bash numok.sh num.txt
输出:
-------------------------------------------------------
5.编写脚本,实现人机<石头,剪刀,布>游戏
-------------------------------------------------------
提示:read -p "提示信息" num(可以让用户输入数字到num变量中)
循环要求用户输入,石头为1,剪刀为2,布为3
示例:bash game.sh
你出什么(石头为1,剪刀为2,布为3)3
机器为石头,你赢了
你出什么(石头为1,剪刀为2,布为3)1
机器为石头,你输了
.....
-------------------------------------------------------
6.猜数游戏,让计算机随机产生一个1-100之间数字,人来猜
-------------------------------------------------------
提示:read -p "提示信息" num(可以让用户输入数字到num变量中)
循环要求用户输入数字直到猜中位置
示例:bash gamenum.sh
你猜为多少 65
太小了
你猜为多少 70
太大了
.....
你猜为多少 67
猜中了
-------------------------------------------------------
7.根据输入打印直角三角形
-------------------------------------------------------
示例:bash fang.sh 3
输出:*
**
***
示例:bash fang.sh 5
输出:*
**
***
****
*****
-------------------------------------------------------
8.用/etc/passwd文件中的用户名当作学生,用户ID当作成绩,输出成绩60和评级
-------------------------------------------------------
示例:bash chkscore.sh(小于60分不及格,60-80为中等,80-100为优秀)
输出:学生root成绩为0,不及格
学生daemon成绩为1,不及格
...
学生tcpdump成绩为72,中等
...
第一组解答
1.[root@docker01 ~]# cat /etc/passwd | wc -l
2.[root@docker01 ~]# cat passwd-backup | sed -i 's/sb/**/p'
3.[root@docker01 ~]# cat /etc/passwd | sed -n 5p
4.echo $(date +%N) % 20 |bc
5.[root@docker01 ~]# find /etc/ -name "b*" -type f | awk -F '/' '{print $NF}' | sort
6.[root@docker01 ~]# curl -s "http://127.0.0.1/liuyan/index.php" -d "name=213&con=$(cat /etc/passwd | head -n 3 | tail -n 1)" > /dev/null
7.[root@docker01 ~]# cat /etc/passwd | awk -F ':' '{print $1}'
8.[root@docker01 ~]# cat /etc/passwd | grep sb | wc -l
9. [root@docker01 ~]# ls -d /etc/jx || mkdir -p /etc/jx; cd /etc/jx
10.[root@docker01 ~]# cat /etc/passwd | grep -v sb > /tmp/busb.txt
第二组解答
1.
[root@docker01 script]# cat head_and_foot.sh
#!/bin/bash
head=$1
foot=$2
x=$(((4*$head-$foot)/2))
y=$((($foot-2*$head)/2))
echo "鸡有"$x"只","兔子有"$y"只"
2.
[root@docker01 script]# cat num.sh
#!/bin/bash
sum=$(echo "$1 + $2" | bc)
echo "和是: $sum"
jian=$(echo "$1 - $2" | bc)
echo "差是: $jian"
cheng=$(echo "$1 * $2" | bc)
echo "乘积是: $cheng"
shang=$(echo "$1 / $2" | bc)
echo "商是: $shang"
yu=$(echo "$1 % $2" | bc)
echo "余数是:$yu"
3.
#!/bin/bash
# 定义可用留言的数量
num=$(cat /etc/passwd | grep sb | wc -l)
# 产生随机数范围是大于等于1,并且小于等于num
lines=$(echo $(date +%N) %$num + 1| bc)
# 获取 /etc/passwd的第lines行(随机数行)
con=$(cat /etc/passwd | sed -n $count"p" | sed -n "s/sb/**/p")
# 把con中的内容当作留言提交
curl -s http://127.0.0.1/liuyan/index.php -d "name=123&con=$con" > /dev/null
4.
#!/bin/bash
# 获取主机名
echo "主机名: $(hostname)"
# 获取IPv4地址
echo "IPv4地址:"
ip addr show | grep 'inet' | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}'
# 获取操作系统版本
echo "操作系统版本:"
cat /etc/os-release | grep "PRETTY_NAME" | cut -d= -f2 | tr -d '"'
# 获取内核版本
echo "内核版本: $(uname -r)"
# 获取CPU型号
echo "CPU型号:"
lscpu | grep "Model name" | cut -d: -f2 | sed 's/^ //'
# 获取内存大小
echo "内存大小:"
free -h | grep Mem | awk '{print $2}'
# 获取硬盘大小
echo "硬盘大小:"
df -h | awk '/^\/dev/ {print $2}' | head -1
5.
crontab -e
59 23 * * * bash /root/script/backupetc.sh
[root@docker01 script]# cat backupetc.sh
#!/bin/bash
# 获取当前日期,格式为 yyyy-mm-dd
current_date=$(date +%F)
# 设置备份目录
backup_dir="/root/etc$current_date"
# 创建备份目录
mkdir -p "$backup_dir"
# 执行备份,将 /etc 目录内容复制到备份目录
cp -r /etc/* "$backup_dir/"
# 输出备份完成的信息
echo "Backup of /etc completed to $backup_dir"
6.
[root@docker01 script]# df -h | awk '{print $5}' | grep -v "Use" | sed "s/%//g"|sort -r | sed -n 1p
7.
user_id1=$(cat /etc/passwd | sed -n 10p | awk -F ':' '{print $3}')
user_id2=$(cat /etc/passwd | sed -n 20p | awk -F ':' '{print $3}')
echo $user_id1 + $user_id2 | bc
8.
#!/bin/bash
usr=$(ls /usr/* |wc -l)
etc=$(ls /etc/* |wc -l)
var=$(ls /var/* |wc -l)
echo "usr目录有"$usr个文件及文件夹
echo "etc目录有"$etc个文件及文件夹
echo "var目录有"$var个文件及文件夹
第三组解答
#!/bin/bash
num1=$1
num2=$2
num3=$3
# 输入任意三个整数,判断最大数
1.
#if [ $num1 -gt $num2 -a $num1 -gt $num3 ]; then
# echo $num1
#elif [ $num2 -gt $num3 ]; then
# echo $num2
#else
# echo $num3
#fi
# 这里用-a连接两个表达式,不能直接用&&连接。
2.
#if [ $(echo "$num1 % 2" | bc) -eq 0 ]; then
# echo "偶数"
#else
# echo "奇数"
#fi
3.
#user=$1
#info1=$(cat /etc/passwd | grep "^$user")
#if [ $? -eq 0 ]; then
# echo $(cat /etc/passwd | grep "^$user" | awk -F ':' '{print $NF}')
#else
# echo " "
#fi
4.
#max_user=$1
#current_user=$(w | awk '{print $4}' | sed -n 1p)
#if [ $current_user -gt $max_user ]; then
# echo "危险"
#else
# echo " "
#fi
5.
#ip=$1
#ping -c1 $1 -t2 > /dev/null
#if [ $? -eq 0 ]; then
# echo "$1可以通信"
#else
# echo "$1不可以通信"
#fi
6.
#path=$1
#ls -l $path | awk '{print $1}' | grep "x" > /dev/null
#if [ -f $path -a $? -eq 0 ]; then
# echo "$path文件存在并且有执行权限"
#
#else
# echo "创建$path. 增加执行权限"
# touch $path > /dev/null && chmod +x $path
#fi
7.
#sec=$1
#sex=$2
#
#if [ $sec -gt 0 -a $sec -le 10 ]; then
# if [ $sex -eq 0 ]; then
# echo "$sec秒进入选拔赛,分配到男生组"
# else
# echo "$sec秒进入选拔赛,分配到女生组"
# fi
#else
# echo "$sec秒直接淘汰"
#fi
8.
dir=$1
max_used=$2
used=$(df -h $dir | grep -v "Use" | awk '{print $5}' | sed -n "s/%//p")
if [ $used -gt $max_used ]; then
echo "使用率超过$max_used%"
else
echo "使用率不超过$max_used%"
fi
第四组解答
#!/bin/bash
1.
#
numList=$(cat num.txt)
#最大值
max=0
#和
sum=0
for num in ${numList[@]}; do
if [ $max -lt $num ]; then
max=$num
fi
sum=$(echo $sum + $sum |bc)
done
echo $max $sum
2.
#!/bin/bash
#echo "1*1="$(echo 1*1 |bc)" "
for ((i=1;i<=9;i++)); do
for ((j=1;j<=$i;j++)); do
echo -n "$j*$i="$(echo $j*$i |bc)" "
done
echo ""
done
3.
#!/bin/bash
for ((ip=$1;ip<=$2;ip++)); do
ping -c1 -t2 192.168.5.$ip
if [ $? -eq 0 ]; then
echo "192.168.5.$ip 可以通信"
else
echo "192.168.5.$ip 不可以通信"
fi
done
4.
5.
#!/bin/bash
# 石头1 剪刀2 布3
read -p "请输入你出啥,石头为1,剪刀为2,布为3." num
computer=$(echo $RANDOM % 3 + 1 | bc)
# 如果人出石头
if [ $num -eq 1 ]; then
if [ $computer -eq 1 ]; then
echo "平局"
elif [ $computer -eq 2 ]; then
echo "你赢了"
elif [ $computer -eq 3 ]; then
echo "你输了"
fi
fi
# 如果人出剪刀
if [ $num -eq 2 ]; then
if [ $computer -eq 1 ]; then
echo "你输了"
elif [ $computer -eq 2 ]; then
echo "平局"
elif [ $computer -eq 3 ]; then
echo "你赢了"
fi
fi
# 如果人出布
if [ $num -eq 3 ]; then
if [ $computer -eq 1 ]; then
echo "你赢了"
elif [ $computer -eq 2 ]; then
echo "你输了"
elif [ $computer -eq 3 ]; then
echo "平局"
fi
fi
6.
#!/bin/bash
rand=$(echo $RANDOM % 100 + 1 | bc)
while [ 1 -eq 1 ]; do
#提示用户输入数字
read -p "请输入数字:" num
# 判断是否与随机数相等,或者大小关系
if [ $num -eq $rand ]; then
echo "猜中了"
break
elif [ $num -gt $rand ]; then
echo "太大了!"
elif [ $num -lt $rand ]; then
echo "太小了!"
fi
done
7.
#!/bin/bash
for ((i=1;i<=10;i++)); do
for ((j=0;j<$i;j++)); do
echo -n "*"
done
echo ""
done
8.
#!/bin/bash
stuList=$(cat /etc/passwd | sed "s/ /@/g")
for stu in ${stuList[@]}; do
name=$(echo $stu | awk -F ":" '{print $1}')
score=$(echo $stu | awk -F ":" '{print $3}')
if [ $score -lt 60 ]; then
echo "$name $score 不及格"
elif [ $score -ge 60 -a $score -lt 80 ]; then
echo "$name $score 中等"
elif [ $score -ge 60 -a $score -lt 80 ]; then
echo "$name $score 优秀"
fi
done
常见比较总结:
条件表达式 ,对比
整数: 等于-eq 不等于-ne 大于-gt 小于-lt 大于等于-ge 小于等于-le
字符串:等于 "[内容1]" == "[内容2]" , 不等于"[内容1]" != "[内容2]", 空-z "[内容
]", 不空-n "[内容]"
路径:存在-e,文件-f ,目录-d ,不存在 ! -e
逻辑:并且-a(一假则假),或者-o(一真则真),非 !
评论区