一応完成かな? #!/bin/ash case $LANG in ja_JP*) MSG2="ごみ箱の中身を表示します。" MSG3="ごみ箱の中身を消去します。" MSG4="このプログラムはごみ箱を使うためのプログラムです。" ;; *) MSG2="Show files in TRASH BOX" MSG3="Delete files from TRASH BOX" MSG4="This program is to use TRASH BOX" ;; esac
DATE="$(date +%y%m%d-%H%M%S)" TRASH=Trash if [ -d ~/"$TRASH" ];then : else mkdir ~/"$TRASH" fi case $* in -s | --status ) ls -A ~/"$TRASH"/ ;; -d | --delete ) rm -rf ~/"$TRASH"/* ;; -h | --help ) echo " -s --status : $MSG2" echo " -d --delete : $MSG3" echo " -h --help : $MSG4" ;; *) tar -czf ~/"$TRASH"/back-"$DATE".tgz $* rm -R $* ;; esac
>>34 つかえないshもあるってことですね。 肝に命じておきます。 >>36 いちおう最初の予定でそのままmvするはずだったので、 ls -A になってますた。そのために秒数までfile名に埋め込んだので… 何時ごみ箱にほうりこんだか分れば良いかなと… あとは、時間からほうりこんだfileを予測して、 わからない分はtar -tzf hogeで確認ってことで? 駄目っすか?(汗 そんな感じで r じゃなくて c にしました。 でも、36さんのやつの方が良さそうなので書きなおしてみまっす。
任せるつもりが完成してしまったんではっとく #!/bin/sh case $LANG in ja_JP*) MSG2="ごみ箱の中身を表示します。" MSG3="ごみ箱の中身を消去します。" MSG4="このプログラムはごみ箱を使うためのプログラムです。" ;; *) MSG2="Show files in TRASH BOX" MSG3="Delete files from TRASH BOX" MSG4="This program is to use TRASH BOX" ;; esac DATE="$(date +%y%m%d-%H%M%S)" RECYCLE=trash.tar if [ -w ${RECYCLE}.gz ];then gunzip ${RECYCLE}.gz fi case $* in -s | --status ) tar tvf $RECYCLE gzip $RECYCLE ;; -d | --delete ) rm $RECYCLE ;; -h | --help ) echo " -s --status : $MSG2" echo " -d --delete : $MSG3" echo " -h --help : $MSG4" ;; *) tar rf $RECYCLE $* gzip $RECYCLE rm -r $* ;; esac
40 :
しまった。-s オプションが与えられた時の処理を -s | --status ) if [ -r $RECYCLE ]; then tar tvf $RECYCLE gzip $RECYCLE else echo "$MSG5" fi にしないと-dした後におかしな動きになるわ。
41 :
こうなりました。 ん〜、case文のなかにif文… 美しくない… #!/bin/ash case $LANG in ja_JP*) MSG2="ごみ箱の中身を表示します。" MSG3="ごみ箱の中身を消去します。" MSG4="このプログラムはごみ箱を使うためのプログラムです。" ;; *) MSG2="Show files in TRASH BOX" MSG3="Delete files from TRASH BOX" MSG4="This program is to use TRASH BOX" ;; esac TRASH=DustBox case $* in -s | --status ) tar -tzvf ~/"$TRASH" ;; -d | --delete ) rm -rf ~/"$TRASH" ;; -h | --help ) echo " -s --status : $MSG2" echo " -d --delete : $MSG3" echo " -h --help : $MSG4" ;; *) if [ -f ~/"$TRASH" ];then tar -rzf ~/"$TRASH" $* else tar -czf ~/"$TRASH" $* fi rm -R $* ;; esac
あとは取り出しをどうするかだな。 できれば組み込みたい。。。
42 :
>>41 tar rzf って可能? うちの環境ではエラー吐いたんだけど。 バージョンはこんな感じ > tar --version GNU tar version 1.11.2 あと、取り出しよりも前に引数がなかった場合に エラーメッセージ出したいんだけど、どうすればいい? シェルスクリプト書いたことなくてよくわかんね。
43 :
rzfはこっちの環境でか可能です。 tar (GNU tar) 1.13.17 debian GNU/linux のpotatoなんで結構古いはず。 って。woodyもそんなにかわらん tar (GNU tar) 1.13.25 (woody)
44 :
これって、TRASH にファイルを突っ込むソフトはどれ?
45 :
ごめん、よく読んだら組み込んであった
46 :
Debian はいけるのか。俺、FreeBSD だからなぁ とりあえず、引数のチェックを入れてみた こんなもんでどうだろう? #!/bin/sh case $LANG in ja_JP*) MSG2="ごみ箱の中身を表示します。" MSG3="ごみ箱の中身を消去します。" MSG4="このプログラムはごみ箱を使うためのプログラムです。" MSG5="ごみ箱は空です" ;; *) MSG2="Show files in TRASH BOX" MSG3="Delete files from TRASH BOX" MSG4="This program is to use TRASH BOX" MSG5="TRASH BOX is empty" ;; esac RECYCLE=$HOME/.recycle.tar if [ ! $1 ]; then echo "use -h for help" exit fi case $* in -s | --status ) if [ -r $RECYCLE ]; then tar tvzf $RECYCLE else echo "$MSG5" fi ;; -d | --delete ) rm $RECYCLE ;; -h | --help ) echo " -s --status : $MSG2" echo " -d --delete : $MSG3" echo " -h --help : $MSG4" ;; *) if [ -w ${RECYCLE}.gz ]; then gunzip ${RECYCLE}.gz tar rf $RECYCLE $* else tar cf $RECYCLE $* fi gzip $RECYCLE rm -r $* ;; esac
ちょと訂正あり。 case $* in -s | --status ) if [ -r ${RECYCLE}.gz ]; then tar tvzf ${RECYCLE}.gz else echo "$MSG5" fi ;; -d | --delete ) rm ${RECYCLE}.gz ;; {}.gzが抜けてますた。
51 :
ん〜、shiftで行けるのかな? こんな感じで。 #!/bin/sh case $1 in -r ) shift echo "get $*" ;; * )echo "end" esac exit 0 どうだろう?
52 :
どうも、 for $hoge in $@ do $hoge done ですべての引数を処理できるらしい