声明! 学习视频来自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输出字符串 "不相等"