1

事前に TIA にお問い合わせください。これはコースワークなので、さらに読んでいただければ幸いです。

基本的に、bash で 3 つのスクリプトを作成する必要があります。私の作成のディレクトリ(〜/ごみ)にファイルを「削除」するためのもの。もう 1 つは必要に応じて復元し、3 番目は完全に削除します。

私はゴミ箱スクリプトにちょっとこだわっています。ls まだそこにあるすべてのファイルを表示するため、実際には何も削除していないようです。また、ユーザーが一度にゴミ箱に入れるように追加したフラグ (-a) にも問題があります。そうでない場合は、見つかったファイルごとに確認を求める必要があります。

今ここにいる...

#!/bin/bash
if [ "$1" = "-a" ] 
then
cd ~/rubbish
rm ~/rubbish
mkdir ~/rubbish
echo "All files have been deleted"
else
cd ~/rubbish
ls > rubbish
for line in 'cat rubbish'
do
echo "Do you want to delete?" $line
echo "Y/N"
read ans
case "ans" in
Y|y ) rm $line;;
N|n ) " ";;
esac
done
fi

私が言ったように、それは見えません -a 、最初のブランチをスキップして2番目のブランチを一見問題なく実行しますが、 ls ~/rubbish すると、すべてのファイルがまだそこにあります。

編集助けてくれてありがとう!スプートニク、えーと、セミコロンを追加する以外に、コメントで何が変更されたのか本当にわかりませんでしたか? そしてinductiveLoad、あなたの答えはエースでしたが、私はそれを適切に機能させる方法を見つけることができず、忍耐力を失い、基本的なものになりました. そのようです....

#!/bin/bash

if [ "$1" = "-a" ] ;
then 
cd ~/rubbish;
rm ~/rubbish/*;
echo "All files have been deleted";
else
  rm -i ~/rubbish/* ;
fi
4

1 に答える 1

2

オプションの解析に使用getoptsします。これにより、柔軟性が大幅に向上し、任意の順序の引数、データを含むオプション(フラグではなく、以下の-dオプションを参照)が可能になり、不適切なオプションを指定した場合にヘルプが出力されます。

usage()
{
cat <<EOF
usage: $0 options

This script deletes/restores/trashes files.

OPTIONS:
    -h  Show this message
    -a  Trash it all!
    -d  Rubbish directory
EOF
}

trashAll=false
rubbishDir="~/rubbish"

while getopts "ad:" OPTION; 
do
  case "$OPTION"
  in
        h)  usage
            exit 1;;
        a)  trashAll=true;;
        d)  rubbishDir=${OPTARG};;
        ?)  usage
            exit 1;;
    esac
done

if $trashAll
then
    #trash it all
    echo "Trashing all in ${rubbishDir}!"
fi
于 2012-11-21T14:09:41.057 に答える