To keep the forums high quality for all users, please take the time to format your posts correctly.
First of all, use Code Tags when you post any code or data samples so others can easily read your code. You can easily do this by highlighting your code and then clicking on the # in the editing menu. (You can also type code tags [code] and [/code] by hand.)
Second, avoid adding color or different fonts and font size to your posts. Selective use of color to highlight a single word or phrase can be useful at times, but using color, in general, makes the forums harder to read, especially bright colors like red.
Third, be careful when you cut-and-paste, edit any odd characters and make sure all links are working property.
Thank You.
The UNIX and Linux Forums
---------- Post updated at 00:12 ---------- Previous update was at 00:10 ----------
i've not checked your script... but it sould be ` (backtick) instead of '.
#!/bin/sh
for i in 'ls-1 test'
do
sed 's/bob/manny/'g $i > $i.0
mv $i.0 $i
done
There are a variety of little bugs in this script.
1) The single quotes around 'ls-1 test' cause that whole string to be in variable $i which is what upset sed. To execute a command they need to be in backticks. Subtle but very important.
2) The second single quote in the sed line is misplaced. I think "sed" needs a "-e" switch but I don't know your O/S.
3) Though it hasn't caused an issue here you will be well advised to not call a script "test" because it is the name of a unix command.
4) There are better, more robust and POSIX-compliant methods to achieve this result.
5) "ls-1" should be "ls -1". The space character after "ls" is mandatory.
Last edited by methyl; 09-03-2009 at 09:34 PM..
Reason: grammar and correct ls -1 again
Hey, I'm running knoppix and I'm trying to run a shell script to change multiple lines of text in multiple files
Even after correcting that to
it is still the wrong way to loop through files. Not only is ls unnecessary, but it will cause the script to fail if any filenames contain spaces. (Also, the -1 is unnecessary since the output is not going to a terminal.)
A more robust approach which preserves space characters in filenames and works for any number of files is:
While doing this I belatedly noticed that
should be
(the space character after ls is mandatory).
Looking back, "cfajohnson" spotted this immediately.
Last edited by methyl; 09-03-2009 at 09:38 PM..
Reason: Don't use test as the name of script! More grammar. remove some " to avoid confusion with syntax.
A more robust approach which preserves space characters in filenames and works for any number of files is:
That is less robust than my suggestion. It will fail if there is a newline (heaven forbid!) in a file name. It also uses an unnecessary external command.
It will also fail if there is leading or trailing whitespace in any filenames. Or if there are any backslashes.
The syntax I used will work no matter what pathological characters are in the filenames.
Quote:
The -1 is not needed because the output of ls is not going to a terminal.
I think you meant:
Quote:
do
sed -e 's/bob/manny/g' "${filename}" > "${filename}.0"
mv "${filename}.0" "${filename}"
You should check that sed succeeded before wiping the original file:
Many good points.
Good point about checking result from "sed".
Leading or trailing whitespace and backslashes in filenames will indeed fox most scripts and some commercial backup software. Imho any such filenames should be detected and removed from the system forthwith.
I disagree with "for i in test/*" because it fails on AIX for example with long lists.
Ps. I do run a periodic detect and manual clean of weird filenames in user directories. Unix files such as "C:\user_had_brain_damage.txt" upset our backup software.
While I remember, I have read much good advice about not interfering with IFS which dates back to the roots of unix.
Hello. I hava homework for university but i cant do it and i need a little help if someone can help me :) I have to do a linux shell script.
Write a script that does the following:
1. Check if there is a directory in / home with myDir name.
If not, it creates it.
2. In the directory it... (1 Reply)
Hello all,
I am facing a weird issue while executing a code below -
#!/bin/bash
cd /wload/baot/home/baotasa0/sandboxes_finance/ext_ukba_bde/pset
sh UKBA_publish.sh UKBA 28082015 3
if
then
echo "Param file conversion for all the areas are completed, please check in your home directory"... (2 Replies)
I'm limited in my skills related to *nix and I'm even more limited in my skills related to shell scripting and the use of awk. I have what should be a relatively simple shell script that looks in the /etc/fstab to see if a particular partition exists on the Linux system. The intention of this part... (2 Replies)
I am trying to create a shell script similar to ls, but which only lists directories. I have the first half working (no argument version), but trying to make it accept an argument, I am failing. My logic is sound I think, but I'm missing something on the syntax, I'm guessing in the bolded line? ... (9 Replies)
Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!
Hello all,,, I am trying to finish my assignment for my CNET class. I am running into 2 problems... First the "Delete a file" (Option 1) When I run this option everything... (5 Replies)
Hi,
#!/bin/ksh
$v=""
for ((i = 1 ; i <= 5 ; i++ ))
do
v="THerrFile_$i.err";
grep -i "$i:Error" $v >>oraerror_output.txt
done
My requirement is to dynamically create variable like
THerrFile_1.err,THerrFile_2.err etc.
where my grep needs... (5 Replies)
Hi guys, I am a newbie to shell scripting.Please help me to accomplish this task. Its very urgent,I should create a script which will do the following:
i) "cd ~joseph/ ; mkdir -p Bing/Bong ;mkdir -p Bing/Bang" and then create 15 ".txt" files with content "Bing Bang Bong" in "Bong"... (1 Reply)
I've a python script named rwe.py. I'm running the program in three separate terminals. If one of the executing program stops . I want to leave the terminal as it is so that i can see the error. i wrote a the below script and used cron to run it every one hour to check if the three programs are... (0 Replies)
her i am trying to edit a database file which is actually a small file holding my friend's name and birthdays
My Database
DEEPAK 27/08
DEEPIKA 18/02
DHYAN 23/03
DIPANKAR 24/10
SNIGDHO 19/05
AYANNAR 17/12
BHAI 22/09
DEBAN 16/08
JAGADISH 02/06
SUBHOJIT 23/02
TOJO 17/09
SUDHIR 12/09... (1 Reply)
Hi below is my script
for((i=0;i<=$TOTAL;i++))
do
echo "IP's created are $s1.$s2.$s3.$s4"
s4=`expr $s4 + 1`
done
where s1,2,3,4 are input varibles
below error occurs while running the script
syntax error at lin 11: '(' unexpected
... (12 Replies)