声明!
学习视频来自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
-
read -t 10 -p "请输入你的性名" name
-
read:Bash命令,用于从标准输入(键盘)读取数据。
-
-t 10:选项,设置读取操作的超时时间为10秒。如果在10秒内没有输入,read命令将超时并返回。
-
-p "请输入你的性名":选项,显示提示信息“请输入你的性名”,提示用户输入。
-
name:变量,用于存储用户输入的数据。
-
-
终端显示“请输入你的性名”后,等待用户输入。如果用户在10秒内没有输入,read命令将超时,终端会回到命令提示符,但不会显示任何错误信息。
-
第二次运行相同的read命令,但这次用户在提示后输入了“yu”并按下了回车键。
-
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
-
read -n 3 -t 10 -p "请输入你的性名" name
-
read:Bash命令,用于从标准输入(键盘)读取数据。
-
-n 3:选项,限制用户输入的字符数为3个。这意味着无论用户输入多少字符,只有前3个字符会被读取并存储。
-
-t 10:选项,设置读取操作的超时时间为10秒。如果在10秒内没有输入,read命令将超时并返回。
-
-p "请输入你的性名":选项,显示提示信息“请输入你的性名”,提示用户输入。
-
name:变量,用于存储用户输入的前3个字符。
-
-
终端显示“请输入你的性名”后,等待用户输入。用户输入了“qwe”并按下了回车键。由于-n 3的限制,只有“qwe”的前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
相等