我有一些Unix shell脚本,我需要在开始做之前检查某些环境变量是否已设置,所以我做了这样的事情:
if [ -z "$STATE" ]; then
echo "Need to set STATE"
exit 1
fi
if [ -z "$DEST" ]; then
echo "Need to set DEST"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
这是很多打字.是否有更优雅的习惯用于检查是否设置了一组环境变量?
编辑:我应该提到这些变量没有有意义的默认值 - 如果有任何未设置,脚本应该出错.
我正在编写一个脚本,我需要在几个地方使用文件测试的输出,包括shell函数内部.我想将文件存在分配给shell变量,如下所示:file_exists=[ -f $myfile ].
为了确保我已经覆盖了我的基础,我首先触摸一个文件,并测试它的存在:
file='a'
touch $file
if [ -f $file ]
then
echo "1 -- '$file' exists"
fi
Run Code Online (Sandbox Code Playgroud)
输出:
1 -- 'a' exists
Run Code Online (Sandbox Code Playgroud)
该文件已成功创建 - 没有惊喜,但至少我知道我没有处理任何权限问题或任何事情.
接下来我测试以确保我可以在变量中存储布尔表达式:
mytest=/bin/true
if $mytest
then
echo "2 -- \$mytest is true"
fi
Run Code Online (Sandbox Code Playgroud)
输出:
2 -- $mytest is true
Run Code Online (Sandbox Code Playgroud)
所以,我已经掌握了一些基本覆盖-条件表达式应该发出相同的输出/bin/true或/bin/false...但是这不是我所看到的:
mytest=[ -f $file ]
if $mytest
then
echo "3 -- \$mytest is true [expect true]"
else
echo "3 -- \$mytest is false [expect true]"
fi
Run Code Online (Sandbox Code Playgroud)
此操作失败,并显示以下错误:
-f: …Run Code Online (Sandbox Code Playgroud)