声明!
学习视频来自B站up主 泷羽sec ,有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!
文章为个人学习笔记。
if条件判断
例子1
创建01.sh文件
vim 01.sh
str1="hello"
str2="hello"
if [ $str1 = $str2 ];then
echo True
else
echo false
fi
┌──(root㉿kali)-[~/work]
└─# sh 01.sh
True
-
str1="hello"
-
定义一个变量 str1,并赋值为字符串 "hello"。
-
-
str2="hello"
-
定义另一个变量 str2,并赋值为字符串 "hello"。这里 str2 的值与 str1 完全相同。
-
-
if [ $str1 = $str2 ]; then
-
使用 if 语句来比较 str1 和 str2 的值。[ $str1 = $str2 ] 是一个测试表达式,用于检查两个变量的值是否完全相同。
-
-
-
echo True
-
如果 str1 和 str2 的值相等,那么 if 语句的条件为真,执行 echo True 命令,输出字符串 "True"。
-
-
else
-
如果 if 语句的条件为假(即 str1 和 str2 的值不相等),则执行 else 后面的代码块。
-
-
echo false
-
在 else 代码块中,执行 echo false 命令。如果 str1 和 str2 的值不相等,这将被执行,输出字符串 "false"。
-
-
fi
-
fi 是 if 语句的结束标记,表示条件判断语句的结束。
-
因为 str1 和 str2 被赋值为相同的字符串 "hello",所以它们是完全相同的。因此,脚本会执行 if 代码块,并输出 "True"。如果 str2 的值被改为不同的字符串,那么脚本会执行 else 代码块,并输出 "false"。
例子2
str1="hello"
str2="Hello"
if [ $str1 = $str2 ];then
echo True
else
echo false
fi
┌──(root㉿kali)-[~/work]
└─# sh 01.sh
flase
-
str1="hello"
-
定义一个变量 str1,并赋值为字符串 "hello"。
-
-
str2="Hello"
-
定义另一个变量 str2,并赋值为字符串 "Hello"。注意这里的 "Hello" 与 str1 的 "hello" 只有首字母大小写不同。
-
-
if [ $str1 = $str2 ]; then
-
使用 if 语句来比较 str1 和 str2 的值。[ $str1 = $str2 ] 是一个测试表达式,用于检查两个变量的值是否完全相同,包括大小写。
-
在这里,由于 str1 和 str2 的值在大小写上有差异,所以这个条件为假。
-
-
echo True
-
如果 str1 和 str2 的值相等,那么 if 语句的条件为真,执行 echo True 命令,输出字符串 "True"。
-
但由于大小写的差异,这个命令实际上不会被执行。
-
-
else
-
如果 if 语句的条件为假(即 str1 和 str2 的值不相等),则执行 else 后面的代码块。
-
-
echo false
-
在 else 代码块中,执行 echo false 命令。由于 str1 和 str2 的值不相等,这将被执行,输出字符串 "false"。
-
-
fi
-
fi 是 if 语句的结束标记,表示条件判断语句的结束。
-
检查两个字符串变量 str1 和 str2 是否相等。在这个例子中,因为两个变量的值在大小写上有差异,所以脚本会输出 "false"。如果 str2 的值被改为 "hello",那么脚本会输出 "True"。
例子3
str1="hello"
str2="Hello"
if [ -z "$str2" ];then
echo True
else
echo false
fi
-
str1="hello"
-
定义一个变量 str1,并赋值为字符串 "hello"。在这个脚本中,str1 并没有被用到,但它的存在并不影响脚本的执行。
-
-
str2="Hello"
-
定义另一个变量 str2,并赋值为字符串 "Hello"。
-
-
if [ -z "$str2" ]; then
-
使用 if 语句和 -z 测试运算符来检查 str2 是否为空字符串(即长度为零)。
-
-z 运算符用于判断字符串是否为空。
-
变量 str2 被双引号包围,这是一个好习惯,可以防止字符串中的空格和特殊字符被错误地解释。
-
-
echo True
-
如果 str2 为空,那么 -z 测试为真,执行 echo True 命令,输出字符串 "True"。
-
-
else
-
如果 -z 测试为假(即 str2 非空),则执行 else 后面的代码块。
-
-
echo false
-
在 else 代码块中,执行 echo false 命令。如果 str2 非空,这将被执行,输出字符串 "false"。
-
-
fi
-
fi 是 if 语句的结束标记,表示条件判断语句的结束。
-
因为 str2 被赋值为 "Hello",所以它是一个非空字符串。因此,脚本会执行 else 代码块,并输出 "false"。这是因为 str2 确实非空。如果 str2 被赋值为空字符串,那么脚本会执行 if 代码块,并输出 "True"。
例子4
str1="hello"
str2="Hello"
if [ -n "$str2" ];then
echo True
else
echo false
fi
-
str1="hello"
-
定义一个变量 str1,并赋值为字符串 "hello"。在这个脚本中,str1 并没有被用到,但它的存在并不影响脚本的执行。
-
-
str2="Hello"
-
定义另一个变量 str2,并赋值为字符串 "Hello"。
-
-
if [ -n "$str2" ]; then
-
使用 if 语句和 -n 测试运算符来检查 str2 是否非空(即长度不为零)。
-
-n 运算符用于判断字符串长度是否大于零。
-
变量 str2 被双引号包围,这是一个好习惯,可以防止字符串中的空格和特殊字符被错误地解释。
-
-
echo True
-
如果 str2 非空,那么 -n 测试为真,执行 echo True 命令,输出字符串 "True"。
-
-
else
-
如果 -n 测试为假(即 str2 为空),则执行 else 后面的代码块。
-
-
echo false
-
在 else 代码块中,执行 echo false 命令。如果 str2 为空,这将被执行,输出字符串 "false"。
-
-
fi
-
fi 是 if 语句的结束标记,表示条件判断语句的结束。
-
因为 str2 被赋值为 "Hello",所以它是一个非空字符串。因此,脚本会执行 if 代码块,并输出 "True"。这是正确的逻辑,因为 str2 确实非空。如果 str2 被赋值为空字符串,那么脚本会执行 else 代码块,并输出 "false"。
布尔逻辑
不等于!=
num1=9
# 如果后续不需要用到num2,可以删除或注释掉下面这行
# num2=19
if [ "$num1" != "9" ]; then
echo "num1不等于9"
else
echo "num1等于9"
fi
┌──(root㉿kali)-[~/work]
└─# vim 01.sh
┌──(root㉿kali)-[~/work]
└─# sh 01.sh
num1等于9
-
num1=9
-
定义一个变量 num1,并赋值为数字9。
-
-
# num2=19 (如果后续不需要用到num2,可删除这一行)
-
这是一个注释行,表示如果脚本中不需要用到变量 num2,那么可以删除定义 num2 的这行代码。在这段代码中,num2 被注释掉了,所以它不会影响脚本的执行。
-
-
if [ "$num1" != "9" ]; then
-
使用 if 语句来比较 num1 的值是否不等于9。[ "$num1" != "9" ] 是一个测试表达式,用于检查 num1 的值是否不等于9。
-
注意:在Bash中,进行数值比较时,应该使用 -ne 而不是 !=。!= 用于字符串比较,而 -ne 用于数值比较。
-
-
echo num1不等于9
-
如果 num1 的值不等于9,那么 if 语句的条件为真,执行 echo num1不等于9 命令,输出字符串 "num1不等于9"。
-
-
else
-
如果 if 语句的条件为假(即 num1 的值等于9),则执行 else 后面的代码块。
-
-
echo num1等于9
-
在 else 代码块中,执行 echo num1等于9 命令。如果 num1 的值等于9,这将被执行,输出字符串 "num1等于9"。
-
-
fi
-
fi 是 if 语句的结束标记,表示条件判断语句的结束。
-
因为 num1 被赋值为9,所以 if 语句的条件为假,脚本会执行 else 代码块,并输出 "num1等于9"。如果 num1 的值被改为不等于9的任何其他数值,那么脚本会执行 if 代码块,并输出 "num1不等于9"。请注意,为了确保脚本的正确性,建议在比较数值时使用 -ne 而不是 !=。
与运算(AND)-a
小于号-lt
num1=9
num2=19
# 使用 -a 作为逻辑与运算符来正确连接两个条件,并给变量加上双引号确保正确
if [ "$num1" != "9" -a "$num2" -lt "20" ]; then
echo True
else
echo False
fi
┌──(root㉿kali)-[~/work]
└─# vim 01.sh
┌──(root㉿kali)-[~/work]
└─# sh 01.sh
False
-
num1=9
-
这行代码定义了一个变量 num1 并给它赋值为数字9。
-
-
num2=19
-
这行代码定义了另一个变量 num2 并给它赋值为数字19。
-
-
# 使用 -a 作为逻辑与运算符来正确连接两个条件,并给变量加上双引号确保正确
-
这是一个注释行,解释了接下来的 if 语句中将使用 -a 作为逻辑与(AND)运算符来连接两个条件。同时,建议在变量周围使用双引号,以确保变量的值被正确解释,特别是当值中包含空格或特殊字符时。
-
-
if [ "$num1" != "9" -a "$num2" -lt "20" ]; then
-
这是一个 if 语句,用于检查两个条件是否同时满足:
-
"$num1" != "9":检查 num1 是否不等于9。由于 num1 被赋值为9,这个条件为假。
-
-a:逻辑与运算符,表示两个条件必须同时满足。
-
"$num2" -lt "20":检查 num2 是否小于20。由于 num2 被赋值为19,这个条件为真。
-
-
由于 -a 运算符连接了两个条件,只有当两个条件都为真时,整个条件表达式才为真。
-
-
echo True
-
如果 if 语句的条件为真(即两个条件都满足),则执行 echo True 命令,输出字符串 "True"。
-
-
else
-
如果 if 语句的条件为假(即至少有一个条件不满足),则执行 else 后面的代码块。
-
-
echo False
-
在 else 代码块中,执行 echo False 命令,输出字符串 "False"。
-
-
fi
-
fi 是 if 语句的结束标记,表示条件判断语句的结束。
-
因为 num1 等于9,所以第一个条件 "$num1" != "9" 不满足。尽管第二个条件 "$num2" -lt "20" 满足,但由于使用了 -a 运算符,整个条件表达式为假,因此脚本会执行 else 代码块,并输出 "False"。如果 num1 的值被改为不等于9的任何其他数值,并且 num2 的值小于20,那么脚本会执行 if 代码块,并输出 "True"。
逻辑或(OR)-o
num1=9
num2=19
# 使用 -o 作为逻辑或运算符来正确连接两个条件,并给变量加上双引号确保正确
if [ "$num1" != "9" -o "$num2" -lt "20" ]; then
echo True
else
echo False
fi
-
定义变量 num1 并赋值为9。
-
定义变量 num2 并赋值为19。
-
使用 if 语句和 -o 运算符来检查两个条件中的任意一个是否满足:
-
"$num1" != "9" 检查 num1 是否不等于9。
-
-o:逻辑或运算符,表示两个条件中只要有一个为真,整个条件表达式就为真。
-
"$num2" -lt "20" 检查 num2 是否小于20。
-
-
如果任一条件满足,执行 echo True 命令,输出字符串 "True"。
-
如果两个条件都不满足,则执行 else 后面的代码块,输出 "False"。
-
fi 结束 if 语句。
因为 num2 等于19,小于20,所以第二个条件 "$num2" -lt "20" 满足。因此,即使第一个条件 "$num1" != "9" 不满足(因为 num1 等于9),脚本也会执行 if 代码块,并输出 "True"。这是因为使用了 -o 运算符,只要有一个条件为真,整个条件表达式就为真。