Bashでどのようにこれを行うことができますか?
if "`command` returns any error";
then
echo "Returned an error"
else
echo "Proceed..."
fi
答え1
コマンドが成功または失敗した場合に条件付きで操作を実行する方法
これが bashif
文が何をするのかです。
if command ; then
echo "Command succeeded"
else
echo "Command failed"
fi
コメントから情報を追加する:あなたいいえこの場合...構文を使用する必要があります[
。はそれ自体とほぼ同じコマンドです。おそらく最も一般的に使用されるコマンドなので、シェル構文の一部であると仮定できます。ただし、コマンドが成功したかどうかをテストするには、上記のようにコマンド自体を一緒に使用します。]
[
test
if
if
答え2
シェルコマンドが機能しているときに発生したい小さな作業の場合は、次の設定を&&
使用できます。
rm -rf somedir && trace_output "Removed the directory"
同様に、シェルコマンドが失敗したときに発生したい小さな作業には、次のものを使用できます||
。
rm -rf somedir || exit_on_error "Failed to remove the directory"
または両方
rm -rf somedir && trace_output "Removed the directory" || exit_on_error "Failed to remove the directory"
このような構造であまりにも多くのことを行うことは賢明ではないかもしれませんが、時には制御フローをより明確にすることができます。
答え3
$?
最新のコマンド/関数の実行結果を含むselected値:
#!/bin/bash
echo "this will work"
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo success
else
echo failed
fi
if [ $RESULT == 0 ]; then
echo success 2
else
echo failed 2
fi
答え4
if...then...fi
および&&
/メソッドタイプは、||
テストしたいコマンドによって返された終了ステータス(成功時0)を処理しますが、コマンドによって失敗した場合や入力を処理できない場合は、ゼロ以外の終了ステータスを返しません。これは、一般的なメソッドif
および&&
/||
メソッドがこれらの特定のコマンドでは機能しないことを意味します。
たとえば、Linuxでは、file
GNUは存在しないファイルを引数として受け取り、指定したfind
ファイルが見つからない場合でも0で終了します。
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
この場合、この状況を処理する可能性のある方法の1つは、コマンドから返されたメッセージなどのメッセージをstderr
読み取るか、コマンドの出力を解析することです。この目的のためにステートメントを使用できます。stdin
file
find
case
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found