Shell循环语句(for、while、until)及echo、IFS
循环语句与函数
- echo简述
- 循环语句
- for循环语句
- 表达式一
- 表达式二
- 表达式三(变量值的迭代方式)
- 表达式四
- 批量添加用户且密码均为111222
- 批量检测指定ip地址连通性
- while循环语句
- 例一
- 例二
- untli循环语句
- 示例
- break
- continue
- IFS字段分隔符
echo简述
- echo -n:表示不转行输出
- echo -e:输出转义符,将转义后的内容输出到屏幕上
- 常用的转义符
转义符 | 说明 |
---|---|
\b |
相当于(backspace),但前提是\b后面存在字符 \b表示删除前一个字符,\b\b表示删除前两个字符 |
\c |
不换行输出,在\c后面不存在字符的情况下,作用相当于echo -n 但是当\c后面仍然有字符存在时,\c后面的字符将不会被输出 |
\n |
换行(且具备回车的功能) 被输出的字符从\n处开始另起一行 |
\f | 换行,但是换行后的新行的开头位置连接着上一行的行尾 |
\v | 与\f相同 |
\t | 转义后表示插图tab,即横向制表符 |
\r |
光标移至行首,但不换行 相当于\r以后的字符覆盖\r之前等同长度的字符,但是当\r后面不存在任何字符时,\r前面的字符不会被覆盖 |
\ \ | 表示插入\本身 |
循环语句
for循环语句
- for循环操作也统称遍历操作
- 读取不同的变量值,用来逐个执行同一组命令
- 逻辑图释
表达式一
[root@localhost ~]# for a in {1..5}; do echo $a; done
1
2
3
4
5
【使用for循环语句输出1到5并赋值给变量a】
[root@localhost ~]# for i in {1..5..2}
> do
> echo $i
> done
1
3
5
【使用for循环语句每次间隔2输出1到5并赋值给变量i】
表达式二
[root@localhost ~]# seq 1 3 10
1
4
7
10
【使用seq每次间隔3从1到10开始赋值,seq仅仅执行数值的连续操作】
[root@localhost ~]# for a in $(seq 1 5)
> do
> echo "$(($a*2))"
> done
2
4
6
8
10
【提取seq连续操作值后赋值给变量a的值,并将此变量*2】
表达式三(变量值的迭代方式)
[root@localhost ~]# for ((i=1;i<5;i++))
> do
> echo $i
> done
1
2
3
4
【使用for语句进行循环操作,且需赋值的变量1=i<5且每次i自加1】
[root@localhost ~]# for ((i=1;i<8;i+=3)); do echo $i; done
1
4
7
【使用for语句进行循环操作,且需赋值的变量1=i<8且每次+3进行赋值】
表达式四
[root@localhost ~]# for ((i=0; i<=8; i+=2))
> do
> echo "$[$i+$i+$i]"
> done
0
6
12
18
24
【使用for语句进行循环操作,且需赋值的变量1=i<8且每次+2进行赋值,echo输出的是变量i+变量i+变量i的值】
批量添加用户且密码均为111222
[root@localhost ~]# vim name1.txt
[root@localhost ~]# vim dome.sh #!/bin/bash
q=$(cat name1.txt)
for i in $q
douseradd $iecho "$111222" | passwd --stdin $i 【通过管道符号把111222输出给pasww $1】#echo -e "111222\n111222\n" | passwd $i 【通过转义符-n的换行回车进行秘密的确认,从而实现变量i的密码输入】done
[root@localhost ~]# chmod +x dome.sh
[root@localhost ~]# ./dome.sh
更改用户 qq 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 ww 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 ee 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 rr 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 tt 的密码 。
passwd:所有的身份验证令牌已经成功更新。
批量检测指定ip地址连通性
[root@localhost ~]# for i in 192.168.1.{0..5}; do ping -c 3 -i 0.5 -W 3 $i &> /dev/null && echo "$i 在线" || echo "$i 不在线";done
192.168.1.0 不在线
192.168.1.1 在线
192.168.1.2 不在线
192.168.1.3 不在线
192.168.1.4 在线
192.168.1.5 不在线
【使用for语句进行192.168.1.{0-5}网段的ping操作(共3个包,每次间隔0.5秒,3秒后超时)并赋值给i,并将变量i的值丢到黑洞文件。最终判断
条件是否成立,成立则输出变量i在线,不成立则输出变量i不在线】
while循环语句
- 重复测试某个条件,只要条件成立则立刻反复执行
- 赋完初始值后需要自己加入迭代方式,否则将陷入死循环
- 逻辑图释
[root@localhost ~]# vim text1.sh#!/bin/bashi=0 【定义变量i=0】
while [ $i -le 4 ] 【测试条件i小于等于4】
do echo $i 【输出i的值】let i++ 【自定义1个迭代方式】【输出的值和迭代方式这两行如果放错位置,那么最终输出的结果也将不同】
done
[root@localhost ~]# chmod +x text1.sh
[root@localhost ~]# ./text1.sh
0
1
2
3
4
例一
- 批量添加用户
- 用户名称以qzqz开头,按数字顺序进行编号
- 共添加5个用户,初始密码均设为111222
[root@localhost ~]# vim text2.sh #!/bin/bashi=1
while [ $i -le 5 ]
douseradd qzqz$iecho "111222" | passwd --stdin qzqz$i &> /dev/null 【将执行完的提示丢进黑洞文件】i=$[$i+1] 【变量叠加方式为每次+1】done
[root@localhost ~]# chmod +x text2.sh
[root@localhost ~]# ./text2.sh
例二
- 随机猜测水果价格
- 通过变量RANDOM获得随机数
- 提示用户猜测并记录猜测的次数,当用户猜中后则退出循环
- 价格区间在0-99
[root@localhost ~]# vim text3.sh
[root@localhost ~]# chmod +x text3.sh[root@localhost ~]# vim text3.sh#!/bin/basha=$[$RANDOM % 100] 【通过取余的方式将RANDOM随机值定义在0-99之间,RANDOM上限为99999】
b=0
d=0
echo "猜一猜该水果的价格:"
while [ $b -eq 0 ] 【当变量值b等于0时执行while语句操作】
dolet d++ 【每执行一次语句操作次数+1,并赋予变量名d,以便最终输出共猜测了几次】read -p "输入你猜测的价格:" c 【提示用户输入猜测的价格并赋予变量c】
if [ $c -eq $a ];then 【如果用户输入的变量c等于RANDOM随机出来的数字】echo "你猜对了!" b=1 【因为变量b等于0时才执行while语句,所以这里b=1用于跳出while循环】
elif [ $c -gt $a ];thenecho "你猜多了!"
elif [ $c -lt $a ];thenecho "你猜少了!" fidone
echo "你总共猜了 $d 次。"
:wq
[root@localhost ~]# ./text3.sh
猜一猜该水果的价格:
输入你猜测的价格:50
你猜少了!
输入你猜测的价格:65
你猜多了!
输入你猜测的价格:57
你猜少了!
输入你猜测的价格:63
你猜少了!
输入你猜测的价格:64
你猜对了!
你总共猜了 5 次。
untli循环语句
- 重复测试某个条件,只要条件不成立则反复执行
- 逻辑图释
[root@localhost ~]# vim text5.sh#!/bin/basha=0until [ $a -gt 5 ] 【定义条件为a>5时untile语句不生效】
doecho $a let a++done
[root@localhost ~]# chmod +x text5.sh
[root@localhost ~]# ./text5.sh
0
1
2
3
4
5
示例
- 通过循环累加的方式计算1-35的和值
[root@localhost ~]# vim text5.sh#!/bin/basha=0
sum=0
until [ $a -gt 35 ] 【定义条件为a>35时untile语句不生效】
dosum=$[$sum + $a] let a++done
echo $sum
:wq
[root@localhost ~]# ./text5.sh
630
break
- break可以跳出单个循环
[root@localhost ~]# vim text6.sh#!/bin/bashfor ((b=1;b<=3;b++))
doecho "外层循环为$b"for ((c=1;c<=3;c++))doecho "内存循环为$c"donedone
[root@localhost ~]# chmod +x text6.sh
[root@localhost ~]# ./text6.sh
外层循环为1
内存循环为1
内存循环为2
内存循环为3
外层循环为2
内存循环为1
内存循环为2
内存循环为3
外层循环为3
内存循环为1
内存循环为2
内存循环为3
[root@localhost ~]# vim text6.sh#!/bin/bashfor ((b=1;b<=3;b++))
doecho "外层循环为$b"for ((c=1;c<=3;c++))doecho "内存循环为$c"if [ $c -eq 2 ];then 【当变量c等于2时执行break操作,如果break 2则代表跳出2层循环】breakfidonedone
[root@localhost ~]# ./text6.sh
外层循环为1
内存循环为1
内存循环为2
外层循环为2
内存循环为1
内存循环为2
外层循环为3
内存循环为1
内存循环为2
continue
- continue中止某次循环中的命令,但不会完全中止整个命令
[root@localhost ~]# vim text6.sh#!/bin/bashfor ((b=1;b<=5;b++))
doecho "外层循环为$b"if [ $b -gt 2 -a $b -lt 4 ];then 【当变量值b大于2且小于4时执行continue操作】continuefiecho $[$b *2] done
[root@localhost ~]# ./text6.sh
外层循环为1
2
外层循环为2
4
外层循环为3 【因为当执行到3时满足变量值b大于2且小于4的条件,所以执行continue操作,中止当前一次循环命令】
外层循环为4
8
外层循环为5
10
IFS字段分隔符
[root@localhost ~]# set | grep IFS
IFS=$' \t\n' 【默认包含“空格,制表符,换行符”】
...略...local IFS='
[root@localhost ~]# oldifs=$IFS 【修改前先赋值给oldifs。以便使用完后好修改回初始值】
[root@localhost ~]# IFS=$'\n' 【修改成只换行】
[root@localhost ~]# set | grep IFS
IFS=$'\n'local option option2 i IFS=' ...略...local IFS='
[root@localhost ~]# IFS=$oldifs 【修改回初始值】
[root@localhost ~]# set | grep IFS
IFS=$' \t\n'...略...local IFS='
Shell循环语句(for、while、until)及echo、IFS相关推荐
- Shell循环语句(for循环;while循环;until循环)及中断(break和continue)
Shell循环语句 for循环语句 例题1:批量添加用户 例题2:根据IP地址检查主机状态 while循环语句 例题1 猜价格游戏 例题二:批量添加用户 until循环语句 例题:计算1~50的值 中 ...
- shell 循环语句和函数
循环语句 一.循环语句 1.for循环详解 2.while语句 3.until语句 4.双for循环 5.break和continue break,我们可以通过内外循环的输出来看break的特性. c ...
- shell 循环语句
循环语句: for 语法结构: 1.列表循环 for variable in {list}docommand...done for variable in var1 var2 var3..docomm ...
- shell循环语句及实验
一,for循环语句 在工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的 对象不一样,其他命令相同.例如,根据通讯录中的姓名列表创建系统账号,根据服务器清 单检查各主机的存活状态, ...
- 简单易懂!!shell循环语句!for、while、until
这里写目录标题 for循环语句 基本格式 流程路 while循环语句 while语句结构 流程图 until循环语句 until语句基本结构 流程图 for循环语句 在实际工作中,经常会遇到某项任务需 ...
- linux shell 循环语句 for while until
for/do/done Shell脚本的for循环结构和C语言很不一样,它类似于某些编程语言的foreach循环.例如: #! /bin/shfor FRUIT in apple banana pea ...
- Shell循环语句详解--for循环
文章目录 一.for循环基本格式 二.for循环脚本 2.1测试主机状态 2.2添加用户 2.3乘法表 三.总结 引言:在shell编程中,除了选择判断之外,对一些特殊情况需要进行循环操作,比如遍历目 ...
- 【Linux】:shell循环语句
运行Shell脚本有两种方法: 1.vi test.sh #! /bin/bash #编写内容 运行sh test.sh 2.chmod +x ./test.sh #脚本具有执行权限 ./test.s ...
- 怎么编写Linux脚本循环语句,shell脚本及常用循环语句
博文结构 什么是shell 简单编辑shell 循环语句 一.什么是shell及作用 Shell字面理解就是个"壳",是操作系统(内核)与用户之间的桥梁,充当命令解释器的作用,将用 ...
最新文章
- 又一例“监视员工?”百度回应:和 996 无关,目前没有任何应用
- 为什么python不出结果_Python 的 Checksum 为什么结果是一长串数字而不是如下效果...
- 8.局部变量/全局变量global/内嵌函数/闭包nonlocal
- [xmlpull]XmlPull常见错误
- 【PAT - 甲级1045】Favorite Color Stripe(30分)(dp,LIS类问题)
- AliOS Things 3.0应用笔记:摄像头配网 + 钉钉群通知 + 天气显示
- 协同过滤算法(天池竞赛试题)
- kickstart_2018_round_H_C Let Me Count The Ways
- 面向对象18:接口(interface)
- Google登录提示错误码12501
- IDEA打包jar包将依赖包打包到一起
- 计算机系统中引入多道程序设计的目的在于,引入多道程序的目的在于什么
- 回归中的相关系数以及R平方值和Python应用举例
- [Unity][摄像机视角]多个摄像机之间切换
- three tables described the hot movie information in recent years
- 【日常办公】chm 已取消到该网页的导航
- 双十一引流的标题怎样写,写标题注意的点
- 一元二次方程的简单回顾
- NOIP普及组历届真题(1997~2018)
- 不止能看还能聊, 社交电视定义全新社交生活方式