05-7-shell编程(4)脚本与用户交互以及if条件判断

声明!

学习视频来自B站up主 泷羽sec ,有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!

文章为个人学习笔记。

1、在Shell脚本与用户交互

使用read命令

┌──(root㉿kali)-[~]
└─# read name age  
xiaoyu 25
                                                                                                                      
┌──(root㉿kali)-[~]
└─# echo $name
xiaoyu
                                                                                                                      
┌──(root㉿kali)-[~]
└─# echo $age 
25                                                                                                                   

使用read命令:脚本中使用read​命令来读取用户输入的变量。这里有两个变量,name​和age​。

指定变量信息:使用read name age​指定了两个变量,name​和age​,用于存储用户输入的信息。

输入示例:提供了一个输入示例,用户输入了xiaoyu 26​,其中xiaoyu​是名字,26​是年龄。

使用echo命令:

  • ​echo $name​:用于输出变量name​的值,即用户输入的名字。

  • ​echo $age​:用于输出变量age​的值,即用户输入的年龄。

read​命令的示例

例子1:提示

错误方式:

┌──(root㉿kali)-[~]
└─# read -p "请输入你的性名" name
read: -p: no coprocess

你遇到的错误信息 read: -p: no coprocess​ 通常与旧版本的 Bash 或者某些特定环境有关,其中 read​ 命令的 -p​ 参数可能不被支持或者在当前上下文中有误用。

使用bash环境中。


                                                                                                                        
┌──(root㉿kali)-[~]
└─# bash             
┌──(root㉿kali)-[~]
└─# read -p "请输入你的性名" name
请输入你的性名xiaoyu

┌──(root㉿kali)-[~]
└─# echo $name
xiaoyu

  • ​read​:这是Shell脚本中用于读取用户输入的命令。

  • ​-p "请输入您的姓名:"​:这个选项后面跟着的字符串是提示信息,它会在命令行上显示,告诉用户需要输入什么信息。

  • ​name​:这是变量名,用于存储用户输入的值。

例子2:限制时间

┌──(root㉿kali)-[~]
└─# read -t 10 -p "请输入你的性名" name
请输入你的性名
┌──(root㉿kali)-[~]
└─# read -t 10 -p "请输入你的性名" name                                                                               
请输入你的性名yu
┌──(root㉿kali)-[~]
└─# echo $name                                                                                                        
yu
  1. ​read -t 10 -p "请输入你的性名" name​

    • ​read​:Bash命令,用于从标准输入(键盘)读取数据。

    • ​-t 10​:选项,设置读取操作的超时时间为10秒。如果在10秒内没有输入,read​命令将超时并返回。

    • ​-p "请输入你的性名"​:选项,显示提示信息“请输入你的性名”,提示用户输入。

    • ​name​:变量,用于存储用户输入的数据。

  2. 终端显示“请输入你的性名”后,等待用户输入。如果用户在10秒内没有输入,read​命令将超时,终端会回到命令提示符,但不会显示任何错误信息。

  3. 第二次运行相同的read​命令,但这次用户在提示后输入了“yu”并按下了回车键。

  4. ​echo $name​

    • ​echo​:Bash命令,用于在终端显示文本。

    • ​$name​:变量name​的值,即用户之前输入的“yu”。

在Bash脚本中使用read​命令来获取用户输入,并设置一个10秒的超时限制。如果用户在10秒内输入了数据,那么这个数据就会被存储在变量name​中,并通过echo​命令显示出来。如果用户在10秒内没有输入,read​命令将超时,但不会存储任何数据到变量name​中。在第二次尝试中,用户成功输入了“yu”,这个值被存储并随后通过echo​命令显示。

例子3:限制输入字数

┌──(root㉿kali)-[~]
└─# read -n 3 -t 10 -p "请输入你的性名" name                                                                          
请输入你的性名qwe
┌──(root㉿kali)-[~]
└─# echo $name                                                                                                        
qwe
  1. ​read -n 3 -t 10 -p "请输入你的性名" name​

    • ​read​:Bash命令,用于从标准输入(键盘)读取数据。

    • ​-n 3​:选项,限制用户输入的字符数为3个。这意味着无论用户输入多少字符,只有前3个字符会被读取并存储。

    • ​-t 10​:选项,设置读取操作的超时时间为10秒。如果在10秒内没有输入,read​命令将超时并返回。

    • ​-p "请输入你的性名"​:选项,显示提示信息“请输入你的性名”,提示用户输入。

    • ​name​:变量,用于存储用户输入的前3个字符。

  2. 终端显示“请输入你的性名”后,等待用户输入。用户输入了“qwe”并按下了回车键。由于-n 3​的限制,只有“qwe”的前3个字符被读取。

  3. ​echo $name​

    • ​echo​:Bash命令,用于在终端显示文本。

    • ​$name​:变量name​的值,即用户之前输入的“qwe”。

在Bash脚本中使用read​命令来获取用户输入的特定数量的字符,并设置一个10秒的超时限制。如果用户在10秒内输入了数据,那么这个数据的前3个字符就会被存储在变量name​中,并通过echo​命令显示出来。如果用户在10秒内没有输入,read​命令将超时,但不会存储任何数据到变量name​中。在这个例子中,用户成功输入了“qwe”,这个值被存储并随后通过echo​命令显示。

