Script help


 
Thread Tools Search this Thread
Special Forums UNIX Desktop Questions & Answers Script help
# 1  
Old 07-07-2015
Script help

Hi!
i making a script to let me read a txt with filepath and can convert the image inside the filepath with imagemagick changing the name and source folder, i test line by line (without while loop) and work fine, but when i run the sh give me this error:
Bad for loop variable

this is the script:
Code:
#!/bin/bash
while IFS= read -r line
do
lala=$(echo $line | cut -d "/" -f 5)
caja=$(echo $line | cut -d "/" -f 5)
caja+="_TA_"
cd $line
ls $line | sed 's/ta_/convert ta_/g' > /home/procesadorm.txt
cant=$(wc -l < /home/procesadorm.txt)
rm /home/procesadorr.txt
for ((i=0;i<$cant;i++)); do echo $line >> /home/procesadorr.txt; done
cat /home/procesadorr.txt | 
  sed -e 's/\/media\/bkt2b1/\/convertidor\//g' | 
 sed -e 's/\/Prod100\//\//g' | 
 sed -e 's/\/Prod101\//\//g' | 
 sed -e 's/\/Prod102\//\//g' | 
 sed -e 's/\/Prod103\//\//g' | 
 sed -e 's/\/Prod104\//\//g' | 
 sed -e 's/\/Prod105\//\//g' | 
 sed -e 's/\/Prod170\//\//g' | 
 sed -e 's/\/Prod171\//\//g' | 
 sed -e 's/\/Prod172\//\//g' | 
 sed -e 's/\/Prod173\//\//g' | 
 sed -e 's/\/Prod174\//\//g' | 
 sed -e 's/\/Prod175\//\//g' | 
 sed -e 's/\/Prod176\//\//g' | 
 sed -e 's/\/Prod177\//\//g' | 
 sed -e 's/\/Prod178\//\//g' | 
 sed -e 's/\/Prod179\//\//g' | 
 sed -e 's/\/media\/Externo/\/home\/prueba/g' > /home/procesadorrr.txt
mkdir $(echo $line | sed -e 's/\/Prod100\//\//g' | sed -e 's/\/Prod101\//\//g' | sed -e 's/\/Prod102\//\//g' | sed -e 's/\/Prod103\//\//g' | sed -e 's/\/Prod104\//\//g' | sed -e 's/\/Prod105\//\//g' | sed -e 's/\/Prod170\//\//g' | sed -e 's/\/Prod171\//\//g' | sed -e 's/\/Prod172\//\//g' | sed -e 's/\/Prod173\//\//g' | sed -e 's/\/Prod174\//\//g' | sed -e 's/\/Prod175\//\//g' | sed -e 's/\/Prod176\//\//g' | sed -e 's/\/Prod177\//\//g' | sed -e 's/\/Prod178\//\//g' | sed -e 's/\/Prod179\//\//g' | sed -e 's/\/media\/Externo/\/home\/prueba/g')
ls $line | sed -e 's#ta_#/AR_AGN_DF_TA_#g' | sed -e 's/_DF_TA_/_DF_'"$caja"'/' | sed -e 's/_001.tif/_A.jpg/g' | sed -e 's/_002.tif/_R.jpg/g' > /home/procesadors.txt
paste -d "" /home/procesadorm.txt /home/procesadorrr.txt /home/procesadors.txt | sed -e 's/\/home/ \/home/g' > /home/procesador.sh
sh /home/procesador.sh
done < "/script/pendiente.txt"

if anyone can helpme i dont know why dont work!
Thx

Moderator's Comments:
Mod Comment Please use code tags next time for your code and data, thanks

Last edited by jim mcnamara; 07-07-2015 at 08:24 PM.. Reason: Attempt to improve readability
# 2  
Old 07-07-2015
This code is hard to read and probably not going in a direction you want.

Rather than a wall of code, please, tell us what you are trying to do.
For example (this is a guess):
Code:
I am trying to create directories for files named using lines of a file.

Simply giving us dozens of pipes with no explanation will not get you any useful help.

Thanks.
This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 07-08-2015
Code:
#!/bin/bash
#This is a while looping in the /script/pendiente.txt where there was a list of #filepath, inside has TIF images in all the script will build the sh script who #convert with imagemagick al the tif in the source folder to a jpg with name #changed

#while for the list of folder`s with tif files
while IFS= read -r line
do
#if the path is /media/bk2tb1/Externo/Prod179/TA_4059 i save the last folder
#in two variables one to make the new filename 
lala=$(echo $line | cut -d "/" -f 5)
caja=$(echo $line | cut -d "/" -f 5)
caja+="_TA_"
cd $line
#because al images start with ta i will adding convert in all lines because
#this is the imagemagick command to convert images
ls $line | sed 's/ta_/convert ta_/g' > /home/procesadorm.txt
#i count how much of files have the folder
cant=$(wc -l < /home/procesadorm.txt)
#because i will make a txt with the folder with the same cant of files in the
#next for i delete first
rm /home/procesadorr.txt
#this for will make me a txt with $cant lines in all lines file path, i using this
#because the i need add something in the paste between the source and #destination to change the destination folder
for ((i=0;i<$cant;i++)); do echo $line >> /home/procesadorr.txt; done
#this will replace the filepath becuse in the source have subfolders dont #needed in the destination
cat /home/procesadorr.txt | 
  sed -e 's/\/media\/bkt2b1/\/convertidor\//g' | 
 sed -e 's/\/Prod100\//\//g' | 
 sed -e 's/\/Prod101\//\//g' | 
 sed -e 's/\/Prod102\//\//g' | 
 sed -e 's/\/Prod103\//\//g' | 
 sed -e 's/\/Prod104\//\//g' | 
 sed -e 's/\/Prod105\//\//g' | 
 sed -e 's/\/Prod170\//\//g' | 
 sed -e 's/\/Prod171\//\//g' | 
 sed -e 's/\/Prod172\//\//g' | 
 sed -e 's/\/Prod173\//\//g' | 
 sed -e 's/\/Prod174\//\//g' | 
 sed -e 's/\/Prod175\//\//g' | 
 sed -e 's/\/Prod176\//\//g' | 
 sed -e 's/\/Prod177\//\//g' | 
 sed -e 's/\/Prod178\//\//g' | 
 sed -e 's/\/Prod179\//\//g' | 
 sed -e 's/\/media\/Externo/\/home\/prueba/g' > /home/procesadorrr.txt
