3.shell脚本循环试题
shell脚本循环试题
1.计算从1到100所有整数的和
#!/bin/bash
a=0
for i in {1..100} #1到100
#每次循环变量i的值也为循环次数
do
a=$[ $a + $i ]
#每次循环变量重新赋值给变量a
done
echo "(1+..100)的和是"$a
2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
#!/bin/bash
a=0
read -p "请输入一个小于100的整数" c
for l in `seq $c`
#seq 有打印数字的功能默认以1开始
do
let a=$a+$l
#每次循环变量重新赋值给变量a
done
echo "你需要的整数和是"$a
3.求从1到100所有整数的偶数和、奇数和
方式1
#!/bin/bash
a=0
b=0
for i in {1..50}
do
let b+=2 #每次循环自加2
a=$[ $a + $b ]
done
echo "(1+..100)的偶数和是"$a
#!/bin/bash
a=0
b=1
for i in {1..50}
do
a=$[ $a + $b ]
let b+=2
done
echo "(1+..100)的奇数和是"$a
方式2
#!/bin/bash
a=0
b=0
c=0
d=1
for i in {1..50}
do
let b+=2
a=$[ $a + $b ]
c=$[ $c + $d ]
let d+=2
done
echo "1-100的偶数和是$a"
echo "1-100的奇数和是$c"
4.用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
[root@localhost ~]# cat users.txt
lei
xie
qing
#!/bin/bash
a=`cat ~/users.txt`
#以命令的结果为变量a的值
for i in $a
do
su $i &>/dev/null #切换用户混合输出到黑洞
if [ $? -eq 0 ] #判断上一条命令的返回结果返回0则可以登录输出用户已存在
then
echo "$i用户已存在"
else
read -p "请输入用户密码" b #其他表示用户不存在则定义变量作为用户密码
useradd $i #创建用户
echo "$b" |passwd --stdin $i #免交互设置用户密码
fi
done
5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
#!/bin/bash
a="192.168.239." #定义一个变量
for i in {1..10} #循环次数也为变量i的值也为IP范围
do
ping -c 3 $a$i &>/dev/null #检测连通性平3次 混合输出到黑的
if [ $? -eq 0 ] #判断命令返回值是否为0为0表示可以通
then
echo "$a$i" >>host_ip #则将ip追加到 host_ip文件内
fi
done
6.用户入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
#!/bin/bash
b=123456
#定义变量作为正确密码
for i in {1..3} #循环次数
do
read -p "请输入密码" a #定义变量作为用户输入的密码
if [ $a -eq $b ] #判断用户输入的密码是否正确,真确则输出密码正确并退出脚本
then
echo "密码正确"
exit
fi
done
echo "报警有人视图破解你的密码"
#如果循环3次输入的密码都不对则报警
7.编写能够自动生成一个6位随机密码的脚本
#!/bin/bash
a="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZ0123456789"
#定义一个变量为随机取值范围
for i in {1..6} #循环6次
do
b=$[RANDOM % ${#a}] #每次循环随机获取变量a,0到长度-1的下标值
c=${a: b:1} #截取变量a下标为b的值
d=$d$c #每循环一次追加一个值生成随机密码
done
echo "本次生成的随机密码是$d"
8.使用循环语句将一个 0到255 之间的十进制数转换成二进制数
#!/bin/bash
read -p "请输入十进制数字(0-255)" a
#定义变量
for i in 128 64 32 16 8 4 2 1
#循环次数也会变量i每次循环的值
do
if [ $a -ge $i ]
#判断变量a大于等于变量i则减去变量i定义变量c值为1其他则输出变量c值为0
then
a=$[$a-$i]
c=1
else
c=0
fi
d=$d$c #迭代每循环一次家一个值
done
echo "本次十进制数转二进制数的结果为$d"
9.将一个点分十进制格式的IP地址转换成点分二进制格式
#!/bin/bash
read -p "请输入ip" a
e=. #定义变量值为.作为分隔符
a1=`echo $a | awk -F. '{print $1}'`
a2=`echo $a | awk -F. '{print $2}'`
a3=`echo $a | awk -F. '{print $3}'`
a4=`echo $a | awk -F. '{print $4}'`
#分段定义变量
for b in $a1 $a2 $a3 $a4 #以变量作为变量值也为外循环的循环次数
do
for i in 128 64 32 16 8 4 2 1 #表示循环8次每次循环变量i的值
do
if [ $b -ge $i ] #判断大于等于变量i则减去并输出变量c=1其他为0
then
b=$[$b-$i]
c=1
else
c=0
fi
d=$d$c #内循环迭代
done
if [ ${#d} -eq 35 ]#判断当变量d的参数个数等于35是退出此次循环
then
break
fi
d=$d$e #外循环迭代
done
echo "本次十进制IP转二进制结果为:$d"
10.写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#!/bin/bash
#n代表逛了几家店
n=1
#sum代表购物总额
sum=0
#只要不退出就会一直执行下去
while true
do
echo "来到了第${n}家店门口"
read -p "是否进入看看?(yes/no)" doing
#如果 doing 为yes,则会一直在这家店购物,为no会退出这个循环
while [ "$doing" = "yes" ]
do
echo -e "1:衣服¥500\n2:裤子¥400\n3:鞋子¥350\n4:帽子¥150\n5:袜子¥50\n6:放弃购
买"
read -p "请选择你需要购买的商品序号:" num
case $num 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)
echo "放弃购买"
;;
*)
echo "输入有误"
esac
read -p "是否继续在这家店购物?(yes/no)" doing
done
#going 为yes时。店的数量n会加1后继续循环,如果为no,则退出循环
read -p "是否换一家继续逛?(yes/no)" going
if [ "$going" = "yes" ];then
let n++
else
break
fi
done
echo -e "一共逛了${n}家店。\n合计购物总额:${sum}元。"
11.输出环境变量PATH的目录所包含的所有可执行文件
#!/bin/bash
IFS=$IFS':'
#指定分隔符
for fd in $PATH
#以变量作为变量值也为循环次数
do
for a in $fd/*
#以每次外部循环变量fd下所有文件作为变量值也为循环次数
do
if [ -x $a ];then
#判断文件是否有执行权限有则输出$a有执行权限
echo "$a 有执行权限"
fi
done
done
12.mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,
输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
#!/bin/bash
geng() {
for b in $1 #这里的$1为函数后跟的第一个位置参数也就是$c
do
if [ -d $b ];then #判断$b是否为文件是则输出$b是文件并调用本身$b下的所有文件作为变量b的值也为循环次数进行再次判断,如果不是则进入下一判断,判断$b是否为文件且没有执行权没有则输出$b没有执行权限
echo "$b 是目录"
geng "$b/*"
elif [ -f $b ] && [ ! -x $b ];then
echo "$b 没有执行权限"
fi
done
}
IFS=$IFS':' #指定分隔符
for c in $PATH #使用变量PATH作为变量c的值也为循环次数
do
geng "$c" #调用函数$c为每次循环$b的变量值
done
3.shell脚本循环试题的更多相关文章
- shell脚本-循环选择语句
shell脚本-循环选择语句 过程式编程语言: 顺序执行 选择执行 循环执行 注:条件中的变量,可以在执行语句中使用,不用在加上"$". if语句 根据命令的退出状态来执行命令 单 ...
- 没事就要多做多练,Shell脚本循环例题做一做
Shell脚本循环例题 一.示例1 二.示例2 三.示例3 四.示例4 ...
- 24 道 shell 脚本面试题
想要成为中高级phper, shell 脚本是需要掌握的,它有助于你在工作环境中自动完成很多任务. 如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答: Q:1 Shell脚本是什么. ...
- shell脚本循环和信号
条件判断 if 条件1:then COMMAND elif 条件2:then COMMAND else COMMAND(:) : 表示pass 不执行任何命令 fi 读取用 ...
- shell脚本面试题
Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件( ...
- shell脚本循环处理文件数据
有一个日志文件为: # cat data.log 需要提取出里面的数据,写shell脚本实现这个功能: #!/bin/bash OLD=$IFS IFS=$'\n' for entry in $(ca ...
- shell脚本循环嵌套
嵌套循环 在循环语句内使用任意类型的命令,包括其他循环命令,叫做嵌套循环.因为是在迭代中迭代,需要注意变量的使用以及程序的效率问题. 下面举一个for循环嵌套for循环的例子: wangsx@SC-2 ...
- shell脚本循环执行mysql语句
参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: ...
- 实用的shell脚本面试题和答案
1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录. 答案 : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd. 现在,创 ...
随机推荐
- 2021.07.26 P1010 幂次方(数论)
2021.07.26 P1010 幂次方(数论) [P1010 NOIP1998 普及组] 幂次方 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.二进制 题意: 用20 ...
- 关于visualvm无法监控本地java进程
https://blog.csdn.net/weixin_43827693/article/details/105990675?spm=1001.2101.3001.6661.1&utm_me ...
- Python学习-Day1(Typora软件与计算机)
学习总括 Typora软件介绍(markdown语法) 相关拓展知识 文件的后缀名是什么? 什么是语言? 什么是编程语言? 什么是编程?(程序员写代码的本质) 计算机的五大组成部分 计算机的本质 计算 ...
- Mysql 计算地址经纬度距离实时位置
前言 最近在做项目时候,遇到一个这样子的需求, 点到卡包里面卡券使用使用,需要展示卡券使用附近门店, 思路 数据库地址表设计 通用的区域街道地址表tz_sys_area 字段名称 类型 备注 area ...
- 《Streaming Systems》第二章: 数据处理中的 What, Where, When, How
本章中,我们将通过对 What,Where,When,How 这 4 个问题的回答,逐步揭开流处理过程的全貌. What:计算什么结果? 也就是我们进行数据处理的目的,答案是转换(transforma ...
- javase集合 温故而知新
复习javase集合 1.为什么要有集合? 数组长度需要在初始化时确定大小,数据结构单一.因此集合出现了 2.数组和集合的区别 区别一:数组既可以存储基本数据类型,又可以存储引用类型,集合只能存储引用 ...
- 团队Beta3
队名:观光队 链接 组长博客 作业博客 组员实践情况 王耀鑫 **过去两天完成了哪些任务 ** 文字/口头描述 学习 展示GitHub当日代码/文档签入记录 接下来的计划 完成短租车,页面美化 **还 ...
- 关于5G技术,这是我见过最通俗易懂的讲解了
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 1 一个简单且神奇的公式 今天的故事,从一个公式开始讲起. 这是一个既简单又神奇的公式.说它简单,是因为它一共只有 3 个字 ...
- 就是要让你搞懂Nginx,这篇就够了!
开源Linux 长按二维码加关注~ 作者:渐暖° 出处:blog.csdn.net/yujing1314/article/details/107000737 来源:公众号51CTO技术栈 Nginx ...
- CSS躬行记(11)——管理后台响应式改造
为了提升业务人员操作管理后台的体验,花了点时间进行响应式的改造,紧急情况时,掏出手机就能工作. 利用CSS3的媒体查询,就能根据不同屏幕的尺寸采用不同的样式来渲染,目前使用的移动端屏幕阈值为750px ...