当前位置: 首页 > 科技观察

如何在Bash脚本中使用强大的Linux测试命令

时间:2023-03-18 19:25:27 科技观察

Linux测试命令是一个shell内置命令,用于测试某个条件是否为真。test通常与if语句一起使用,大多数if语句都依赖于test。可以将一个元素与另一个元素进行比较,但它更常用于BASHshell脚本中作为控制逻辑和程序流的条件语句的一部分。test命令有很多选项,可用于检测值、字符串和文件。在终端窗口中尝试这些命令的基本示例。linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?test1-eq2&&echo"yes"||echo"no"nolinuxmi@linuxmi/home/linuxmi/www.linuxmi.com?test1-eq1&&echo"yes"||echo"no"yes上面的命令分解如下:test:执行比较的命令1:要比较的第一个元素。在此示例中,它是数字1,但它可以是任何数字,或引号内的字符串。-eq:比较法。在这种情况下,您要测试一个值是否等于另一个值。2:您正在比较第一个元素的元素。在此示例中,它是数字2。&&:用于按顺序将命令链接在一起的Linux快捷方式。测试链输出到后续命令。当前面的命令的退出状态为0时,将执行双符号,这是表示命令没有失败的奇特方式。echo"yes":如果比较成功则运行命令。在这种情况下,我们所做的只是要求echo命令将单词“yes”打印到标准输出,但如果测试结果为真,您可以在这里运行将执行的任何命令。||:在某种程度上,与&&;完全相反双管道仅在其前面的命令失败(退出状态不为0)时才执行。echo"no":比较不匹配时运行的命令。提示:从shell提示符运行,测试不会向标准输出返回值,它只返回退出状态代码。这就是为什么您需要链接echo命令的原因。本质上是一样的,该命令比较1和2,如果匹配,则执行echo"yes"语句并显示"yes",如果不匹配,则执行echo"no"语句,显示"no"。比较数字如果要比较解析为数字的元素,可以使用以下比较运算符:-eq:value1等于value2-ge:value1大于或等于value2-gt:value1大于value2-le:value1小于或等于value2-lt:value1小于value2-ne:value1不等于value2exampletesttest1-eq2&&echo"yes"||echo"no"(在屏幕上显示"no"因为1不等于2)test1-ge2&&echo"yes"||echo"no"(在屏幕上显示"no"因为1不大于等于2)test1-gt2&&echo"yes"||echo"no"(在屏幕上显示"no"因为1不大于2)test1-le2&&echo"yes"||echo"no"(在屏幕上显示"yes"因为1小于或等于2)test1-lt2&&echo"yes"||echo"no"(在屏幕上显示"yes"因为1小于等于2)test1-ne2&&echo"yes"||echo"no"(in"yes"isdisplayedonthescreenbecause1doesnotequal2)Whencomparisontextwhencomparingelementsparsedasstrings,usethefollowingcomparisonoperators:=:string1matchesstring2!=:string1matchesstring2Nomatch-n:字符串长度大于0-z:字符串长度等于0例子test"string1"="string2"&&echo"yes"||echo"no"(在屏幕上显示"no"因为"string1"不等于"string2")test"string1"!="string2"&&echo"yes"||echo"no"(在屏幕上显示"yes"因为"string1"不等于"string2")test-n"string1"&&echo"yes"||echo"no"(在屏幕上显示"yes"因为"string1"的字符串长度大于零)test-z"string1"&&echo"是"||echo"no"(在屏幕上显示"no"因为"string1"的字符串长度大于零)比较文件比较文件时,使用以下比较运算符:-ef:filehavethesamedeviceandinodenumber(theythey是同一个文件)-nt:第一个文件比第二个文件新-ot:第一个文件比第二个文件旧-b:文件存在并且是块特殊-c:文件存在并且是字符特殊-d:文件存在并且是一个目录-e:文件存在并且是一个普通文件-g:文件存在并且有一个指定的组号-G:文件存在并且属于用户组-h或-L:文件存在并且是一个符号链接-k:文件存在并且设置了粘滞位-O:文件存在并且您是所有者-p:文件存在并且是命名管道-r:文件存在并且可读-s:文件存在并且大小大于零-S:文件存在并且是一个套接字-t:在终端上打开文件描述符-u:文件存在并且设置了set-user-id位-w:文件存在并且是可写的-x:文件存在并且是可执行的例子?testlinuxmi-ntlinux&&echo"yes"(如果linuxmi比linux新,会显示"yes"字样,如上所示)?test-e/home/linuxmi/linuxmi&&echo"yes"(显示"yes"iflinuxmiexists)test-O/home/linuxmi/linuxmi&&echo"yes"(shows"yes"ifyouhavefile1)blockspecial:该文件是一个块设备,这意味着数据以字节块的形式读取这些通常是设备文件,如硬盘驱动器。特殊字符:文件一写入文件就会立即执行,通常是串口之类的设备比较多个条件到目前为止一切正常您正在将一件事与另一件事进行比较,但是如果您想比较两个条件怎么办?例如,如果一种动物有四只脚并且发出“哞哞”的声音,它很可能是一头牛。简单简单地检查所有四条腿并不能保证您拥有一头牛,但检查它发出的声音肯定可以。要同时测试这两个条件,请使用以下语句:test4-eq4-a"moo"="moo"&&echo"itisacow"||echo"itisnotacow"这里的关键部分是-a标志,代表and。有一种更好、更通用的方法来执行相同的测试,如下所示:test4-eq4&&test"moo"="moo"&&echo"itisacow"||echo"itisnotacow"测试命令的分支很重要。如果第一个测试(4=4)失败,则测试命令以非零退出代码终止。所以,我们跳到双管道符号,“itisnotacow”被打印到标准输出。但是,如果第一个测试成功并因此导致退出代码为0,那么我们将跳转到第一个双符号(&&)。下一条语句是另一个测试条件!如果第二次测试失败,我们再次跳转到双管道并从那里继续。但是,如果第二个测试成功,我们将跳转到第二个双语句&语句,在本例中它只是将“itisacow”回显到标准输出,然后终止返回到shell提示符。另一个测试比较两个语句,如果其中一个为真,则输出一个字符串。例如,要检查名为“linuxmi.txt”的文件或名为“linuxmi.py”的文件是否存在,可以使用以下命令:这里的关键部分是-oforor。test-elinuxmi.txt-o-elinuxmi.py&&echo"linuxmi存在"||echo"linuxmidoesnotexist"有一个更好、更通用的方法来执行相同的测试,如下所示:test-elinuxmi.txt||test-elinuxmi.py&&echo"linuxmi存在"||echo"linuxmidoesnotexist"来排除test关键字你实际上不需要使用单词test来执行比较。您所要做的就是将语句括在方括号中,如下所示:?[-elinux.py]&&echo"linux.pyexists"||echo"file1doesnotexist"linux.pyexists[and]basic上面的意思和test一样。现在你知道了这一点,你可以改进比较多个条件,如下所示:[4-eq4]&&["moo"="moo"]&&echo"itisacow"||echo"这不是牛"[-elinuxmi.py]||[-elinuxmi.txt]&&echo"linuxmi存在"||echo"linuxmidoesnotexist"总结测试命令在脚本中更有用,因为您可以测试另一个变量变量的值并控制程序流程。在命令行上,使用它来测试文件是否存在。