#this make a destination folder replacing the same subfolder dont needed in #the output
mkdir $(echo $line | sed -e 's/\/Prod100\//\//g' | sed -e 's/\/Prod101\//\//g' | sed -e 's/\/Prod102\//\//g' | sed -e 's/\/Prod103\//\//g' | sed -e 's/\/Prod104\//\//g' | sed -e 's/\/Prod105\//\//g' | sed -e 's/\/Prod170\//\//g' | sed -e 's/\/Prod171\//\//g' | sed -e 's/\/Prod172\//\//g' | sed -e 's/\/Prod173\//\//g' | sed -e 's/\/Prod174\//\//g' | sed -e 's/\/Prod175\//\//g' | sed -e 's/\/Prod176\//\//g' | sed -e 's/\/Prod177\//\//g' | sed -e 's/\/Prod178\//\//g' | sed -e 's/\/Prod179\//\//g' | sed -e 's/\/media\/Externo/\/home\/prueba/g')
#this will make the output image name
ls $line | sed -e 's#ta_#/AR_AGN_DF_TA_#g' | sed -e 's/_DF_TA_/_DF_'"$caja"'/' | sed -e 's/_001.tif/_A.jpg/g' | sed -e 's/_002.tif/_R.jpg/g' > /home/procesadors.txt
#this will make a join between the (convert +imput #name)/home/procesadorm.txt+(destination path) /home/procesadorrr.txt+ #(destination filename) /home/procesadors.txt
paste -d "" /home/procesadorm.txt /home/procesadorrr.txt /home/procesadors.txt | sed -e 's/\/home/ \/home/g' > /home/procesador.sh
# this will call the script maked
sh /home/procesador.sh
#this will return to first line if not end of file (/script/pendiente.txt)
done < "/script/pendiente.txt"

Thx to all to help me in this Smilie
sorry about my english i really speak spanish
# 4  
Old 07-08-2015
In fact, I've still got no chance to understand what you are doing without samples of the input files. But some comments:
- don't redirect into the file that you use as input; the redirection takes precedence and truncates the input file BEFORE it can be read.
- with a smart regex you can have ALL those sed commands in one single command.
- Why don't you save those sed results in a variable that can be reused later in need be?
- Why do you use sed at all? Use bash's parameter expansion capabilities on $line.
- Not sure if you really want to call that .sh script for every line in your input file.
This User Gave Thanks to RudiC For This Post:
# 5  
Old 07-08-2015
i test all lines without loop and work fine, i using files as a input files because i using this to make a sh file, and then run it i can try making only one sh for all the file to convert, but still will need the output file for later make a paste. But the loop error will continue happening
Login or Register to Ask a Question

Previous Thread | Next Thread

5 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to block first bash script until second bash script script launches web server/site?

I'm new to utilities like socat and netcat and I'm not clear if they will do what I need. I have a "compileDeployStartWebServer.sh" script and a "StartBrowser.sh" script that are started by emacs/elisp at the same time in two different processes. I'm using Cygwin bash on Windows 10. My... (3 Replies)
Discussion started by: siegfried
3 Replies

2. Shell Programming and Scripting

Shell script works fine as a standalone script but not as part of a bigger script

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)
Discussion started by: ektubbe
2 Replies

3. UNIX for Dummies Questions & Answers

Calling a script from master script to get value from called script

I am trying to call a script(callingscript.sh) from a master script(masterscript.sh) to get string type value from calling script to master script. I have used scripts mentioned below. #masterscript.sh ./callingscript.sh echo $fileExist #callingscript.sh echo "The script is called"... (2 Replies)
Discussion started by: Raj Roy
2 Replies

4. Shell Programming and Scripting

Script will keep checking running status of another script and also restart called script at night

I am using blow script :-- #!/bin/bash FIND=$(ps -elf | grep "snmp_trap.sh" | grep -v grep) #check snmp_trap.sh is running or not if then # echo "process found" exit 0; else echo "process not found" exec /home/Ketan_r /snmp_trap.sh 2>&1 & disown -h ... (1 Reply)
Discussion started by: ketanraut
1 Replies

5. Shell Programming and Scripting

create a shell script that calls another script and and an awk script

Hi guys I have a shell script that executes sql statemets and sends the output to a file.the script takes in parameters executes sql and sends the result to an output file. #!/bin/sh echo " $2 $3 $4 $5 $6 $7 isql -w400 -U$2 -S$5 -P$3 << xxx use $4 go print"**Changes to the table... (0 Replies)
Discussion started by: magikminox
0 Replies
Login or Register to Ask a Question