渗透测试---shell(6)if条件判断与for循环结构
声明:学习素材来自b站up【泷羽Sec】,侵删,若阅读过程中有相关方面的不足,还请指正,本文只做相关技术分享,切莫从事违法等相关行为,本人与泷羽sec团队一律不承担一切后果
目录
一、if条件判断
1.elif嵌套
2.配合[[ ]]书写正则表达式
3.反向判断
4.检查多个文件类型
5.结合命令替换
二、for循环结构
1.遍历变量
2.结合if条件判断
3.命令衔接
一、if条件判断
1.elif嵌套
1.vim k.sh
2.写入内容:
a=10
b=20
if [ $a -eq $b ]; then
echo "a=b"
elif [ $a -gt $b ]; then
echo "a>b"
elif [ $a -lt $b ]; then
echo "a<b"
else
echo "没有符合上述条件"
fiif [[ $string =~ ^[0-9]+$ ]]; then echo "字符串是一个数字" fi
3.执行
2.配合[[ ]]书写正则表达式
[[ ... ]]
: 这是一个扩展的测试命令,比单方括号[
更灵活,适用于字符串比较和模式匹配。if [[ $string =~ ^[0-9]+$ ]]; then echo "字符串是一个数字" fi
eg:
string="478284742"
if [[ "$string" =~ ^[0-9]+$ ]]; then
echo "字符串是一个数字"
fi解释:
=~
: 表示使用正则表达式进行匹配。
^[0-9]+$
: 这是一个正则表达式,具体含义如下:
^
: 匹配字符串的开始。[0-9]+
: 匹配一个或多个数字(0-9)。$
: 匹配字符串的结束。在这个正则表达式的组合下,
^[0-9]+$
表示整个字符串必须是由一个或多个数字组成,且没有其他字符(例如字母、空格等)。执行:
3.反向判断
if ! ping -c 1 "$host" &> /dev/null; then echo "$host 不可达" fi
eg:
执行:
4.检查多个文件类型
if [[ -e $path ]]; then if [[ -d $path ]]; then echo "$path 是一个目录" elif [[ -f $path ]]; then echo "$path 是一个文件" fi else echo "$path 不存在" fi
5.结合命令替换
if [[ $(curl -Is "$url" | head -n 1) == *"200"* ]]; then echo "网址是可用的" fi
二、for循环结构
1.遍历变量
for num in 1 2 3 4 5;
do
echo "The number is $num"
done执行:
2.结合if条件判断
{ }高级用法:使用bash解释器
for i in {1..10};
do
if [ $((i % 2)) -eq 0 ]; then
echo "$i 是偶数"
else
echo "$i 是奇数"
fi
done执行
3.命令衔接
for user in $(cat users.txt); do if id "$user" &>/dev/null; then echo "$user 存在" else echo "$user 不存在" fi done
for user in $(cat users.txt); do
:cat users.txt
:这个命令用于读取users.txt
文件的内容。
$(...)
:命令替换,它会把cat users.txt
的输出结果作为一个空格分隔的字符串传递给for
循环。for user in ...; do
:这个循环会遍历文件中的每一行(在这个上下文中是每一个用户名),将每一个用户名赋值给变量user
。
if id "$user" &>/dev/null; then
:
id "$user"
:id
命令用于获取与指定用户名相关的用户和组信息。如果用户存在,命令会返回用户的详细信息;如果用户不存在,命令会产生错误。&>/dev/null
:这个部分是将id
命令的所有输出(标准输出和标准错误)重定向到/dev/null
,这意味着不显示任何输出,只是消耗掉。其目的是让脚本在执行时“安静”地运行,不显示任何错误消息。if ...; then
:开始一个条件判断,如果id
命令成功(即用户存在),那么进入then
部分。
好啦,本文的内容就到此了,还有后续吼。。