最初if/then
でreturn
のステートメントを追加します。
function start_vi()
{
echo "Please enter a file name with complete path to open in vi:"
read input_file
if [ -d "$input_file" ]
then
echo "You entered a directory."
echo "Please try again and enter a readable/writable file."
return
fi
grep_var="file $input_file | grep -c data"
if [ $? -eq 0 ]
then
vi $input_file
else
echo "File not found or invalid file type. Please try again."
fi
}
をそれ以外の場合は、印刷してから開きますとにかく、あなたの2番目のテストは次のようになります:
file $input_file | grep -c data
if [ $? -eq 0 ]
$?
は、最後に実行したコマンドの終了コードです。変数(つまりgrep_var="..."
)に割り当てると$?
が0に設定されます。終了コードはgrep -c data
です。その場合、以下のようにコマンドを実行するには引用符ではなくバッククォートを使用します。この:
grep_var=`file $input_file | grep -c data`
if [ $grep_var != 0 ]
文字列値を比較する(つまり、何grep -c data
リターン - data
行数)あなたはループを必要とする
上記の問題を解決する必要がありますのいくつかを行う
良いアドバイスをありがとう。リターンはうまくいき、まさに私が望んでいたものでした。奇妙なことに、目盛りを付け加えて '$ grep_var!= 0'テストをしても、別のシェルスクリプトのように有効なファイルを入力したときに結果が得られませんでした。だから私はどのように私はそれを(あなたのリターンで)持っていたに戻り、それは私がそれをしたい方法で動作しています。 – nicorellius
奇妙な - これは期待どおりに動作するはずです。 'a'という名前のファイルがないところでこれを試してみましょう:echo hello> a; if ['grep -c hello a'!= 0];エコーがあります。 fi –
それは印刷されました: 'There is hello'。おそらく私はその部分をコーディングするときにエラーを出しました。私はもう一度やり直します。 – nicorellius