0

dash継承したシェル スクリプトの単体テストをいくつかまとめています。追加する多数のテストを考慮して、それらをできるだけ簡潔に保ちたいと考えています。

これを行う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

各テストが 1 行にまとめられるので、これはかなり良いことですが、完璧を求める私の 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"

where$[]は神話上の「リターン コードを使用する」置換演算子です。

この機能はありますかdash、それとも私が現在行っているよりも簡潔な方法はありますか?

他のシェルはここではオプションではないことに注意してください。これは、dash提供されている唯一のシェルである組み込みシステムです。

4

1 に答える 1