intro to UNIX - making a sort-of recycle bin (for fun)

Hello, I'm only taking Intro to UNIX in school right now, so please bear with me. My problem is with a sort-of recycle-bin rig I've created for fun. I'm using Ubuntu 9.04, I am the admin. (only user, actually) of this computer. I'm using this script in ~/.bashrc

# if files exist, remove contents (of purge directory)
ls -lA ~/purge;
echo "^ this was a test, to be sure the following command should work"

purgeTest= "ls -lA ~/purge" # setting a variable to check contents of ~/purge
if [ $purgeTest -ne "total 0" ]; then
rm -r ~/purge/* 
fi

side note: I would think that checking if a directory (line 5) has contents is unnecessary, except when I just had rm -r ~/purge/* written, I'd get rm: cannot remove `/home/jzacsh/purge/*': No such file or directory BUT only when the purge directory was empty.

Here is the output I'm seeing on login:

total 0
^ this was a test, to be sure the following command should work
bash: ls -lA ~/purge: No such file or directory
bash: [: -ne: unary operator expected
jzacsh@dell8300:~$ 

bottom line, questions:
what am i doing wrong to get the "no such file or directory" error, in line 3 just above? (am I using variables incorrectly?)

is -ne operator only for mathematic comparisons - line 4 of error? if so, what should I use?

-thanks in advance for any suggestions!

Why would you want the script to clean your "recylce bin" (doesn't GNOME have that by default?) in your login script? Lets assume that you, by accident "deleted" a file. As soon as you open a new terminal it's gone.

Aside from that, there are 3 errors in your code:

purgeTest= "ls -lA ~/purge"
if [ $purgeTest -ne "total 0" ]

First, there shouldn't be white spaces around the assignment operator. Second, double quotes won't capture the output of the command, use backticks or $( <cmd> ). Third, -ne is for numeric comparison, use != for strings.

pludi: thanks for the quick reply. I actually wrote this originally for my Intro to Unix class, where I needed somewhere to stick temporary files I was working on/looking at, that I didn't want to worry about remembering to clean up. In that class we use FreeBSD. I fixed the errors you mentioned, thank you for the advice.

This is what my code looks like now:

# if files exist, remove contents of purge directory
purgeTest=`ls -lA ~/purge`
if [$purgeTest!="total 0"]; then
rm -r ~/purge/*
fi

Thisi is the error I get:

bash: [total: command not found

Rewrite that if to

if [ "$purgeTest" != "total 0" ]; then

and everything should run as wanted.

As an additional learning challenge you might consider putting your code in your .bash_logout and only run it when your last terminal exits.

Awesome, that worked! (I guess I got rid of the unnecessary whitespace and the necessary). Thanks.

I'm glad you mentioned that, I'm actually a bit confused with the different files. My UNIX teacher taught us ~/.profile was what you use, then the ubuntu forums explained you should use .bashrc for an assignment (like the one I did below).

alias test="cd $HOME/prog/test ; pwd ; ls -la"

My professor explained that its just because every linux/unix system is a bit unique, but I feel like there must be a more reasonable explanation for the different files - or at least a glossary/breakdown of the different ?daily-script-containers? somewhere ... no?

Different shells, more likely. Nothing but BASH uses .bashrc . Lots of linux systems use BASH, but lots of other UNIX systems generally login to ksh or others. Though I have seen situations where a read-only .bashrc exists to prevent people mucking with it, that automatically includes .profile or somesuch if present.

According to the man page of bash the sequence is

  1. /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.profile

plus anything that's sourced in there. ksh only reads /etc/profile and ~/.profile

Furthermore, bash will run ~/.bash_logout whenever a login shell exits, and ~/.bashrc when running an interactive non-login shell.