泷羽sec-shell编程(4)脚本与用户交互以及if条件判断 学习笔记

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频)

本章课程链接:shell编程(4)脚本与用户交互以及if条件判断_哔哩哔哩_bilibili

脚本与用户交互

read

在 Shell 脚本中,read是一个非常有用的内置命令。它的主要功能是从标准输入(通常是用户通过键盘输入)读取数据,并将读取到的数据赋值给一个或多个变量。这使得脚本能够与用户进行交互,获取用户输入的信息,如用户名、密码、文件路径等各种数据。

基本语法格式

一般形式为

read [选项] [变量名1] [变量名2...]

例如,read name,这里read命令会等待用户输入,将用户输入的内容赋值给变量name。如果有多个变量,如read name age city,用户输入的内容会按照空格分割,并依次赋值给name、age和city变量。

常用选项

-p(prompt)选项

用于在读取用户输入之前显示一个提示信息。这个提示信息可以告诉用户需要输入什么内容,使得交互更加友好。

read -p "Please enter your username: " user

当脚本执行到这一行时,会先在终端显示Please enter your username:作为提示,然后等待用户输入用户名,并将输入的内容赋值给变量user。

-n(number of characters)选项

指定要读取的字符数。当用户输入达到指定的字符数后,read命令就会停止读取。

read -n 5 password

此时,脚本会读取用户输入的前 5 个字符作为密码,并将其赋值给变量password。例如,用户输入abcdef,那么变量password的值就是abcde。

-t(timeout)选项

设置读取输入的超时时间,单位是秒。如果在指定的时间内没有接收到用户输入,read命令会结束等待,脚本继续执行。

read -t 10 -p "Enter a number within 10 seconds: " num

脚本会显示提示信息Enter a number within 10 seconds:,并等待用户输入一个数字。如果 10 秒内用户没有输入,read命令就会结束,脚本继续执行后面的内容。如果用户在 10 秒内输入了内容,那么输入的内容会赋值给变量num。

-s(silent)选项

用于在读取用户输入时不显示输入的内容,通常用于读取密码等敏感信息。

read -s password

当用户输入密码时,终端不会显示输入的字符,输入完成后,密码会赋值给变量password。

利用read进行交互,批量采集信息

输入信息

echo打印信息

利用read -p "请输入你的姓名" name 输入

 read -t 10 -p "请输入你的姓名:" name

解释:我们用户10秒没有输入自动退出程序,那么如果我们在10秒内输入了就会执行成功

如何限制用户输入的字符个数?

read -n 3 -t 10 -p  "请输入你的姓名:" name

-n (限制字符输入的数量)

-t (如果十秒不输入的话,自动退出)

请输入你的姓名并且限制你的字符串为三个:

vim 12.sh

read -p "请输入你的姓名:" name
echo "你输入的姓名是:$name,请你确认!"

关系运算符

在 Shell 脚本中,关系运算符用于比较两个操作数的值,以确定它们之间的关系,如大小关系、相等关系等。这些关系运算符通常在条件语句(如if语句)中使用,来根据不同的条件执行不同的代码块。

常见的关系运算符

-eq(等于)

用于比较两个数值是否相等。如果相等,条件为真。例如,在if语句中:

a=5
b=5
if [ $a -eq $b ]; then
    echo "a is equal to b"
else
    echo "a is not equal to b"
fi

这里,因为a和b的值都是 5,所以会输出a is equal to b

ne(不等于)

用于判断两个数值是否不相等。例如:

a=3
b=5
if [ $a -ne $b ]; then
    echo "a is not equal to b"
else
    echo "a is equal to b"
fi

由于 3 不等于 5,所以会输出a is not equal to b。

-gt(大于)

用于比较第一个数值是否大于第二个数值。例如:

a=7
b=5
if [ $a -gt $b ]; then
    echo "a is greater than b"
else
    echo "a is not greater than b"
fi

因为 7 大于 5,所以会输出a is greater than b

-lt(小于)

用来判断第一个数值是否小于第二个数值。例如:

a=3
b=5
if [ $a -lt $b ]; then
    echo "a is less than b"
else
    echo "a is not less than b"
fi

-ge(大于等于)

检查第一个数值是否大于或等于第二个数值。例如:

a=5
b=5
if [ $a -ge $b ]; then
    echo "a is greater than or equal to b"
else
    echo "a is less than b"
fi

因为a和b相等,满足大于或等于的条件,所以输出a is greater than or equal to b。

-le(小于等于)

用于确定第一个数值是否小于或等于第二个数值。例如:

