尝试使用脚本实现以下目标,但没有成功
如果提供了变量值,则将其用于进一步的步骤,否则导出执行写入文件的脚本的值并将其用于进一步的步骤
#!/bin/bash
if [[ -z "$VER" ]] then
echo "VER not provided; Deriving value from INT"
./get_ver.rb > VER
endif
echo "VER=$VER" > VER
答案1
一些常见的习惯用法(在任何 POSIX shell 中,而不仅仅是,因此在脚本中也bash
可以安全使用):sh
VER=${VER-$(./get_ver.rb)}
或者:
: "${VER=$(./get_ver.rb)}"
${VER-value}
$VER
扩展为if已设置的内容$VER
(甚至扩展为空值),否则扩展为value
其他内容。
${VER=value}
:相同,但value
也分配给先前未设置的$VER
条件。$VER
请注意,您[[ -z $VER ]]
检查的是内容是否$VER
为空,而不是是否$VER
已设置。如果$VER
设置了,但是为空值,它仍然会返回true。您可以[ -z "${VER+yes}" ]
(这里使用[
标准命令而不是[[...]]
Korn 构造,尽管您也可以使用[[...]]
)来检查是否$VER
已设置。另一种不太明显的方法是使用${VER+:} false
.
答案2
您的脚本包含多个语法错误。
这是一个固定版本:
#!/bin/bash
if [[ -z "$VER" ]]; then
echo "VER not provided; Deriving value from INT"
VER="$( ./get_ver.rb )"
fi
echo "VER=$VER" >VER
请注意- 语句;
之前then
和fi
结束if
。
要将命令的输出存储在变量中,请$(...)
按上述方式使用。
使用外壳检查检查你的 shell 脚本。