• Shell脚本攻略:循环语句for


    目录

    一、理论

    1.for循环

    2.echo命令

    二、实验

    1.实验一

    2.实验二

    3.实验三

    4.实验四

    5.实验五

    6.实验六

    7.实验七

    8.实验八

    9.实验九


    一、理论

    1.for循环

    (1)for循环的常见用法

          ① 带列表的for循环
    带列表的for循环用于执行一定次数的循环,其语法结构如下:

    for 变量名 in 取值列表

    do

      命令序列

    done

    1. for VARIABLE in (list)
    2. do
    3. command
    4. done
    1. for fruit in apple orange banana pear
    2. do
    3. echo "最爱吃的水果:$fruit"
    4. done
    5. echo "没有其他爱吃"
    1. [root@localhost ~]# sh fruit.sh
    2. 最爱吃的水果:apple
    3. 最爱吃的水果:orange
    4. 最爱吃的水果:banana
    5. 最爱吃的水果:pear
    6. 没有其他爱吃

    也可以将列表的内容换成变量,循环的时候读取变量的值;或者in后面的内容可以是任意命令的标准输出。例如:

    1. sum=0
    2. for VAR in `seq 1 100`
    3. do
    4. let "sum+=VAR"
    5. done
    6. echo "总和是: $sum"
    7. ~
    1. [root@localhost ~]# sh sum.sh
    2. 总和是: 5050

          ② 不带列表的for循环
    不带列表的for循环如下所示:

    1. for VARIABLE in (list)
    2. do
    3. command
    4. done

    使用不带列表的for循环时,需要运行脚本时通过参数的方式给变量传值。例如:

    1. sum=0
    2. for VAR
    3. do
    4. let "sum+=VAR"
    5. done
    6. echo "总和是: $sum"
    1. [root@localhost ~]# sh sum.sh 7 8 9
    2. 总和是: 24

    ③ 类C的for循环

    shell支持类C的for循环,语法结构如下:

    1. for ((expression1;expression2;expression3))
    2. do
    3. command
    4. done
    1. for ((i=1,j=100;i<=10;i++,j--))
    2. do
    3. echo "i=$i,j=$j"
    4. done
    5. ~
    6. ~
    1. [root@localhost ~]# sh for.sh
    2. i=1,j=100
    3. i=2,j=99
    4. i=3,j=98
    5. i=4,j=97
    6. i=5,j=96
    7. i=6,j=95
    8. i=7,j=94
    9. i=8,j=93
    10. i=9,j=92
    11. i=10,j=91

    ④  for的无限循环
    无限循环又叫死循环,使用类C的for循环,只要保证expression2条件为真即可,会一直运行,直到按下Ctrl+C组合键

    1. for ((i=0;i<1;i+=0))
    2. do
    3. echo "i=$i"
    4. done
    5. ~
    1. i=0
    2. i=0
    3. i=0
    4. i=0
    5. i=0
    6. i=0
    7. i=0
    8. i=0
    9. i=0
    10. i=0
    11. i=0
    12. ^C

    (2)for循环原理

    for语句需要定义一个变量和取值列表,根据不同的取值执行相同的命令,知道变量值用完。

    取值列表里包含多个属性相同的对象,例如:IP地址,通信录等。

    2.echo命令

    echo用于输出字符串或提取Shell变量的值

    格式:echo [参数] [字符串]

    表1 常用转义符号及含义

    转义符号含义
    -n  

    表示输出不换行

    -E 

       禁止反斜杠转义,与-e参数功能相反

    -e  

      输出转义字符,将转义后的内容输出到屏幕上

    \b 

       相当于退格键,但前提是“\b”后存在字符;“\b"表示删除前一个字符;”\b\b"表示删除前两个字符

    \c  

      不换行输出。后面无字符时相当于 echo -n;"\c"后有字符时,将不被输出

    \n 

       换行,但是换行后的新行从“\n”处开始另起一行

    \f

         换行,但是换行后的新行的开头位置连接着上一行的行尾

    \v  

      与\f相同-E    禁止反斜杠转义,与-e参数功能相反

    \t  

       转义后表示插入tab,即横向制表符

    \r 

        光标移至行首,但不换行,相当于使用“\r”以后的数字覆盖之前相等长度的字符

    | 表示插入“\”本身

    (1)echo -n 不换行输出

    1. echo a
    2. echo b
    3. echo c
    4. echo "......"
    5. echo -n a
    6. echo -n b
    7. echo -n c

    1. [root@localhost ~]# sh test.sh
    2. a
    3. b
    4. c
    5. ......
    6. abc[root@localhost ~]#

    (2)echo -e 转义字符; \b退格 不换行输出

    删除相应个数的字

    1. [root@localhost ~]# echo -e "abcd"
    2. abcd
    3. [root@localhost ~]# echo -e "abc\bd"
    4. abd
    5. [root@localhost ~]# echo -e "ab\b\bcd"
    6. cd

     (3)echo -e \c 不换行输出

    1. [root@localhost ~]# echo -e "abcd\c"
    2. abcd[root@localhost ~]#

    (4)echo -e \n 换行输出

    可在末尾

    1. abcd[root@localhost ~]# echo -e "abcd\n"
    2. abcd

    也可以在中间

    1. [root@localhost ~]# echo -e "ab\ncd"
    2. ab
    3. cd

     (5)echo -e \f、\v换行输出

    1. [root@localhost ~]# echo -e "abcd\fnice"
    2. abcd
    3. nice
    4. [root@localhost ~]# echo -e "abcd\vbeauty"
    5. abcd
    6. beauty

    (6)echo -e \r 光标移至行首不换行

    1. [root@localhost ~]# echo -e "abcd\r123"
    2. 123d

    二、实验

    1.实验一

    计算从1到100所有整数的和

    (1)脚本截图

    (2)运行结果

    2.实验二

    提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

    (1)脚本截图

    (2)运行结果

    3.实验三

    求从1到100所有整数的偶数和、奇数和

    偶数和

    (1)脚本截图

    (2)运行结果

    奇数和

    (1)脚本截图

    (2)运行结果

    4.实验四

    用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码

    (1)脚本截图

    (2)运行结果

    用户不存在

    用户存在密码不存在

    5.实验五

    检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中

    (1)脚本截图

    (2)运行结果

    6.实验六

    用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警

    (1)脚本截图

    (2)运行结果

    7.实验七

    使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数

    减法

    (1)脚本截图

    (2)运行结果

    除基逆序取余

    (1)脚本截图

    (2)运行结果

    8.实验八

    某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,请问这只猴子在第一天总共摘了多少根香蕉?

    (1)脚本截图

    (2)运行结果

    9.实验九

    (1)99乘法表

    (2)倒三角 99乘法表

  • 相关阅读:
    Yolov5——训练目标检测模型详解(含完整源码)
    Git学习总结(28)—— Git 中的 .gitignore 文件详解
    关于这个“这是B站目前讲的最好的【Transformer实战】教程!“视频的目前可以运行的源代码GPU版本
    linux下python3环境中安装MySQLdb
    c++征途 --- 函数
    idea正常run,但是debug报错
    【学习笔记】 字符串基础 : 后缀自动机(基础篇)
    【第28天】给定一个字符串S,请你判断它是否为回文字符串 | 回文的判断
    项目实战——配置git环境与项目创建
    学习总结 | 下一代人工智能
  • 原文地址:https://blog.csdn.net/cronaldo91/article/details/130901284