Shell循环练习题
Shell循环练习题
- Shell循环练习题
- 1.计算从1到100所有整数的和
- 2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
- 3.求从1到100所有整数的偶数和、奇数和
- 4.执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
- 5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
- 6.用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
- 7.编写能够自动生成一个8位随机密码的脚本
- 8.写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
- 9.mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
1.计算从1到100所有整数的和
#!/bin/bash
#for
for (( a=1; a<=100; a++ ))
do
sum=$[$sum + $a]
done
echo "for:1到100的所有整数的和为 $sum"
#while
b=1
while [ $b -le 100 ]
do
he=$[$he + $b]
let b++
done
echo "while:1到100的所有整数的和为 $he"
#until
c=1
until [ $c -gt 100 ]
do
qiuhe=$[$qiuhe + $c]
let c++
done
echo "until:1到100的所有整数的和为 $qiuhe"
2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
#!/bin/bash
read -p "请输入一个小于100且大于0的整数:" num
#for
if [ $num -gt 0 -a $num -lt 100 ];then
for ((a=1; a<=$num;a++))
do
sum=$[$sum + $a]
done
echo "for:1到$num 之间的所有整数的和为$sum "
elif [ $num -eq 0 ];then
echo "for:您输入的数字为0,并没有大于0,请重新输入"
elif [ $num -lt 0 ];then
echo "for:您输入的数字$num小于0,请重新输入"
elif [ $num -eq 100 ];then
echo "for:您输入的数字为100,并没有小于100,请重新输入"
elif [ $num -gt 100 ];then
echo "for:您输入的数字$num大于100,请重新输入"
else
echo "for:您输入的不是一个整数,请重新输入"
fi
#while
if [ $num -gt 0 -a $num -lt 100 ];then
b=1
while [ $b -le $num ]
do
he=$[$he + $b]
let b++
done
echo "while:1到$num 之间的所有整数的和为$he "
elif [ $num -eq 0 ];then
echo "while:您输入的数字为0,并没有大于0,请重新输入"
elif [ $num -lt 0 ];then
echo "while:您输入的数字$num小于0,请重新输入"
elif [ $num -eq 100 ];then
echo "while:您输入的数字为100,并没有小于100,请重新输入"
elif [ $num -gt 100 ];then
echo "while:您输入的数字$num大于100,请重新输入"
else
echo "while:您输入的不是一个整数,请重新输入"
fi
#until
if [ $num -gt 0 -a $num -lt 100 ];then
c=1
until [ $c -gt $num ]
do
qiuhe=$[$qiuhe + $c]
let c++
done
echo "until:1到$num 之间的所有整数的和为$qiuhe "
elif [ $num -eq 0 ];then
echo "until:您输入的数字为0,并没有大于0,请重新输入"
elif [ $num -lt 0 ];then
echo "until:您输入的数字$num小于0,请重新输入"
elif [ $num -eq 100 ];then
echo "until:您输入的数字为100,并没有小于100,请重新输入"
elif [ $num -gt 100 ];then
echo "until:您输入的数字$num大于100,请重新输入"
else
echo "until:您输入的不是一个整数,请重新输入"
fi
3.求从1到100所有整数的偶数和、奇数和
#!/bin/bash
#for
for (( a=1; a<=99; a+=2 ))
do
ji=$[$ji + $a]
done
echo "for:从1到100,所有整数的奇数和为$ji"
for (( b=2; b<=100; b+=2 ))
do
ou=$[$ou + $b]
done
echo "for:从1到100,所有整数的偶数和为$ou"
#while
c=1
while [ $c -le 99 ]
do
jishu=$[$jishu +$c]
let c+=2
done
echo "while:从1到100,所有整数的奇数和为$jishu"
d=2
while [ $d -le 100 ]
do
oushu=$[$oushu +$d]
let d+=2
done
echo "while:从1到100,所有整数的偶数和为$oushu"
#until
e=1
until [ $e -gt 99 ]
do
jihe=$[$jihe +$e]
let e+=2
done
echo "until:从1到100,所有整数的奇数和为$jihe"
f=2
until [ $f -gt 100 ]
do
ouhe=$[$ouhe +$f]
let f+=2
done
echo "until:从1到100,所有整数的偶数和为$ouhe"
4.执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
#!/bin/bash
username=$1
if grep "$username:" /etc/passwd &> /dev/null;then
echo "该用户已存在"
else
read -p "该用户不存在,正在为您创建该用户,请输入密码:" passwd
while [ -z $(echo $passwd) ]
do
read -p "密码不可为空,请重新输入:" passwd
done
useradd $1 && echo $passwd | passwd --stdin $1 &> /dev/null
echo "用户$1创建成功"
fi
5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
#!/bin/bash
read -p "请输入您想要测试的网段:" a
#for
for ((b=1; b<=254; b++))
do
{
ip=${a%.*}.$b
ping -c 3 -i 0.5 -w 2 $ip &> /dev/null
if [ $? -eq 0 ];then
echo $ip >> host_ip
fi
}&
done
echo "for:测试成功,已将通信主机ip记录于host_ip中"
#while
c=1
while [ $c -le 254 ]
do
{
ipadd=${a%.*}.$c
let c++
ping -c 3 -i 0.5 -w 2 $ipadd &> /dev/null
if [ $? -eq 0 ];then
echo $ipadd >> host_ip
fi
}&
done
echo "while:测试成功,已将通信主机ip记录于host_ip中"
#until
d=1
until [ $d -gt 254 ]
do
{
ipaddrs=${a%.*}.$d
let d++
ping -c 3 -i 0.5 -w 2 $ipaddrs &> /dev/null
if [ $? -eq 0 ];then
echo $ipaddrs >> host_ip
fi
}&
done
echo "until:测试成功,已将通信主机ip记录于host_ip中"
6.用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
#!/bin/bash
read -p "请先设置一个密码:" passwd
read -p "请输入您的密码:" mima
c=1
while [ $c -lt 3 ]
do
if [ $mima = $passwd ];then
echo "密码正确,服务启动中"
exit
else
read -p "密码错误,请重新输入:" mima
if [ $mima = $passwd ];then
echo "密码正确,服务启动中"
exit
else
let c++
fi
fi
done
if [ $c -eq 3 ];then
echo "错误三次,暴破滚粗"
exit
fi
7.编写能够自动生成一个8位随机密码的脚本
#!/bin/bash
keywords="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!@#$%^&*()_+{}:<>?[];,./"
for a in {1..8}
do
num=$[$RANDOM % ${#keywords}]
mima=${keywords:$num:1}
password+=$mima
done
echo "随机密码为:$password"
8.写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#!/bin/bash
sum=0
shop=1
read -p "这是第一家店铺,请问是否进入:(Y/N)" jinru
while [ $jinru = Y ]
do
echo "选项1衣服500元"
echo "选项2裤子400元"
echo "选项3鞋子350元"
echo "选项4帽子150元"
echo "选项5袜子50元"
echo "选项6不再购买任何商品"
read -p "选择你要购买的商品:" goods
case $goods in
1)
echo "衣服购买成功"
sum=$[sum + 500]
;;
2)
echo "裤子购买成功"
sum=$[sum + 400]
;;
3)
echo "鞋子购买成功"
sum=$[sum + 350]
;;
4)
echo "帽子购买成功"
sum=$[sum + 150]
;;
5)
echo "袜子购买成功"
sum=$[sum + 50]
;;
6)
read -p "选择是否继续或停止购物,或是换店逛逛?(continue/stop/change)" xz
if [ $xz = continue ];then
echo "请继续在本店购物"
elif [ $xz = change ];then
echo "在本店共消费$sum 元"
let shop++
echo "欢迎来到第$shop家店铺"
elif [ $xz = stop ];then
echo "本次购物共消费$sum 元,请支付"
echo "支付成功,欢迎下次光临"
exit
else
echo "输入错误"
fi
;;
*)
echo "目前没有该商品,掌柜正在努力进货"
;;
esac
done
9.mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
#!/bin/bash
mkdir -p /root/bin/aa/bb/cc/dd
touch /root/bin/aa/bb/cc/dd/abc.txt
OLDIFS=$IFS
IFS=$IFS':'
for a in $PATH
do
echo "$a:"
floder=$(find $a -type d)
for d in $floder
do
echo "$d"
done
file=$(find $a -type f)
for f in $file
do
if [ ! -x "$f" ];then
echo "-- $f"
fi
done
done
IFS=$OLDIFS
Shell循环练习题的更多相关文章
- Shell 循环中实现展示进度百分比的脚本方法
Shell 循环中实现展示进度百分比的脚本方法 当我需要处理一个几万行的文件的时候,需要处理的时间是比较长的.我一开始的想法是,没处理一行,就输出一个 # 号.但是这样还是会出现很多很多的 # 号,即 ...
- shell基础练习题
shell 基础练习题 1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小 #!/bin ...
- For,while,case,shell循环结构
For,while,case,shell循环结构 案例1:使用for循环结构 案 ...
- Shell循环语句for、while、until
Shell循环语句for.while.until 一.条件测试 二.删除字符 三.循环语句 示例1 ...
- Shell条件练习题
Shell条件练习题 目录 Shell条件练习题 1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的 ...
- Linux shell循环
条件测试 格式 test condition 或 [ condition ] 使用方括号时,要注意在条件两边加上空格,如果有操作符,运算符之间也必须有空格 测试状态:测试的结果可以用$?的值来判断,0 ...
- shell 循环使用
问题描述: shell中for循环while循环的使用 问题解决: (1)for循环 (1.1)数 ...
- shell脚本练习题
下面列出了几个linux学习中的shell脚本题目 1.九九乘法表 #!/bin/bash echo "九九乘法表" # 注意((之间不能有空格.加减乘除的格式.还有转义字符\*. ...
- 【Shell循环进程并行处理】利用简单的语句实现for循环并行处理命令
在生信分析中,经常会遇到不同的重复和处理,这样的分析过程有时是非常费时且占用资源并不是很多的,可以同时在后台运行以节约时间,这是并行处理的意义.除了需要并行处理,循环迭代来遍历整个文件夹的需要分析的数 ...
随机推荐
- URL中使用IPv4,IPv6和主机名
在浏览器的Http请求的URL中如何使用IPv4,IPv6和主机名, 因为IPv6的地址需要加[],导致用法有点区别, 下面通过具体的例子总结一下不同情况下的用法. 1.假设有台Linux主机名配置如 ...
- 为EasySharding.EFCore提供Dapper相关查询扩展
承接上一篇博文中的中间件基本都是写入性的操作,但对于查询操作实际上是比较鸡肋的,如果单纯的查询,没有分表的情况下基本还能适应,这里为了Dapper提供了扩展 Dapper的扩展查询是需要写表名称的,所 ...
- Typescript 字符串字面量类型
字符串字面类型定义的类型是固定的,在其使用时必须是其定义的其中一个字符串,否则会报错 当传入一个定义之外的字符串时,会报错字符串字面量类型.ts(13,20): error TS2345: Argum ...
- Pytest_fixture(9)
什么是fixture fixture是pytest特有的功能,使用装饰器 @pytest.fixture 标记的函数在其他函数中能被当作参数传入并被调用. fixture有明确的名字,在其他函数,模块 ...
- spring boot 使用 AOP 的正确姿势 --- 心得
1.前言 向spring boot转型,所有的配置基本上是用注解完成 ,以前使用spring MVC 需要写一大堆xml文件来配置. 基本上没什么变化,但是有些地方需要注意: 环绕通知不要使用异常捕获 ...
- vue3.0+vite+ts项目搭建-分环境打包(四)
分环境打包配置 新建.env.dev(或者.env) VITE_NODE_ENV = 'dev' VITE_HOST = 'http://local.host.com' 执行yarn dev ,控制台 ...
- SYCOJ1793
题目-统计单词前缀数 (shiyancang.cn) 1 #include<bits/stdc++.h> 2 using namespace std; 3 map<string,in ...
- 【Java常用类】DateTimeFormatter
DateTimeFormatter 方式一:预定义的标准格式 实例化 如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME DateTimeForma ...
- 读《疯狂Java讲义》笔记总结一
最近在读<疯狂Java讲义>,现把其中遇到的一些自己以前没掌握的点儿记录下来. 1.字符串相关 字符串不是基本类型,字符串是一个类,也就是一个引用类型. 字符串转int类型String a ...
- Mysql group by之 Error 1055
统计每个班级有多少人 我按照班级名称进行分组,返回 班级id和班级name出现了如下错误 报错的查询语句如下 -- 统计每个班级有多少人select c.id,c.name,count(*) fro ...