a=3
b=5
if [ $a -le $b ]; then
    echo "a is less than or equal to b"
else
    echo "a is greater than b"
fi

if - else语句结构中的else基本概念

在 Shell 脚本中,if语句用于根据条件执行不同的代码块。当if语句中的条件为真时,会执行if代码块中的内容;而当条件为假时,就会执行else代码块中的内容。else是if语句的一部分,用于提供条件不成立时的备用执行路径。

例如,下面的脚本用于判断两个数的大小:

a=5
b=3
if [ $a -gt $b ]; then
    echo "$a is greater than $b"
else
    echo "$a is not greater than $b"
fi

这里,首先判断$a -gt b(即 5 是否大于 3)这个条件。因为条件为真,所以会执行if代码块中的echo "a is greater than b",输出5 is greater than 3。如果将a的值改为 2,那么a -gt b条件为假,就会执行else代码块中的echo "a is not greater than $b"。

else与多个关系运算符结合使用

可以在if语句中使用多个关系运算符来构建复杂的条件判断,else依然用于处理这些复杂条件不成立的情况。

例如,判断一个数是否在某个区间内:

num=7
if [ $num -ge 5 ] && [ $num -le 10 ]; then
    echo "$num is between 5 and 10 (inclusive)"
else
    echo "$num is not between 5 and 10 (inclusive)"
fi

这里,if语句中的条件使用了-ge(大于等于)和-le(小于等于)两个关系运算符,判断$num是否在 5 到 10 这个区间内。如果num的值满足这个区间条件,就执行if代码块;否则执行else代码块。

else在嵌套if语句中的应用

在嵌套的if语句中,else可以出现在内层if语句和外层if语句中,用于处理不同层次的条件不成立情况。

例如,判断一个学生的成绩等级:

score=85
if [ $score -ge 90 ]; then
    echo "A"
else
    if [ $score -ge 80 ]; then
        echo "B"
    else
        if [ $score -ge 70 ]; then
            echo "C"
        else
            if [ $score -ge 60 ]; then
                echo "D"
            else
                echo "F"
            end
        end
    end
end

在这个嵌套的if结构中,外层if语句首先判断成绩是否大于等于 90 分。如果不满足,就进入第一个内层if语句,判断成绩是否大于等于 80 分,以此类推。每个else部分负责处理当前if条件不成立的情况,直到确定成绩所属的等级。这种结构可以很精细地划分不同的条件范围,通过else来确保所有可能的情况都有相应的处理代码。

注意事项

操作数的数据类型:关系运算符主要用于数值比较。如果操作数是字符串,可能会得到意外的结果。不过,在某些情况下,如使用-eq和-ne比较字符串时,会比较它们的长度是否相等和不相等。

空格的重要性:在使用关系运算符时,[和]与操作数之间需要有空格。例如,[ $a -eq b \]是正确的格式,缺少空格可能会导致语法错误。同时,变量名与运算符之间也需要有空格,如a -eq $b。

vim 13.sh

num1=11

num2=89

if [ "num1" -eq "num2" ]; then

echo "相等"

else

echo "不相等"

fi

也可以使用test来更换[ ]

条件判断部分:

if [ $num1 -eq $num2 ] :这里if语句来进行条件判断。在if语句的条件表达式中,[] (注意使用时该括号与里面的内容都要有空格隔开)在shell脚本中用于进行各种测试操作。

num1和num2是对前面定义的两个变量num1和num2的引用,获取它们的值来参与条件判断。-eq是一个比较操作符,用于判断两个值是否相等,。所以整个语句就是在判断两个值是否传相等。

执行逻辑部分:

then:如果前面的条件判断结果为真,那么就会then后面的代码块。

echo 相等:当条件满足时,会执行这段代码,通过echo输出字符串 "相等"

else:当前面的条件判断为假时,就会执行else后面的代码块。

echo 不相等:当前面的条件判断为假时,就会执行这段代码,通过echo输出字符串 "不相等"

相关推荐
数据的世界0113 分钟前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐28 分钟前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
OopspoO3 小时前
qcow2镜像大小压缩
学习·性能优化
A懿轩A3 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
居居飒3 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
kkflash34 小时前
提升专业素养的实用指南
学习·职场和发展
Hejjon4 小时前
SpringBoot 整合 SQLite 数据库
笔记
1 9 J4 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
6.946 小时前
Scala——身份证号码查询籍贯
学习·scala
爱吃西瓜的小菜鸡6 小时前
【C语言】矩阵乘法
c语言·学习·算法