私のbashスクリプトの1つは、if
これら2つのファイルのいずれかが存在することを確認し、存在しない場合は一致を再表示する必要があります。
コードがあります。
if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then
echo "match"
fi
しかし、これは何らかの理由で動作しないようです。
私はこれら2つのファイルが存在しないと110%確信しています。エラーは発生せずif
。
私はbashスクリプトに初めて触れたので、何が間違っているのかわかりません。
答え1
欲しいなら誰でもまあ、あなたが望むものではOR
ありませんAND
。
if [[ ! -f /etc/benchmarking/code ]] || [[ ! -f /etc/benchmarking/code.class ]]; then
echo "match"
fi
- 一方または両方のファイルが見つからない場合は一致します。
match
あなたのコードは、次の場合にのみコードを印刷します。両方存在しない。
しかし、、そう言います:
私はこれら2つのファイルが存在しないと110%確信しています。エラーは発生せず、ifを入力しません。
だからあなたの声明は矛盾しています。ファイルの少なくとも1つ〜しなければならない存在する、もしあなたは走っているそれパスワード。
if
文がどのように評価されるかを見るには、run itを使用してください-x
。
#!/bin/bash -x
if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then
echo "match"
fi
これで実行プロセスを確認できます。
$ ./test.sh
+ [[ ! -f /etc/benchmarking/code ]]
+ [[ ! -f /etc/benchmarking/code.class ]]
+ echo match
match
$
答え2
こんなことはありませんか? Aはファイル、Bはファイル、blablaです。
if [[ -f /etc/benchmarking/code ]] || [[ -f /etc/benchmarking/code.class ]];
then
echo "match"
fi
答え3
これはあなたがしたいことにも適しているかもしれません。今日、単一の括弧は、あまり一般的ではありませんが、bash
まだオプションです。使用は-o
実際には「OR」演算であり、!
条件を無効にします。
var=/etc/benchmarking/code
[ ! -f "$var" -o ! -f "$var.class" ] && echo "match"
答え4
match
コードは目的のアクションを実行します。ファイルが見つからない場合は印刷します。
match
だから印刷しない理由は別の場所にあります。複数のデバッグメッセージでコードブロックを囲み、完了できるコードブロックに到達したことを確認する必要があります。たとえば、次のようになります。
echo '@ About to enter if...fi block'
if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then
echo "match"
fi
echo '@ Finished if...fi block'
私が一般的に好むのはデバッグメッセージです標準エラーデータフローが中断されないように標準出力ところで、ここではあなたが初心者と言ったのでそれを避けました。以下は、作成方法を示す例です。標準エラー:
echo '@ About to enter if...fi block' >&2