2017-05-11 5 views
0

私の問題を助ける必要があります。私はシェルスクリプトを作る必要がある ...rmシェルで他の人にlinux

これは、それが私の考え

if [ rm -r -f /directorie ]; then  
    code  
else  
    code  
fi 
... 

どのように私ができるのか?

+0

は、あなただけの場合のrm -rf /ディレクトリ 'にあなたの状態を変更しますか。その後? –

+1

'rm -r -f/directorie = trueの場合、あなたがちょうど投稿した解決策。ディレクトリが存在し、削除されたか否かにかかわらず、このテストは常に「真」に等しくなるため、正しいとは言えません。私の答えをチェックして、それはあなたが探しているものに適しているかもしれません。 –

+0

'rm -f'はコマンドが働いたかどうかにかかわらず常に' 0'を返します。 '-f'を指定しないと、' stderr'にメッセージを書き込み、エラー時にはゼロ以外の値を返します。 – alvits

答えて

0

このコードは、あなたが望むものを達成することができる:

#!/bin/bash 

rm -r /directorie > /dev/null 2>&1; rc="$?" 
if [ "$rc" -eq "0" ]; then 
    # code here 
else 
    # code here 
fi 

注:rm -rf /directorieので、それはifテストに適していない、常にリターンコード= 0(true)を返します(オプションf付き)。

編集:この答えはbashワンライナーに凝縮することができます。

rm -r /home/owner/scripts > /dev/null 2>&1 && code here (true) || code here (false) 
+3

そのユーザーにディレクトリを削除する権限がない場合はどうなりますか?ディレクトリが存在するかどうかをチェックし、ディレクトリの再帰的な削除が成功したかどうかを確認することは、全く異なる2つのことです。 – alvits

+0

あなたは正しいことを指摘してくれてありがとうございます。最初に私はディレクトリテストが存在しない場合にはディレクトリを削除しないという唯一の理由 'rm -rf'が(私が思ったように)試行されていたものに対して非常に良いプロキシになると考えました。私の危険な仮定!確かに、許可、そしておそらく他のもの!私は答えを修正しました。コメント歓迎。 –

0
dir=/directory 
test -d "${dir}" && rm -rf "${dir}" && ! test -d "${dir}" && echo OK || echo NOK