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

声明!

学习视频来自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

  1. ​str1="hello"​

    • 定义一个变量 str1​,并赋值为字符串 "hello"。

  2. ​str2="hello"​

    • 定义另一个变量 str2​,并赋值为字符串 "hello"。这里 str2​ 的值与 str1​ 完全相同。

  3. ​if [ $str1 = $str2 ]; then​

    • 使用 if​ 语句来比较 str1​ 和 str2​ 的值。[ $str1 = $str2 ]​ 是一个测试表达式,用于检查两个变量的值是否完全相同。

  4. ​echo True​

    • 如果 str1​ 和 str2​ 的值相等,那么 if​ 语句的条件为真,执行 echo True​ 命令,输出字符串 "True"。

  5. ​else​

    • 如果 if​ 语句的条件为假(即 str1​ 和 str2​ 的值不相等),则执行 else​ 后面的代码块。

  6. ​echo false​

    • 在 else​ 代码块中,执行 echo false​ 命令。如果 str1​ 和 str2​ 的值不相等,这将被执行,输出字符串 "false"。

  7. ​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
     
  1. ​str1="hello"​

    • 定义一个变量 str1​,并赋值为字符串 "hello"。

  2. ​str2="Hello"​

    • 定义另一个变量 str2​,并赋值为字符串 "Hello"。注意这里的 "Hello" 与 str1​ 的 "hello" 只有首字母大小写不同。

  3. ​if [ $str1 = $str2 ]; then​

    • 使用 if​ 语句来比较 str1​ 和 str2​ 的值。[ $str1 = $str2 ]​ 是一个测试表达式,用于检查两个变量的值是否完全相同,包括大小写。

    • 在这里,由于 str1​ 和 str2​ 的值在大小写上有差异,所以这个条件为假。

  4. ​echo True​

    • 如果 str1​ 和 str2​ 的值相等,那么 if​ 语句的条件为真,执行 echo True​ 命令,输出字符串 "True"。

    • 但由于大小写的差异,这个命令实际上不会被执行。

  5. ​else​

    • 如果 if​ 语句的条件为假(即 str1​ 和 str2​ 的值不相等),则执行 else​ 后面的代码块。

  6. ​echo false​

    • 在 else​ 代码块中,执行 echo false​ 命令。由于 str1​ 和 str2​ 的值不相等,这将被执行,输出字符串 "false"。

  7. ​fi​

    • ​fi​ 是 if​ 语句的结束标记,表示条件判断语句的结束。

检查两个字符串变量 str1​ 和 str2​ 是否相等。在这个例子中,因为两个变量的值在大小写上有差异,所以脚本会输出 "false"。如果 str2​ 的值被改为 "hello",那么脚本会输出 "True"。

例子3

str1="hello"
str2="Hello"
if [ -z "$str2" ];then
        echo True
else
        echo false
