我正在为我已经继承的dash
shell脚本组合一些单元测试,并且考虑到我们想要添加的大量次测试,我想要尽可能简洁。
为此,我添加了check
辅助函数来处理测试的通过或失败。它基本上从前一个命令接收返回代码$?
,并基于此传递或失败测试。这允许我简单地实现单线测试(其中有许多):
for td in 1.1.1.999 {{lots of other invalid IPs}} ; do
isInvalidIpV4 ${td} ; check is-true $? "Checking ${td} is invalid"
done
for seg in 0 1 9 10 99 100 254 255 ; do
td="${seg}.${seg}.${seg}.${seg}"
isInvalidIpV4 ${td} ; check is-false $? "Checking ${td} is valid"
done
现在这是相当不错的,因为它将每个测试都归结为一行但是,在我的OCD追求完美的过程中,我想知道是否还有更多的缩减范围。
我知道,就像bash
一样,有能力在另一个命令中运行命令并使用其输出,如下所示:
echo "Lowercase name is $(echo PaxDiablo | tr '[A-Z]' '[a-z]')"
但我想知道是否有办法用命令的返回代码进行相同的替换。
这意味着我的测试线将能够重复$?
被删除,改为:
isInvalidIpV4 ${td} ; check pass $? "${td} should be invalid"
类似于:
check pass $[isInvalidIpV4 ${td}] "${td} should be invalid"
其中$[]
是神话般的"使用返回代码"替代算子。
dash
是否具有此功能,或者是否有比我目前所做的更简洁的方式?
请记住,其他shell不是一个选项,这是一个嵌入式系统,dash
是唯一提供的shell。
答案 0 :(得分:0)
if ! isInvalidIpV4 $td
then
echo $td should be invalid
fi