许多程序要求对shell脚本中的命令施加一些逻辑流程控制。有一类命令会根据条件使脚本跳过某些命令。这样的命令通常称为结构化命令(structured command)。
结构化命令允许你改变程序执行的顺序。在bash shell中有不少结构化命令,基本的结构化命令就是if-then语句,if-then语句有如下格式。
if command
then
commands
fi
如果你在用其他编程语言的if-then语句,这种形式可能会让你有点困惑。在其他编程语言中,if语句之后的对象是一个等式,这个等式的求值结果为TRUE或FALSE。但bash shell的if语句并不是这么做的。
bash shell的if语句会运行if后面的那个命令。如果该命令的退出状态码是0 (该命令成功运行),位于then部分的命令就会被执行。如果该命令的退出状态码是其他值,then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。fi语句用来表示if-then 语句到此结束。
为了让大家更好的解释这个概念,南昌网络公司-百恒网络用以下例子向大家说明一下:
$ cat test1.sh
#!/bin/bash
# testing the if statement
if pwd
then
echo "It worked"
fi
$
这个脚本在if行采用了pwd命令。如果命令成功结束,echo语句就会显示该文本字符串。在 命令行运行该脚本时,会得到如下结果。
$ ./test1.sh
/home/Christine
It worked
$
shell执行了if行中的pwd命令。由于退出状态码是0,它就又执行了then部分的echo语句。
以下是本公司要举的另外一个例子。
$ cat test2.sh
#!/bin/bash
# testing a bad command
if IamNotaCommand
then
echo "It worked"
fi echo "We are outside the if statement"
$
$ ./test2.sh
./test2.sh: line 3: IamNotaCommand: command not found
We are outside the if statement
$
在这个例子中,我们在if语句行故意放了一个不能工作的命令。由于这是个错误的命令,所以它会产生一个非零的退出状态码,且bash shell会跳过then部分的echo语句。还要注意,运行 if语句中的那个错误命令所生成的错误消息依然会显示在脚本的输出中。有时你可能不想看到错误信息。
在then部分,你可以使用不止一条命令。可以像在脚本中的其他地方一样在这里列出多条命令。bash shell会将这些命令当成一个块,如果if语句行的命令的退出状态值为0,所有的命令都会被执行;如果if语句行的命令的退出状态不为0,所有的命令都会被跳过。
$ cat test3.sh
#!/bin/bash
# testing multiple commands in the then section
#
testuser=Christine
#
if grep $testuser /etc/passwd
then
echo "This is my first command"
echo "This is my second command"
echo "I can even put in other commands besides echo:"
ls -a /home/$testuser/.b*
fi
$
if语句行使用grep命令在/etc/passwd文件中查找某个用户名当前是否在系统上使用。如果有用户使用了那个登录名,脚本会显示一些文本信息并列出该用户HOME目录的bash文件。
$ ./test3.sh
Christine:x:501:501:Christine B:/home/Christine:/bin/bash
This is my first command
This is my second command
I can even put in other commands besides echo:
/home/Christine/.bash_history /home/Christine/.bash_profile
/home/Christine/.bash_logout /home/Christine/.bashrc
$
但是,如果将testuser变量设置成一个系统上不存在的用户,则什么都不会显示。
$ cat test3.sh
#!/bin/bash # testing multiple commands in the then section
#
testuser=NoSuchUser
#
if grep $testuser /etc/passwd
then
echo "This is my first command"
echo "This is my second command"
echo "I can even put in other commands besides echo:"
ls -a /home/$testuser/.b*
fi
$
$ ./test3.sh
$
看起来也没什么新鲜的。如果在这里显示的一些消息可说明这个用户名在系统中未找到,这样可能就会显得更友好。
以上就是百恒网络为大家介绍的关于linux命令行中if-then 语句的使用方法,不知道大家对于这一概念是否有了一定的了解,如果还不是很明白的朋友可在看一遍,或者来电和我们联系,本公司专业为您讲解。作为一家优秀的南昌网络公司之一,百恒网络自公司成立以来,一直坚持以人为本,诚信经营,主要服务有网站建设、微信开发、APP开发等,经过十多年的努力奋斗,百恒网络在业界获得了广大用户朋友的一直好评,良好口碑满口相传,大家如果有需要我们服务的地方,可随时来电和我们联系,百恒随时为您效劳!