循环语句与函数

  • 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相关推荐

  1. Shell循环语句(for循环;while循环;until循环)及中断(break和continue)

    Shell循环语句 for循环语句 例题1:批量添加用户 例题2:根据IP地址检查主机状态 while循环语句 例题1 猜价格游戏 例题二:批量添加用户 until循环语句 例题:计算1~50的值 中 ...

  2. shell 循环语句和函数

    循环语句 一.循环语句 1.for循环详解 2.while语句 3.until语句 4.双for循环 5.break和continue break,我们可以通过内外循环的输出来看break的特性. c ...

  3. shell 循环语句

    循环语句: for 语法结构: 1.列表循环 for variable in {list}docommand...done for variable in var1 var2 var3..docomm ...

  4. shell循环语句及实验

    一,for循环语句 在工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的 对象不一样,其他命令相同.例如,根据通讯录中的姓名列表创建系统账号,根据服务器清 单检查各主机的存活状态, ...

  5. 简单易懂!!shell循环语句!for、while、until

    这里写目录标题 for循环语句 基本格式 流程路 while循环语句 while语句结构 流程图 until循环语句 until语句基本结构 流程图 for循环语句 在实际工作中,经常会遇到某项任务需 ...

  6. linux shell 循环语句 for while until

    for/do/done Shell脚本的for循环结构和C语言很不一样,它类似于某些编程语言的foreach循环.例如: #! /bin/shfor FRUIT in apple banana pea ...

  7. Shell循环语句详解--for循环

    文章目录 一.for循环基本格式 二.for循环脚本 2.1测试主机状态 2.2添加用户 2.3乘法表 三.总结 引言:在shell编程中,除了选择判断之外,对一些特殊情况需要进行循环操作,比如遍历目 ...

  8. 【Linux】:shell循环语句

    运行Shell脚本有两种方法: 1.vi test.sh #! /bin/bash #编写内容 运行sh test.sh 2.chmod +x ./test.sh #脚本具有执行权限 ./test.s ...

  9. 怎么编写Linux脚本循环语句,shell脚本及常用循环语句

    博文结构 什么是shell 简单编辑shell 循环语句 一.什么是shell及作用 Shell字面理解就是个"壳",是操作系统(内核)与用户之间的桥梁,充当命令解释器的作用,将用 ...

最新文章

  1. 又一例“监视员工?”百度回应:和 996 无关,目前没有任何应用
  2. 为什么python不出结果_Python 的 Checksum 为什么结果是一长串数字而不是如下效果...
  3. 8.局部变量/全局变量global/内嵌函数/闭包nonlocal
  4. [xmlpull]XmlPull常见错误
  5. 【PAT - 甲级1045】Favorite Color Stripe(30分)(dp,LIS类问题)
  6. AliOS Things 3.0应用笔记:摄像头配网 + 钉钉群通知 + 天气显示
  7. 协同过滤算法(天池竞赛试题)
  8. kickstart_2018_round_H_C Let Me Count The Ways
  9. 面向对象18:接口(interface)
  10. Google登录提示错误码12501
  11. IDEA打包jar包将依赖包打包到一起
  12. 计算机系统中引入多道程序设计的目的在于,引入多道程序的目的在于什么
  13. 回归中的相关系数以及R平方值和Python应用举例
  14. [Unity][摄像机视角]多个摄像机之间切换
  15. three tables described the hot movie information in recent years
  16. 【日常办公】chm 已取消到该网页的导航
  17. 双十一引流的标题怎样写,写标题注意的点
  18. 一元二次方程的简单回顾
  19. NOIP普及组历届真题(1997~2018)
  20. 不止能看还能聊, 社交电视定义全新社交生活方式

热门文章

  1. perforce(p4)相关问题
  2. EXCEL 快速统计一列中相同数值出现的个数
  3. uni-app最新获取微信头像方法getUserProfile?
  4. 每日MySQL之024:FLUSH TABLES
  5. 数据分析面试——如何分析产品日活下降原因
  6. WIN 7系统建立无线热点
  7. 百度资源(站长)平台怎么提交收录?
  8. 使用钢琴键盘作为电脑键盘[关闭]
  9. LESS与SASS的伯与仲
  10. 信息收集--OSINT