Bash Script To Output Certain Lines From A File

I am trying to write a script to create a variable (string) out of specific lines from another file. The string will be used as headings for lists in another script. My plan is to create a variable "myvar" with the output from an awk command run against a file called banners.txt then I can call $myvar whenever it is appropriate in the larger script. additionally I can add/modify the banner file instead of having to comb through a large script to add or change echo commands.
So, here is my proof of concept script:
Code:
#!/bin/bash

path=/home/rstenger/

TESTFILE=$(<banners.txt)
MYVAR=$( awk 'NR > 6 && NR < 10' "$TESTFILE" )
#
echo ""
echo ""
echo $MYVAR
#
for i in {1..5}; do echo ""; done
echo $TESTFILE

exit

which produces this output:
Code:
sl7jump1~#->./test1.sh 
awk: cmd. line:2: fatal: cannot open file `******************************************************
*                1st banner has 3 line               *
******************************************************
******************************************************
*                2nd banner has 3 line               *
****************************************************** 
******************************************************
*                3rd banner has 3 line               *
******************************************************' for reading (File name too long)








3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 1st banner has 3 line 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 2nd banner has 3 line 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 3rd banner has 3 line 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names 3rd_floor_lab_ex3200s.txt banner banners.txt ban_test.sh base_configs Images lab_cyclades.sh lab_devices.v3.sh Projects savvis.lab_device_list Savvis_Lab-Domain-DNS.txt test1.sh vrf_names

What I was looking for is:
Code:
******************************************************
*                3rd banner has 3 line               *
******************************************************

I am very puzzled as to why I get the contents of the file in the awk error message, and the contents of my home directory as the variable.

Thanks,
Robert


Similar Content



I Am Trying To Run CRCN Protocol In Ns2.31 But Every Time I Am Getting This Error,

Hello guys. When ever i tried to run CRCN protocol i am getting following error:
harsh@ubuntu:~/ns3/test$ ns test1.tcl
num_nodes is set 10
missing operator at _@_
in expression "$i < $val(ni) _@_$val(channum) "
(parsing expression "$i < $val(ni) $val(cha...")
invoked from within
"for {set i 0} {$i < $val(ni) $val(channum) } {incr i} {
$ns_ add-channel $i $chan_($i)
}"
(file "test1.tcl" line 48)

Can someone guide me how to correct this error??

Thank you

Sed Use To Rename Files Under Multiple Directory

Hi all,

I am trying to use sed to rename multiple files under multiple directory.

so lets say for exmaple:
Under /root I have 2 directory as follows:

# ll {test1,test2}
test1:
total 0
-rw-r--r--. 1 root root 0 Apr 10 19:16 authkey.apollo

test2:
total 0
-rw-r--r--. 1 root root 0 Apr 10 19:16 authkeys.apollo

if I want to change apollo to jupiter then used this:
for i in `ls {test1,test2} | grep -i 'apollo'`; do echo $i; sed -i 's/apollo/jupiter/g'; done

but it seems like it got missed on the file path in sed. is there any other easier way or better approach to make this work?

Thanks in advance.

How To Setup System Login Banner And Login Message

I am trying to setup my Fedora Core 2 Login banner and Login Message to something different. Where do I go or what do I need to do to achive this?

Misbehaving 'echo' Command On Cygwin

Hi,

I've used unix before, but have just started to play with CYGWIN (1.1.3) on windows XP (32 bit). I'm having trouble getting 'echo' to behave as I would expect.

I've created a script called runstuff which contains these lines....
Code:
#!/bin/bash
# This line works as expected....
echo "the user is <$USER> and the hostname is <$HOSTNAME>"
MYVAR1=bill
MYVAR2=fred
# This lines doesn't.....
echo "my first variable is<$MYVAR1> and my second is <$MYVAR2>"

The output I get is this...
Quote:
$ runstuff
the user is <Mike> and the hostname is <MikesLaptop>
> and my second is <fredl

In the first echo statement it is just echoing a couple of external variables - this works as expected. In the 2nd echo example the two variables are internal, but the displayed output isn't what I'd expect, my guess is that the first part of the output "my first variable is <bill" has somehow been overwritten by the remainder of the string. Or am I missing something?

I have tried exporting the variables, and I've experimented with wrapping them in quotes, but the results are always the same.

Any help gratefully received.

Basic Bash Script

Code:
PREFIX=192.168.1
OCTET=1
while [ $OCTET -lt "255" ]; do
    echo -en "Pinging ${PREFIX}.${OCTET}..."
    ping -c1 -w1 ${PREFIX}.${OCTET} > /dev/null 2>&1
    if [ "$?" -eq "0" ]; then
       echo "OK"
    else
       echo "Failed"
    fi
    let OCTET=$OCTET+1
done

My question is, in the penultimate line, why is it OCTET, and not $OCTET, with a dollar before it, meaning, the variable?

What if it were written:
Code:
let $OCTET=$OCTET+1

Like in C++ (I think) or Python or whatever?

String Concatenation In UNIX / Shell Script

Hi,

I am new to UNIX - i wrote this below script based on the requirement. But i am stuck at the concatenation (at the second last step of the code)

The below code is working fine till the concatenation(second last step) - I need to concatenate Hello to the "physId" e.g. - The filename is UM123456789.20150503 - i am extracting M123456789 and i need to append "HELO" to it at the end. But as per the below script - when i am using the concatenation, it is overwriting the M123456789 and the output thus becomes HELO456789. I am trying to get the output as - M123456789HELO - where am i going wrong?

on the terminal i checked - echo $0 and it gave -> /bin/sh. Hence i wrote the below code.

#!bin/sh
absolutePath=/abc/data/abc_unix/stg/decrypt/*.*
filepath=$(echo ${absolutePath%.*})
echo "$filepath"
filenameext=$(echo ${filepath#/abc*decrypt/})
echo "$filenameext"
file=$(echo ${filenameext#.*})
echo "$file"
extract_physId=$(echo ${file:1:9})
physId=$(echo ${extract_physId})
echo "$physId"
key="$physId"HELO
echo "$key"

Bash Scrip Running On Remote Server

This is my script and the syntax to run this script is give ip and next will be the file or script you want to perform on remote server



#!/bin/bash

# The private key used to identify this machine
IDENTITY_KEY=/home/adnew.pem

syntax()
{
echo "Syntax: Ec2.sh server_ip scriptFile]"
echo "For example: ./Ec2.sh server_ip scriptFile"
exit 1
}

if [ $# -ne 2 ]
then
echo not enough arguments
syntax
fi


echo "Running script $2 on $1"
ssh -ttq -i $IDENTITY_KEY ec2-user@$1 sudo -i 'bash -s' < $2
exit
exit
echo "Done"



on script file i have give for testing

touch /root/test
ls /root/test
exit
exit

it makes the file but do not show the ls output by giving error


tcgetattr: Inappropriate ioctl for device

exit


what I have to do ??

Need Help In Bash Scripting

I have two files which has exact same number of lines.
I want first line of first file should be filename of new file and content of this new file should be first line of second file.
Then second line of first file should be filename of again new file and content of this new file should be second line of second file.
then third line of first file should be filename of again new file and content of this new file should be third line of second file.
and so on...
I am trying to do it using for loop but I am not able to create two for loops.
This is what I have done
Code:
IFS=$'\n'
var=$(sed 's/\"http\(.*\)\/\(.*\).wav\"\,\".*/\2/g' 1797.csv) # filenames of all files
var2=$(sed 's/\"http\(.*\)\/\(.*\).wav\"\,\"\(.*\)\"$/\3/g' 1797.csv) # contents of all files
for j in $var;
do
#Here I do not know how to use $var2
done

Please help.

Stdout, Stderr And Redirection -- What Is The Correct Order Or Format ?

Hi all,

Been reading on stdin, stdout and stderr and encounter 2 questions, hope gurus here can advise.

0 = stdin
1 = stdout
2 = stderr

Code:
Sun Dec 21 03:53:42 SGT 2014 > cat test5.sh
#!/bin/bash

echo "Please enter value for name :"
read name
echo "Your name is $name."

echo "Next echo will be a syntax error"
ehco

Code:
Sun Dec 21 03:53:46 SGT 2014 > test5.sh 1> output.txt 2> error.txt
Noob

Sun Dec 21 03:54:56 SGT 2014 > cat output.txt
Please enter value for name :
Your name is Noob.
Next echo will be a syntax error

Sun Dec 21 03:55:23 SGT 2014 > cat error.txt
/home/alan/scripts/test5.sh: line 8: ehco: command not found
Sun Dec 21 03:55:26 SGT 2014 >

Which so far all is good and the correct way to output everything including error to a single file is

Code:
Sun Dec 21 03:59:14 SGT 2014 > test5.sh > output.txt 2>&1


Q1) How is a command being interpreted in linux , the sequence in which it is interpreted ? from left to right ? right to left ?

Shouldn't it be

Code:
test5.sh 2>&1 1>output.txt 
or 
test5.sh 2>&1>output.txt ?

Regards,
Noob

Tips On Using Bash Script To Edit A Windows Text File

I have a bash script executing on an AIX server to a windows share directory to update a windows text file. Most of the file is edited as expected but I have 3 issues that I am not sure how to resolve.

1. Windows text file contains a double backslash (\\) and the \\ is being written back as a single \ which corrupts the file.
2. I am not getting the last line of text in the file written back out.
3. Some lines of text are not written back out completely.

Here is a snippet of my bash script:
cp $Directory/Somefile $Directory/Somefile.$(date +'%Y%m%d')
cat /dev/null > ${HOME}/temp.out

while read -r inpLine; do
patternFound=n
echo ${inpLine} | grep -q 'SOMEPATTERN='
if [ $? = 0 ]; then
patternFound=y
echo "##${inpLine}" >> ${HOME}/temp.out
echo "SOMEPATTERN=newValue" >> ${HOME}/temp.out
fi

if [ ${patternFound} = "n" ]; then
echo ${inpLine} >> ${HOME}/temp.out
fi

done < $Directory/Somefile
mv ${HOME}/temp.out $Directory/Somefile