我对 Ubuntu Linux 还很陌生,可以说对整个 Linux 都陌生,因为我几天前才安装它。我很抱歉我的英语使用有误,因为我住在荷兰。
我尝试进行一些编程,编写一个脚本,但遇到了一个我至今无法解决的问题。我正在编写一个脚本,我希望这个脚本能自动为我安装一些东西。我尝试尽可能少地嵌套,并完成了我的脚本,但我想。我为什么不尝试在其中添加几行来检查程序是否正确安装。所以我想知道我该怎么做,我想到了以下方法:
因为我是编程新手,所以我希望编程尽可能先进。所以我决定尝试使用 shell 函数。这些函数检查是否存在正确的文件,并且这些函数的结果必须是我以后可以使用的值。下面是一个例子:
function isitthere
{
if [ -f <thefile> ]; then
true
else
false
fi
}
if [ $(isitthere) = "true" ]; then
echo "Your program is properly installed"
else
echo "Your program isn't properly installed.
fi
在这个例子中,我的值是 true 和 false,正如您所见,我尝试在第二个命令中重新使用它们。我知道这可以更轻松地完成,但我想知道这是否可行,以及如果可行,如何做。因为在我的脚本的一部分中,这样做会更容易。您是否有办法为 if 命令赋值,并在下一个 if 命令中使用该值?谢谢。
答案1
保持简单;这可以正常工作(在 Ubuntu 12.04 中测试):
#!/bin/bash
function isitthere
{
[ -f TheFile ]
}
if isitthere; then
echo "Your program is properly installed."
else
echo "Your program isn't properly installed."
fi
答案2
有很多方法可以做到这一点。
使用 shell 的内置功能。命令(和函数)有退出值。通常,退出值为 0 表示命令成功,值 > 0 表示命令失败。使用
||
或&&
运算符时,shell 会检查这一点。因此,如果要仅在前一个命令成功时运行命令,您可以使用&&
, 来运行它除非上一步成功后,您可以使用||
。例如:$ foo The last command was succesful echo 'foo' && echo "The last command was succesful"
如果你使用不存在的命令,它显然会失败:
$ echooo 'foo' && echo "The last command was succesful" echooo: command not found
请注意,第二条消息不会被打印。如果您改用
||
:$ echooo 'foo' || echo "The last command failed" echooo: command not found The last command failed
你可以将它们组合到你的 shell 函数中:
function isitthere { [ -f thefile ] } isitthere && echo "The file exists" || echo "the file does not exist"
运算
test
符(也称为[ ]
)在成功时返回退出值 0,在失败时返回 1。这意味着您的函数可以简化为上述内容。使用
return
命令。这实际上与上面的例子完全相同,我只是更明确地说明。它还允许您针对不同的失败情况返回更复杂的值。function isitthere { if [ -f <thefile> ]; then return 0 else return 1 fi } if [ $(isitthere) ]; then echo "Your program is properly installed" else echo "Your program isn't properly installed. fi
我使用了与你相同的语法来说明,但可以缩短为
isitthere && echo "Your program is properly installed" || echo "Your program isn't properly installed."
让你的函数打印一些内容到标准输出,然后采取相应的行动。
function isitthere { [ -f thefile ] && echo yes || echo no } if [ $(isitthere) = "yes" ]; then echo "Your program is properly installed" else echo "Your program isn't properly installed." fi
在此示例中,我们使用函数的标准输出,而不是其返回值。要捕获命令(或函数)的输出,您需要使用命令替换。这允许您运行命令并将输出保存为变量。例如
$ foo=$(echo bar) $ echo $foo bar
因此,测试
if [ $(isitthere) = "yes" ]
检查输出的功能yes
并采取相应的行动。
请注意,我使用了两者[ -f thefile ] && echo yes || echo no
,以及更复杂的
if [ -f <thefile> ]; then
return 0
else
return 1
fi
两者基本相同,我使用两者只是为了说明这一点。你可以使用你喜欢的任何一个。
答案3
欢迎荷兰同胞!
你可以使用这样的方法:
result=isitthere
在这里,您将函数的返回值分配isitthere
给变量result
。在本例中,此变量现在包含true
或。您可以随时使用false
检索值。result
$result
但是,如果您想捕获函数的输出(STDOUT)(例如,如果您echo
在函数内部使用),您应该使用:
result=$(isitthere)