例子4:写脚本编写模拟

在/root/work目录下创建,name.sh文件

┌──(root㉿kali)-[~/work]
└─# vim name.sh       

name.sh文件的内容:

read -p "请输入你的性名" name

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

使用脚本;

┌──(root㉿kali)-[~/work]
└─# sh name.sh 
请输入你的性名yu
你输入的姓名是:yu,请你确认!
                                                                                                                        
┌──(root㉿kali)-[~/work]
└─# ./name.sh 
请输入你的性名xiaoyu
你输入的姓名是:xiaoyu,请你确认!
                                                      

2、关系运算符

关系运算符:

  • ​-eq​:相等

  • ​-lt​:小于

  • ​-gt​:大于

  • ​-ne​:不等于

  • ​else​:反转(如果条件不满足,则执行else部分)

编辑脚本:

只能对数值进行判断,无法对这个字符串进行判断。

例子1

使用vim o.sh​命令打开或创建一个名为o.sh​的脚本文件。

┌──(root㉿kali)-[~]
└─# cd work                  
                                                                                                                        
┌──(root㉿kali)-[~/work]
└─# vim o.sh   
                                                                                                                        
┌──(root㉿kali)-[~/work]
└─# sh o.sh 
不相等
                                                                                                                        
┌──(root㉿kali)-[~/work]
└─# ./o.sh   
zsh: 权限不够: ./o.sh
                                                                                                                        
┌──(root㉿kali)-[~/work]
└─# chmod +x /root/work/o.sh   
                                                                                                                        
┌──(root㉿kali)-[~/work]
└─# ./o.sh                
不相等
                                                                                                                        
┌──(root㉿kali)-[~/work]
└─# 

o.sh文件的内容:

num1=78
num2=89

if [ $num1 -eq $num2 ]; then
    echo 相等
else
    echo 不相等
fi

变量定义:

  • ​num1=78​:定义变量num1​并赋值为78。

  • ​num2=89​:定义变量num2​并赋值为89。

条件判断语句:

  • ​if [ $num1 -eq $num2 ]; then​:使用if​语句进行条件判断。这里使用方括号[ ]​来包含条件表达式,-eq​是数值比较运算符,表示“等于”。

  • ​echo 相等​:如果条件判断为真(即num1​等于num2​),则执行echo​命令输出“相等”。

  • ​else​:如果条件判断为假(即num1​不等于num2​),则执行else​部分。

  • ​echo 不相等​:输出“不相等”。

  • ​fi​:结束if​语句。

条件判断部分解释:

  • ​if [ $num1 -eq $num2 ]​:这是if​语句的条件表达式,用于比较num1​和num2​的值是否相等。

  • ​$num1​和$num2​是前面定义的变量,用于获取它们的值来进行判断。

  • ​-eq​是一个比较运算符,用于数值比较,判断两个数值是否相等。

执行逻辑部分解释:

  • ​then​:如果前面的条件判断结果为真(即num1​的值和num2​的值相等),则执行then​后面的代码块。

  • ​echo 相等​:输出“相等”。

  • ​else​:如果前面的条件判断结果为假(即num1​的值和num2​的值不相等),则执行else​后面的代码块。

  • ​echo 不相等​:输出“不相等”。

总结:

  • 这段代码首先定义了两个具有不同初始值的变量,然后通过条件判断来比较这两个变量的值是否相等,并根据判断结果输出相应的字符串(“相等”或者“不相等”)。

例子2

num1=89
num2=89

if test $num1 -eq $num2 ; then
    echo 相等
else
    echo 不相等
fi  

​num1=89​

  • 这行代码定义了一个变量num1​并给它赋值为89。

​num2=89​

  • 这行代码定义了另一个变量num2​并给它赋值为89。

​if test $num1 -eq $num2 ; then​

  • 这是一个if​条件语句,用于判断num1​和num2​的值是否相等。

  • ​test​是Shell中的一个命令,用于评估条件表达式。在这里,它用于比较两个变量的值。

  • ​-eq​是一个比较运算符,用于数值比较,表示“等于”。

  • ​$num1​和$num2​是变量,$​符号用于获取变量的值。

​echo 相等​

  • 如果if​条件语句中的比较结果为真(即num1​等于num2​),则执行echo​命令,输出文本“相等”。

​else​

  • 如果if​条件语句中的比较结果为假(即num1​不等于num2​),则执行else​后面的代码块。

​echo 不相等​

  • 在else​代码块中,如果num1​和num2​的值不相等,执行echo​命令,输出文本“不相等”。

​fi​

  • 这是if​语句的结束标记,用于结束条件语句。

在这个脚本中,由于num1​和num2​都被赋值为89,所以当执行if test $num1 -eq $num2​这个条件判断时,会发现两个变量的值相等,因此执行了then​后面的代码块,输出了“相等”。如果两个变量的值不相等,脚本会执行else​后面的代码块,输出“不相等”。

                                                                                
┌──(root㉿kali)-[~/work]
└─# vim o.sh
                                                                                                
┌──(root㉿kali)-[~/work]
└─# sh o.sh 
相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值