-1

ねえ、私は以下の質問のためのいくつかのコードを持っていますが、私はそれが機能していないことに固執しており、自分が何をしているのか本当にわかりません。

このスクリプトは、dustbin ディレクトリの内容を削除する必要があります。-a オプションを使用すると、スクリプトはごみ箱からすべてのファイルを削除する必要があります。それ以外の場合、スクリプトはゴミ箱内のファイル名を 1 つずつ表示し、削除するかどうかの確認をユーザーに求めます。

#!/bin/sh

echo " The files in the dustbin are : "
ls ~/TAM/dustbin

read -p " Please enter -a to delete all files else you will be prompted to delete one    by one : " filename

read ans
if ["filename" == "-a"]
cat ~/TAM/dustbin
   rm -rf*
else
   ls > ~/TAM/dustbin
for line in `cat ~/TAM/dustbin`
do
   echo "Do you want to delete this file" $line
   echo "Y/N"
   read ans
   case "ans" in
      Y) rm $line ;;
      N) "" ;;
esac

編集版

 if test ! -f ~/TAM/dustbin/*
then
echo "this directory is empty"
else
for resfile in ~/TAM/dustbin/*
do
   if test -f $resfile ; then
   echo "Do you want to delete $resfile"
   echo "Y/N"
   read ans
   if test $ans = Y ; then 
   rm $resfile
   echo "File $resfile was deleted"
   fi
   fi
done
fi

これは機能しますが、2つのエラーのいずれかが発生します

4 行目は 2 項演算子または 4 行目: 多数の引数が必要です

4

3 に答える 3

1

明らかな間違いが 1 つあります。

rm -rf*

いつあるべきか

rm -rf *

ファイルを削除するたびに尋ねられる - -iキーを追加

rm -rfi *
于 2012-11-21T10:16:22.247 に答える
0

ここに多くの問題があります:

  • *inの前にスペースがありませんrm。シェルがワイルドカードを認識して展開できるように、スペースが必要です。

  • 現在のディレクトリ内のすべてのファイルを本当に削除しますか? rm -rf /path/to/files/*そうでない場合は、パスまたはcdディレクトリへのパスを指定しますcd /path/to/files || exit 1

  • スクリプトのロジックがわかりません。ゴミ箱を表示しますが、ユーザーがを指定-aすると、非表示でないすべてのファイル ( ls > dustbin) で上書きします。それはあなたが望むものですか?

于 2012-11-21T10:19:25.110 に答える
0

まず第一に、文字列"ans" を他の文字列case "ans" ofと照合するだけです。これは明らかに false です。 variable の値を取得する必要があります。2 つの文字列間の比較でもあり、これは常に false です。スクリプトの最初のパラメーターには as としてアクセスできます(2 番目の asなど)。case $ans ofansif ["filename" == "-a"]$1$2

シェル プログラミングの基礎を理解するために読んでくださいman 1 sh(上記の注意事項はすべてそこにあります)。

于 2012-11-21T10:22:18.753 に答える