shell编程4-shell嵌套循环及随机数
shell编程4-shell嵌套循环及随机数
- 一.随机数
- 二.嵌套循环
- 三.总结
- 1.变量定义
- 2.循环语句
- 3.影响shell程序的内置命令
- 4.补充扩展expect
一.随机数
bash默认有一个$RANDOM的变量 默认是0~32767。使用set |grep RANDOM 查看上一次产生的随机数
echo $RANDOM产生0~1之间的随机数
echo $[$RANDOM%2]产生0~2之间的随机数
echo $[$RANDOM%3]产生0~3之间的随机数
echo $[$RANDOM%4]产生0~9内的随机数
echo $[$RANDOM%10]产生0~100内的随机数
echo $[$RANDOM%101]产生50-100之内的随机数
echo $[$RANDOM%51+50]产生三位数的随机数
echo $[$RANDOM%900+100]
实战案例:
- 1.写一个脚本,随机产生以134开头的手机号100个,每个一行写入到phonenum.txt文件中
分析:
1. 产生100个电话号码,脚本需要循环100次
2. 134+8位,后8位随机产生,可以让每一位数字都随机产生,$[RANDOM%10] 0-9
3. 将随机产生的数字分别保存到变量里,然后加上134保存到文件里
[root@shell ~]# vim phonenum.sh
#!/bin/bash
for i in {1..100}
do n1=$[RANDOM%10]n2=$[RANDOM%10]n3=$[RANDOM%10]n4=$[RANDOM%10]n5=$[RANDOM%10]n6=$[RANDOM%10]n7=$[RANDOM%10]n8=$[RANDOM%10]echo "134$n1$n2$n3$n4$n5$n6$n7$n8" >> phonenum.txt
done
[root@shell ~]# source phonenum.sh
[root@shell ~]# tail phonenum.txt
13489797116
13400443887
13418483291
13461270741
13416077839
13470805899
13498525631
13451583328
13425220419
13405672110
[root@shell ~]# cat phonenum.txt |wc -l
100
- 2.在上面的100个手机号码中抽取5个幸运观众,并只显示头3个数字和尾号四个数字,中间的数字使用*代替
分析:
1.确定幸运观众所在的行 随机生成 RANDOM $[RANDOM%1000+1]
2.将电话号码提取出来 head 和 tail
3.显示前3个和后4个数到屏幕 最后将电话号码输出到屏幕 echo ${电话号码部分}
[root@shell ~]# vim phonemem.sh
#!/bin/bash
file=/root/phonenum.txt
for i in {1..5}
dofile_num=`wc -l $file |cut -d' ' -f1`line=`echo $[$RANDOM%$file_num+1]`# 抽取幸运观众行号luck=`head -n $line $file|tail -1`# 取出幸运观众号码echo "134****${luck:7:4}" && echo $luck >> /root/luck_num.txt# 显示到屏幕
done
[root@shell ~]# source phonemem.sh
134****7381
134****5575
134****9506
134****9430
134****4080
二.嵌套循环
一个循环体内又包含另一个完整的循环结构,称为循环的嵌套.在外部循环的每次执行过程中都会触发内部循环,直至内部完成一次循环,才接着执行下一次的外部循环.for循环,while循环和until循环都可以相互嵌套.
例:打印一个九九乘法表
[root@shell ~]# vim 1.sh
#!/bin/bash
for i in {1..9}
dou=1while [ $u -le $i ]doecho -ne "$u*$i=$[ $u*$i ]\t"# -n 不要在最后自动换行# -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般let u++doneechoecho# 换行
done
[root@shell ~]# source 1.sh
1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10 3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
三.总结
1.变量定义
普通变量定义:
变量名=值 shell变量默认可以赋予任何类型
$变量名 ${变量名} ${变量名:从第几个字符开始:截取几个字符}
unset 变量名交互式:
read 变量名
-p
-t
-s
-n数组定义:
array=(var1 var2 var3 ...)
array[0]=var1
array[1]=var2
array[2]=var3
普通数组:数组的索引是整数定义关联数组
关联数组:索引是字符串获取数组里的元素:
${array[*]}
${array[2]}
${array[@]:1:2}
${!array[@]} 获取数组的索引号(下标)
${#array[@]} 获取数组索引号的个数定义有类型的变量:
declare
-i
-x
-a
-A
2.循环语句
for:
列表循环、非列表循环、类C风格 循环次数已知
while:
条件为真,进入循环,条件为假,退出循环 循环次数跟条件有关
until:
条件为假,进入循环,条件为真,退出循环 循环次数跟条件有关
3.影响shell程序的内置命令
exit 退出整个程序
break 结束当前循环,或跳出本层循环
continue 忽略本次循环剩余的代码,直接进行下一次循环
shift 使位置参数向左移动,默认移动1位,可以使用shift 2
4.补充扩展expect
expect 自动应答 tcl语言
Tcl(最早称为“工具命令语言”“Tool Command Language”, 但是已经不是这个含义,不过我们仍然称呼它为TCL)是一种脚本语言。 由John Ousterhout创建。 TCL很好学,功能很强大。TCL经常被用于 快速原型开发,脚本编程,GUI和测试等方面。
shell编程4-shell嵌套循环及随机数相关推荐
- shell编程-初始shell及变量
shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...
- Shell编程基础---shell的结构、执行及变量
2019独角兽企业重金招聘Python工程师标准>>> 本文索引: shell脚本介绍 shell脚本结构和执行 date命令用法 shell脚本中的变量 shell脚本介绍 she ...
- shell编程(八) : [shell基础] 处理用户输入
接上一篇文章shell编程(七) : [shell基础] 使用结构化命令 目录 3.3 处理用户输入 3.3.1 命令行参数 1.位置参数 2.对参数进行测试 3.3.2 特殊参数变量 1.参数个数 ...
- Shell编程入门-Shell程序设计实例
Shell编程入门-Shell程序设计实例 1.增加用户账户 编写一个Shell程序addaccount.sh,在系统中增加四个账户,同时设定他们的初始密码为123456,主组群为wl20. ①查看系 ...
- SHELL编程——初识SHELL编程
一.什么是SHELL编程? Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文件,以及启动和控制其他程序.Shell通过提示您输入,向操作系统解释该输出,然后处理来自操作系统的任何 ...
- Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向
最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! Shell 函数 1. 自定义函数 linux she ...
- linux编写运行shell程序,Linux的Shell编程运行Shell程序的方法有哪些呢?
用户可以用任何编辑程序来编写Shell程序.因为Shell程序是解释执行的,所以不需要编译成目的程序.按照Shell编程的惯例,以 bash为例,程序的第一行一般为"#!/bin/bash& ...
- Linux:shell编程(shell基本语法)
参考菜鸟教程:shell教程 目录 什么是shell? shell脚本的执行方式 一.HelloWorld 二.shell中的变量 2.1.定义变量 2.1.1.定义动态变量 2.1.2.删除变量 2 ...
- shell编程(七) : [shell基础] 使用结构化命令
接上一篇文章Linux shell编程(六): 基本shell脚本 3.2 使用结构化命令 前面介绍的都是顺序执行的命令,有时需要按照逻辑顺序执行命令,这是就需要对命令命令施加一些逻辑流程控制,这样的 ...
- shell编程(六) : [shell基础] 基本shell脚本
接上一篇文章Linux shell编程(五): Linux文件权限管理 三.Linux shell 脚本编程基础 了解了Linux系统和命令行的基础知识,是时候开始编程了. 3.1 基本shell脚本 ...
最新文章
- 怎样用QT在windows环境通过编程卸载installShield打包的程序
- ORACLE SELECT 语句中使用 CASE
- real210移植记录-u-boot2013.10引导linux3.10.30进入控制台
- c# wpf 面试_WPF 基础面试题及答案(一)
- 职场与生活 八条原则 让你不再浪费时间和提高效率
- PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization
- 思科交换机配置试题_【干货】思科交换机路由器怎么配置密码?
- 修改手游服务器端数据库,手游服务端框架之配置与玩家数据库设计
- JAVA基础——IO流字节流
- 通过jdt解析spring mvc中url-类-方法的对应关系
- 札记 - PHP/JS/jQuery/MySQL/CSS/正则/Apache
- 扫描仪标准模板滑动采集图像及其处理
- 关于windows完成端口(IOCP)的一些理解
- Vue 自定义指令里面获取Vue实例 实现v-copy与i18n结合。
- c语言直线和椭圆的交点,直线与椭圆交点距离公式
- 论文译文——BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- mapActions
- 微机保护装置智能操控及无线测温等产品在某助剂厂新建项目的应用
- 2016文件储存服务器,测试Windows Server 2016存储池教程
- vue3 Composition ApI总结