如何编写if then语句,以便在这些变量之间切换,例如:
if(switch){
server_var_shortname=$server_shared_shortname
server_var=$server_shared
server_var_bare=$server_shared_bare
} else {
server_var_shortname=$server_vps_shortname
server_var=$server_vps
server_var_bare=$server_vps_bare
}
Run Code Online (Sandbox Code Playgroud)
我不熟悉bash语法,基本上只需要布尔值上的if / else语句。还可以这样使用true / false值吗?另外我该怎么做else语句?
$switch=true;
if $switch
then
server_var_shortname=$server_shared_shortname
server_var=$server_shared
server_var_bare=$server_shared_bare
fi
Run Code Online (Sandbox Code Playgroud)
首先,shell(包括bash)没有布尔值;他们甚至没有整数(尽管它们可以伪造)。通常,它们具有字符串。bash也有数组...字符串。伪造布尔值的方法有很多种。我最喜欢的是使用字符串“ true”和“ false”。这些也恰好分别是总是成功和失败的命令的名称,它们之所以派上用场,是因为该if语句实际上接受命令,then如果成功则运行该子句,如果else失败则运行该子句。因此,您可以“运行”布尔值,如果将其设置为“ true”,则将成功,如果将其设置为“ false”,则将失败。像这样:
switch=true # This doesn't have quotes around it, but it's a string anyway.
# ...
if $switch; then
server_var_shortname=$server_shared_shortname
server_var=$server_shared
server_var_bare=$server_shared_bare
else
server_var_shortname=$server_vps_shortname
server_var=$server_vps
server_var_bare=$server_vps_bare
fi
Run Code Online (Sandbox Code Playgroud)
请注意,您会看到的更常见的格式if有方括号,例如if [ something ]; then。在这种情况下,[实际上是一个将其参数作为表达式求值的命令(不是某种有趣的分组运算符)。因此,这[ "some string" = "some other string" ]是一条由于字符串不相等而失败的命令。您可以使用if [ "$switch" = true ]; then,但我更喜欢直接作弊并使用伪布尔值。
警告:如果您确实使用了我建议的作弊功能,请确保将“布尔值”变量设置为“真”或“假”,而不是未设置,也不要设置为其他值。如果设置为其他任何值,我对结果不承担任何责任。
其他一些语法说明:
$在获取变量值时使用,而不是在分配变量时使用。您在$switch=true;那里,这将使您出错。该[命令(也称为test)具有一种怪异的语法。通常是因为它是一条命令,所以它会经历通常的命令解析,因此例如[ 5 > 19 ]将解析结果[ 5 ]与发送到名为“ 19”的文件的输出一样解析(然后为true,因为“ 5”是非空白的)。[ 5 ">" 19 ]更好,但仍进行计算,因为>会进行字符串(字母)比较,并且“ 5”按字母顺序在“ 19”之后。[ 5 -gt 19 ]做预期的事情。
还有[[ ]](相似但更简洁的语法,并非在所有shell中都可用)和(( ))(对于数学,不是字符串;也不是在所有shell中都适用)。参见BashFAQ#31。