shell脚本习题
目录
- 1.计算1到100所有整数的和
- 2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
- 3.求从1到100所有整数的偶数和、奇数和
- 4.用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密吗,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密吗,建立用户并设立其密码
- 5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中。
- 6.用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
- 7.编写能够自动生成一个6位随机密码的脚本
- 8.输出PATH环境变量的目录里所有以se开头的文件
- 9.求裴波拉切数:1,1,2,3,5,8,13,21,34,55,89..,数列从第3项开始每一项等于前两项之和,打印前10个元素
- 10.使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
- 11.将一个200行的文件分割成多个50行的文件
- 12.写个脚本实现 猜测0-999的随机价格,猜不中,五次机会
- 13.批量添加用户 用户名称以stu开头,按数字顺序进行编号 一共添加20个用户,即stu1、stu2、……、stu20 初始密码均设为123456
- 14.每10秒检查系统内存使用率是否超过80%
- 15.根据IP地址检查主机状态 使用ping命令检测 20.0.0.0.0~255 的主机,获取在线的主机清单
- 16.猴子摘下了n个香蕉,当天吃掉一半多一个,第二天也是吃掉剩下香蕉一半多一个,到了第十天,香蕉只剩下了1个。问:猴子第一天摘了多少香蕉?
- 17.根据IP地址检查主机状态 IP地址存放在ipadds.txt文件中,每行一个 使用ping命令检测各主机的连通性
- 18.禁用当前系统除了root用户以外的可登录用户
- 19.用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中(#chkconfig: 2345 99 20),使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。
- 20.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt目录
- 21.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
- 22.判断挂载点目录/cdrom是否存在,若存在则挂载光盘镜像,若不存在则自动创建目录并挂载光盘镜像,注:光盘镜像不知是否存在。
- 23.检查当前用户家目录中是否存在 test.sh 文件,并且检查是否有执行权限
- 24.提示用户输入内容,使用if 语句判断输入的内容是否为整数。
- 25.根据上一题再判断输入的内容是奇数还是偶数
- 26.每10秒检查系统内存使用率是否超过80%
- 27.批量添加用户,用户名存放在users.txt文件中,每行一个,初始密码均设为123456
- 29.99乘法表
- 30.三角形
- 31.菱形
- 32.将一个点分十进制格式的IP地址转换成点分二进制格式,定义将十进制转换成二进制功能的函数
1.计算1到100所有整数的和
#/bin/bash
#计算1到100所有整数的和
sum=0
for ((i=1; i<=100; i++))
{
sum=$[sum + $i]
}
echo "1到100所有整数的和: $sum"
2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
#!/bin/bash
#计算从1到任意数(100)之间整数和100所有整数的和
a=1
sum=0
read -p "请输入一个1到100的整数:" num
if [ $num -ge 1 ] && [ $num -le 100 ];then
while [ $a -le $num ]
do
let sum+=a
let a++
done
echo "1到100总和为$sum"
else
echo "输入有误!"
fi
3.求从1到100所有整数的偶数和、奇数和
4.用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密吗,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密吗,建立用户并设立其密码
5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中。
6.用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
7.编写能够自动生成一个6位随机密码的脚本
8.输出PATH环境变量的目录里所有以se开头的文件
9.求裴波拉切数:1,1,2,3,5,8,13,21,34,55,89..,数列从第3项开始每一项等于前两项之和,打印前10个元素
10.使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
11.将一个200行的文件分割成多个50行的文件
12.写个脚本实现 猜测0-999的随机价格,猜不中,五次机会
#!/bin/bash
#写个脚本实现 猜测0-999的随机价格,五次猜测机会
PRICE=$[RANDOM % 1000]
a=1
b=0
while [ $a -eq 1 ];
do
read -p "请输入你猜测的价格(0-999):" NUM
let b++
if [ $NUM -eq $PRICE ] && [ $b -le 5 ]; then
echo "恭喜你!猜中了!!"
exit 0
elif [ $NUM -gt $PRICE ] && [ $NUM -le 9999 ]; then
if [ $b -lt 5 ]; then
echo "猜大了!请重猜!!"
else
echo "不好意思,机会用完了!"
exit 1
fi
elif [ $NUM -lt $PRICE ] && [ $NUM -le 9999 ]; then
if [ $b -lt 5 ]; then
echo "猜小了!请重猜!!"
else
echo "不好意思,机会用完了!"
exit 2
fi
else
echo "猜测有误!请重新输入!!"
fi
done
~
13.批量添加用户 用户名称以stu开头,按数字顺序进行编号 一共添加20个用户,即stu1、stu2、……、stu20 初始密码均设为123456
#!/bin/bash
#批量添加用户 用户名称以stu开头,按数字顺序进行编号 一共添加20个用户,即stu1、stu2、……、stu20 初始密码均设为123456
i=1
while [ $i -le 20 ]
do
useradd stu$i &> /dev/null
echo 123456 | passwd --stdin stu$i &> /dev/null
echo "stu$i 用户密码创建完毕!"
let i++
done
14.每10秒检查系统内存使用率是否超过80%
#!/bin/bash
#每10秒检查系统内存使用率是否超过80%
while true
do
used=$(free | grep Mem | awk '{print $3}')
total=$(free | grep Mem | awk '{print $2}')
percent=$[used * 100 / total]
if [ $percent -ge 80 ]; then
echo "警告!警告!当前系统内存使用率超过80%,当前使用率为 ${percent}%"
fi
sleep 10
done
15.根据IP地址检查主机状态 使用ping命令检测 20.0.0.0.0~255 的主机,获取在线的主机清单
16.猴子摘下了n个香蕉,当天吃掉一半多一个,第二天也是吃掉剩下香蕉一半多一个,到了第十天,香蕉只剩下了1个。问:猴子第一天摘了多少香蕉?
17.根据IP地址检查主机状态 IP地址存放在ipadds.txt文件中,每行一个 使用ping命令检测各主机的连通性
18.禁用当前系统除了root用户以外的可登录用户
19.用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中(#chkconfig: 2345 99 20),使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。
20.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt目录
21.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
22.判断挂载点目录/cdrom是否存在,若存在则挂载光盘镜像,若不存在则自动创建目录并挂载光盘镜像,注:光盘镜像不知是否存在。
23.检查当前用户家目录中是否存在 test.sh 文件,并且检查是否有执行权限
#!/bin/bash
#检査当前用户家目录中是否存在 test.sh 文件,并且检査是否有执行权限
#if [ -f ~/test.sh ]
if [ -f /root/test.sh ]; then
echo "文件已存在"
# if [ -x ~/test.sh ]; then
if [ -x /root/test.sh ]; then
echo "有执行权限"
else
echo "无权限"
fi
else
echo "文件不存在"
fi
24.提示用户输入内容,使用if 语句判断输入的内容是否为整数。
25.根据上一题再判断输入的内容是奇数还是偶数
26.每10秒检查系统内存使用率是否超过80%
#!/bin/bash
#每10秒检查系统内存使用率是否超过80%
while true
do
memused=$(free | grep Mem | awk '{print $3}')
memtotal=$(free | grep Mem | awk '{print $2}')
usedpercent=$[memused * 100 / memtotal]
if [ $usedpercent -ge 20 ];then
echo "警告!当前系统内存使用率超过80%,当前使用率为 ${usedpercent}%"
fi
sleep 10
done
27.批量添加用户,用户名存放在users.txt文件中,每行一个,初始密码均设为123456
#!/bin/bash
#批量添加用户,用户名存放在users.txt文件中,每行一个,初始密码均设为123456
userfile=/root/users.txt
for name in $(cat $userfile)
do
useradd $name
echo 123456 | passwd --stdin $name &> /dev/null
done
echo "批量添加用户完成"
29.99乘法表
30.三角形
uploading-image-878537.png
31.菱形
32.将一个点分十进制格式的IP地址转换成点分二进制格式,定义将十进制转换成二进制功能的函数
#/bin/bash
#将一个点分十进制格式的IP地址转换成点分二进制格式
#定义将十进制转换成二进制功能的函数
switch() {
num=$1
result=''
for j in {1..8}
do
yushu=$[num % 2]
num=$[num / 2]
result=$yushu$result
done
echo $result
}
###### main ######
read -p "请输入一个IPv4:" IP
n=0
#外循环分割出IP的每段数值
for ((i=1; i<=4; i++))
do
NUM=$(echo $IP | awk -F. "{print \$$i}")
res=$(switch $NUM)
let n++
#使用n变量作为计数器,当n=4即转换IP的第4段数值后不再使用echo -n
if [ $n -lt 4 ]; then
echo -n ${res}.
else
echo $res
fi
done