泷羽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输出字符串 "不相等"

相关推荐
飞的肖1 小时前
日志(elk stack)基础语法学习,零基础学习
学习·elk
dal118网工任子仪3 小时前
66,【6】buuctf web [HarekazeCTF2019]Avatar Uploader 1
笔记·学习
02苏_3 小时前
2025/1/21 学习Vue的第四天
学习
羊小猪~~3 小时前
MYSQL学习笔记(四):多表关系、多表查询(交叉连接、内连接、外连接、自连接)、七种JSONS、集合
数据库·笔记·后端·sql·学习·mysql·考研
约定Da于配置3 小时前
uniapp封装websocket
前端·javascript·vue.js·websocket·网络协议·学习·uni-app
milk_yan4 小时前
Docker集成onlyoffice实现预览功能
前端·笔记·docker
东京老树根5 小时前
Excel 技巧15 - 在Excel中抠图头像,换背景色(★★)
笔记·学习·excel
Ronin-Lotus6 小时前
嵌入式硬件篇---ADC模拟-数字转换
笔记·stm32·单片机·嵌入式硬件·学习·低代码·模块测试
编程小猹6 小时前
学习golang语言时遇到的难点语法
学习·golang·xcode
promising-w7 小时前
单片机基础模块学习——数码管
单片机·嵌入式硬件·学习