fi

  1. ​str1="hello"​

    • 定义一个变量 str1​,并赋值为字符串 "hello"。在这个脚本中,str1​ 并没有被用到,但它的存在并不影响脚本的执行。

  2. ​str2="Hello"​

    • 定义另一个变量 str2​,并赋值为字符串 "Hello"。

  3. ​if [ -z "$str2" ]; then​

    • 使用 if​ 语句和 -z​ 测试运算符来检查 str2​ 是否为空字符串(即长度为零)。

    • ​-z​ 运算符用于判断字符串是否为空。

    • 变量 str2​ 被双引号包围,这是一个好习惯,可以防止字符串中的空格和特殊字符被错误地解释。

  4. ​echo True​

    • 如果 str2​ 为空,那么 -z​ 测试为真,执行 echo True​ 命令,输出字符串 "True"。

  5. ​else​

    • 如果 -z​ 测试为假(即 str2​ 非空),则执行 else​ 后面的代码块。

  6. ​echo false​

    • 在 else​ 代码块中,执行 echo false​ 命令。如果 str2​ 非空,这将被执行,输出字符串 "false"。

  7. ​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

  1. ​str1="hello"​

    • 定义一个变量 str1​,并赋值为字符串 "hello"。在这个脚本中,str1​ 并没有被用到,但它的存在并不影响脚本的执行。

  2. ​str2="Hello"​

    • 定义另一个变量 str2​,并赋值为字符串 "Hello"。

  3. ​if [ -n "$str2" ]; then​

    • 使用 if​ 语句和 -n​ 测试运算符来检查 str2​ 是否非空(即长度不为零)。

    • ​-n​ 运算符用于判断字符串长度是否大于零。

    • 变量 str2​ 被双引号包围,这是一个好习惯,可以防止字符串中的空格和特殊字符被错误地解释。

  4. ​echo True​

    • 如果 str2​ 非空,那么 -n​ 测试为真,执行 echo True​ 命令,输出字符串 "True"。

  5. ​else​

    • 如果 -n​ 测试为假(即 str2​ 为空),则执行 else​ 后面的代码块。

  6. ​echo false​

    • 在 else​ 代码块中,执行 echo false​ 命令。如果 str2​ 为空,这将被执行,输出字符串 "false"。

  7. ​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

  1. num1=9​

    • 定义一个变量 num1​,并赋值为数字9。

  2. ​# num2=19 (如果后续不需要用到num2,可删除这一行)​

    • 这是一个注释行,表示如果脚本中不需要用到变量 num2​,那么可以删除定义 num2​ 的这行代码。在这段代码中,num2​ 被注释掉了,所以它不会影响脚本的执行。

  3. ​if [ "$num1" != "9" ]; then​

    • 使用 if​ 语句来比较 num1​ 的值是否不等于9。[ "$num1" != "9" ]​ 是一个测试表达式,用于检查 num1​ 的值是否不等于9。

    • 注意:在Bash中,进行数值比较时,应该使用 -ne​ 而不是 !=​。!=​ 用于字符串比较,而 -ne​ 用于数值比较。

  4. ​echo num1不等于9​

    • 如果 num1​ 的值不等于9,那么 if​ 语句的条件为真,执行 echo num1不等于9​ 命令,输出字符串 "num1不等于9"。

  5. ​else​

    • 如果 if​ 语句的条件为假(即 num1​ 的值等于9),则执行 else​ 后面的代码块。

  6. ​echo num1等于9​

    • 在 else​ 代码块中,执行 echo num1等于9​ 命令。如果 num1​ 的值等于9,这将被执行,输出字符串 "num1等于9"。

  7. ​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
      
  1. ​num1=9​

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

  2. ​num2=19​

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

  3. ​# 使用 -a 作为逻辑与运算符来正确连接两个条件,并给变量加上双引号确保正确​

    • 这是一个注释行,解释了接下来的 if​ 语句中将使用 -a​ 作为逻辑与(AND)运算符来连接两个条件。同时,建议在变量周围使用双引号,以确保变量的值被正确解释,特别是当值中包含空格或特殊字符时。

  4. ​if [ "$num1" != "9" -a "$num2" -lt "20" ]; then​

    • 这是一个 if​ 语句,用于检查两个条件是否同时满足:

      • ​"$num1" != "9"​:检查 num1​ 是否不等于9。由于 num1​ 被赋值为9,这个条件为假。

      • ​-a​:逻辑与运算符,表示两个条件必须同时满足。

      • ​"$num2" -lt "20"​:检查 num2​ 是否小于20。由于 num2​ 被赋值为19,这个条件为真。

    • 由于 -a​ 运算符连接了两个条件,只有当两个条件都为真时,整个条件表达式才为真。

  5. ​echo True​

    • 如果 if​ 语句的条件为真(即两个条件都满足),则执行 echo True​ 命令,输出字符串 "True"。

  6. ​else​

    • 如果 if​ 语句的条件为假(即至少有一个条件不满足),则执行 else​ 后面的代码块。

  7. ​echo False​

    • 在 else​ 代码块中,执行 echo False​ 命令,输出字符串 "False"。

  8. ​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
  1. 定义变量 num1​ 并赋值为9。

  2. 定义变量 num2​ 并赋值为19。

  3. 使用 if​ 语句和 -o​ 运算符来检查两个条件中的任意一个是否满足:

    • ​"$num1" != "9"​ 检查 num1​ 是否不等于9。

    • ​-o​:逻辑或运算符,表示两个条件中只要有一个为真,整个条件表达式就为真。

    • ​"$num2" -lt "20"​ 检查 num2​ 是否小于20。

  4. 如果任一条件满足,执行 echo True​ 命令,输出字符串 "True"。

  5. 如果两个条件都不满足,则执行 else​ 后面的代码块,输出 "False"。

  6. ​fi​ 结束 if​ 语句。

因为 num2​ 等于19,小于20,所以第二个条件 "$num2" -lt "20"​ 满足。因此,即使第一个条件 "$num1" != "9"​ 不满足(因为 num1​ 等于9),脚本也会执行 if​ 代码块,并输出 "True"。这是因为使用了 -o​ 运算符,只要有一个条件为真,整个条件表达式就为真。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值