文字列の下で条件付き演算子を比較する必要があります。したがって、特定のタスクは、81.1.4_r4345が特定のタスクを実行するか、「完了」と一致する場合にのみ実行されます。
vasanth-releases_81.1.4_r4345.tar.gz
vasanth-releases-done.tar.gz
If [[ $var == ‘vasanth-releases_{0-9}_{0-9}.tar.gz ]] ; then
echo ‘True’
Elsif [[ $var == ‘Vasanth-releases-{a-z}.tar.gz ]]; then
echo ‘False’
else
echo ‘default’
fi
上記の試みは期待どおりに機能しませんでした。したがって、これら2つのファイルには正規表現形式が必要です。この問題を解決するのに役立ちますか?
ありがとう
答え1
あなたの最終目標が何であるかはわかりませんが、あなたのコードでいくつかの問題を指摘することができます。
- シェルコマンドや組み込みコマンドには大文字を使用しないでください
If
。if
elsif
無効です。elif
- コードの編集に適していないワードプロセッサからコピーして「丸引用符」を使用した可能性があります。
- 丸い引用符を通常の引用符に変更しても、最初の条件で単一引用符を開き、2番目の条件まで再び閉じません。
=~
Bashでは、正規表現の比較には演算子ではなく演算子を使用する必要があります==
。- 中かっこは正規表現で目的を達成できないため、その範囲内のすべての文字を使用し
[0-9]
て一致させる必要があります。[a-z]
- 正規表現で括弧を変更しても、ファイルとは一致しません。 regex101.comを使用して正しい正規表現を作成できますが、bashは正規表現を拡張します。これはregex101で利用可能なオプションではありません。
答え2
このようなものをお探しですか?
#!/bin/bash
var="vasanth-releases_81.1.4_r4345.tar.gz"
if [[ $var =~ ^vasanth-releases_[0-9.]+_r[0-9]+\.tar\.gz$ ]]; then
echo ‘True’
elif [[ $var =~ ^vasanth-releases-[a-z]+\.tar\.gz$ ]]; then
echo ‘False’
else
echo ‘default’
fi
var="vasanth-releases-done.tar.gz"
if [[ $var =~ ^vasanth-releases_[0-9.]+_r[0-9]+\.tar\.gz$ ]]; then
echo ‘True’
elif [[ $var =~ ^vasanth-releases-[a-z]+\.tar\.gz$ ]]; then
echo ‘False’
else
echo ‘default’
fi