| | |
Trying to rewrite srm (safely remove): problem with spaces in filenames
Please support our Shell Scripting advertiser: Programming Forums - DaniWeb Sister Site
Thread Solved |
•
•
Join Date: Jun 2008
Posts: 182
Reputation:
Solved Threads: 18
Hi all.
I am trying to write a "light" version of srm just as an exercise of shell scripting (started today with this ^^" I have to keep it really simple)
Basically it should just search for a file and, if found, ask for a confirmation before deleting it.
Now, it worked fine with /any/directory/you/like/no_spaces_in_the_name.file and I hoped to make it a little less dumb
Here's the code:
The added part is
I put in it
The error I receive is @ this line:
It prints out this:
I am just blind on why it doesn't work... any idea?
Anticipate thanks
p.s.
I have not yet find anything abount problems with spacing in shell scripting, but ¿strangely? if I indent the code like I'm used to with c/c++ it complains a lot so I'm not doing it at all. It's not urgent but I think I'm simply missing something obvious, so I'll be very grateful to anyone who'll give a sort of explanation ^^"
p.p.s.
as usual sorry for my english
I am trying to write a "light" version of srm just as an exercise of shell scripting (started today with this ^^" I have to keep it really simple)
Basically it should just search for a file and, if found, ask for a confirmation before deleting it.
Now, it worked fine with /any/directory/you/like/no_spaces_in_the_name.file and I hoped to make it a little less dumb

Here's the code:
#!/bin/bash
#
#Script to safely remove files (asks confirmation)
#
choice="n"
if [ $# -eq 0 ]
then
echo "srm: missing argument."
echo "Syntax: $0 file_to_safely_delete."
exit 1
fi
filename=$1
if [ $# -gt 1 ]
then
filename="'$@'"
echo "$filename"
fi
if test -f $filename
then
echo "$filename found. Are you sure you want to permanently delete it? (y/n)"
read choice
if [ $choice = "y" ]
then
`rm $filename`
echo "$filename permanently deleted."
else
echo "$filename untouched."
fi
else
echo "$filename not found. Nothing done."
fiThe added part is
Shell Scripting Syntax (Toggle Plain Text)
if [ $# -gt 1 ] then filename="'$@'" echo "$filename" fi
I put in it
echo "$filename" for debugging and it shows correctly the string 'name of file with spaces' The error I receive is @ this line:
if test -f $filename It prints out this:
line 18: test: too many arguments After I call it with srm just a try I am just blind on why it doesn't work... any idea?
Anticipate thanks

p.s.
I have not yet find anything abount problems with spacing in shell scripting, but ¿strangely? if I indent the code like I'm used to with c/c++ it complains a lot so I'm not doing it at all. It's not urgent but I think I'm simply missing something obvious, so I'll be very grateful to anyone who'll give a sort of explanation ^^"
p.p.s.
as usual sorry for my english
•
•
Join Date: Jun 2008
Posts: 182
Reputation:
Solved Threads: 18
I made these changes after your suggestion (red lines had quotes added around $filename)
Now it doesn't complains, but it's malfunctioning: it enters the last else case even if "just a try" actually exists as a file :?
I can't imagine neither the cause nor the solution of this problem...
Actual situation:
Ok, putting single quotes ' ' around the file name when calling the script made it work properly. I still don't understand why... I thought that
would have done the job. Any explanation? Btw, thank you all, I'm just curious now ^^
#!/bin/bash # #Script to safely remove files (asks confirmation) # choice="n" if [ $# -eq 0 ] then echo "srm: missing argument." echo "Syntax: $0 file_to_safely_delete." exit 1 fi filename=$1 if [ $# -gt 1 ] then filename="'$@'" echo "$filename" fi if test -f "$filename" then echo "$filename found. Are you sure you want to permanently delete it? (y/n)" read choice if [ $choice = "y" ] then `rm "$filename"` echo "$filename permanently deleted." else echo "$filename untouched." fi else echo "$filename not found. Nothing done." fi
Now it doesn't complains, but it's malfunctioning: it enters the last else case even if "just a try" actually exists as a file :?
I can't imagine neither the cause nor the solution of this problem...
Actual situation:
Shell Scripting Syntax (Toggle Plain Text)
ludovico@ludovico-laptop:~/Desktop$ srm just a try 'just a try' 'just a try' not found. Nothing done.
Ok, putting single quotes ' ' around the file name when calling the script made it work properly. I still don't understand why... I thought that
... filename="'$@'" ...
Last edited by mrboolf; Jul 20th, 2008 at 9:06 am. Reason: Solved, but still not understanding how
•
•
Join Date: Oct 2007
Posts: 399
Reputation:
Solved Threads: 47
Hey There,
Inside the double quotes, in your test statement, the single quotes are being treated as literal characters in the value of the filename variable:
If you just change
to
you should be all set
Hope that helps
, Mike
Inside the double quotes, in your test statement, the single quotes are being treated as literal characters in the value of the filename variable:
If you just change
•
•
•
•
if test -f filename="'$@'"
•
•
•
•
if test -f filename="$@"
Hope that helps

, Mike
Last edited by eggi; Jul 20th, 2008 at 11:48 pm. Reason: typo
Linux and Unix Tips, Tricks and Individual Advice - The Linux and Unix Menagerie!
------------------------------------------------------------------------
The greatest viral marketing idea of all time, get your copy of this Free Report now!
------------------------------------------------------------------------
The greatest viral marketing idea of all time, get your copy of this Free Report now!
•
•
Join Date: Oct 2007
Posts: 399
Reputation:
Solved Threads: 47
Awesome 
Glad to help out

Glad to help out
Linux and Unix Tips, Tricks and Individual Advice - The Linux and Unix Menagerie!
------------------------------------------------------------------------
The greatest viral marketing idea of all time, get your copy of this Free Report now!
------------------------------------------------------------------------
The greatest viral marketing idea of all time, get your copy of this Free Report now!
![]() |
Other Threads in the Shell Scripting Forum
- Previous Thread: checking argument wheather is empty
- Next Thread: tar issues...
| Thread Tools | Search this Thread |
Tag cloud for Shell Scripting






