![Linux系统编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/388/47491388/b_47491388.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.2.2 实践步骤
在该范例中,我们将编写一个小型的shell脚本,以演示返回值的作用、如何读取返回值以及如何解释返回值。让我们开始吧:
1.在编写代码之前,我们必须研究脚本中程序会使用哪些返回值。执行以下命令,并记录得到的返回值。test命令是一个小型实用程序,用于测试某些条件是否成立。在这个例子中,我们将使用test命令来检测一个文件或目录是否存在。选项-e表示存在。test命令不会给我们任何输出信息,它只是以某个返回值退出:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/40_01.jpg?sign=1739313593-hJG2PtsEZKqRaf2ThCNQmKwjr9VTIdfE-0-3d985a2a1e7e1ce19fd0ffa2877dd63a)
2.现在,我们知道test程序会返回哪些值了(0表示文件或目录存在,除此之外,返回1),我们可以开始编写脚本了。在一个文件中编写以下代码,并将文件保存为exist.sh。你也可以通过访问https://github.com/PacktPublishing/Linux-System-Programming-Techniques/blob/master/ch2/exist.sh下载代码文件。该shell脚本使用test命令检测一个指定的文件或目录是否存在:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/41_01.jpg?sign=1739313593-IN2hALJio3CWCuumIq1rlb6qX3pfFCER-0-84f6513b81585861803dde54e5e04a8b)
3.你需要执行以下命令为shell脚本添加可执行权限:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/41_02.jpg?sign=1739313593-UrhS91FdGKqP8vMmnexgeZzjLwB7eQnO-0-4e82685dcd1b748269d42e66c023d0c9)
4.尝试运行脚本。我们尝试使用已存在的目录和不存在的目录运行脚本。我们还会在每次脚本运行后检查其退出码:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/41_03.jpg?sign=1739313593-y4NbQScSpRF7sMPMtChsFJCU3F5IpqJH-0-96019fd576685c3a255c95f0733823bd)
5.现在,我们知道该脚本可以正常工作,并且能够返回正确的退出码。我们可以编写一行程序来使用这个脚本。例如,通过echo命令打印一行文字以描述文件或目录是否存在:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/42_01.jpg?sign=1739313593-6H8EVony6pag37FeIqVQXChYt4ZOPGys-0-6b2f4c16534a9d93c8a8ba403cff096d)
6.我们还可以编写一个更复杂的一行程序—利用脚本中一个特殊的错误码3,该错误码表示“文件未发现”。请注意,你不需要在第二行起始位置输入>。当你在第一行结束位置添加反斜杠时,shell会自动插入这个字符,表示继续编辑一个较长的行:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/42_02.jpg?sign=1739313593-K52XudZ40Lq53ZUhdbcXm2kn01bjPt9y-0-42f700681b2f0253c133fc471ffbc8c6)