Purpose of "read" and "$END$" in ksh ?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Purpose of "read" and "$END$" in ksh ?
# 1  
Old 07-01-2011
Purpose of "read" and "$END$" in ksh ?

Hi,

Could anyone please shed some light on the following script lines and what is it doing as it was written by an ex-administrator?

cat $AMS/version|read a b verno d
DBVer=$(/usr/bin/printf "%7s" $verno)


I checked that the cat $AMS/version command returns following output:

Application Release 12.2L01 as of Fri Nov 2 22:11:46 EDT 2007

But when it is being piped through read in the above lines, nothing is available in DBVer parameter when I output using echo $DBVer. Smilie

Also what is the purpose of $END$ as in the following code:

$AMS/bin/procmon testdb << $END$

Thanks
# 2  
Old 07-01-2011
read takes one line, unless you muck with env I suppose, and puts the first field in the first variable and so on with the rest in the last variable. Apparently the version is the 3rd field of the first line. The cat is lazy, read <file is cheaper than a fork, pipe, exec of cat.

<< is a converter of script lines to stdin, and stops on a line with the following token only. The script lines are expanded for variables and such, so I prefer echo '...'|, where single quotes keep things literal. << copies the processed lines to a temp file, so it is the cost of a temp file create versus a pipe, echo being a builtin.

Last edited by DGPickett; 07-01-2011 at 11:59 AM..
This User Gave Thanks to DGPickett For This Post:
# 3  
Old 07-01-2011
Thanks for the reply.

1) But why it wouldn't return anything in DBVer parameter as that is empty after running those lines ?

2) So how this token $END$ is generated ? What key sequence would do that?

Regards,
# 4  
Old 07-01-2011
"echo 1 2| read a b c" means a=1, b=2, c=, garbage in is garbage out.

It is just a string, a token made up by the author. I use <<!, if I use it at all, as it takes less space and works fine. Must be exactly and only on a line by itself. Nice to keep lists one item a line for easy maintenance and viewing, not "a b ccc ddd ee ff ggg". You deserve neat, clean, clear code.
This User Gave Thanks to DGPickett For This Post:
# 5  
Old 07-01-2011
Quote:
Also what is the purpose of $END$ as in the following code:
$AMS/bin/procmon testdb << $END$
This is a Shell "Here" document. All the ensuing lines up to but not including the string $END$ are presented on the input read channel of the program $AMS/bin/procmon .
There should be a corresponding $END$ in column 1 a number of lines later in the script.
This User Gave Thanks to methyl For This Post:
# 6  
Old 07-01-2011
Yeah, interview answer, here document. The token can be anything, 'EOF' is very popular.

The $ are a real bad token character choices, normally being used in shell and environmental variable retreivals. The make it look magic, ooooh, ooooh, Levitosa, accio broom! Smilie
This User Gave Thanks to DGPickett For This Post:
# 7  
Old 07-01-2011
Ok so if I try to test the example you have sent:
--------------------
#!/bin/ksh
echo 1 2 | read a b c
echo $b
--------------------

$b still has blank value instead of 2 !
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

3. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

4. Shell Programming and Scripting

Read from "list1" and list matches in "list2"

I want to print any matching IP addresse in List1 with List 2; List 1 List of IP addresses; 161.85.58.210 250.57.15.129 217.23.162.249 74.76.129.101 30.221.177.237 3.147.200.59 170.58.142.64 127.65.109.33 150.167.242.146 223.3.20.186 25.181.180.99 2.55.199.32 (3 Replies)
Discussion started by: lewk
3 Replies

5. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

6. Shell Programming and Scripting

read -p "prompt text" foo say "read: bad option(s)" in Bourne-Shell

Hallo, i need a Prompting read in my script: read -p "Enter your command: " command But i always get this Error: -p: is not an identifier When I run these in c-shell i get this error /usr/bin/read: read: bad option(s) How can I use a Prompt in the read command? (9 Replies)
Discussion started by: wiseguy
9 Replies

7. HP-UX

script running with "ksh" dumping core but not with "sh"

Hi, I have small script written in korn shell. When it is called from different script, its dumping core, but no core dump when we run it standalone. And its not dumping core if we run the script using "/bin/sh" instead of "ksh" Can some body please help me how to resolve this issue. ... (9 Replies)
Discussion started by: simhe02
9 Replies

8. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies

9. Shell Programming and Scripting

how to request a "read" or "delivered" receipt for mails

Dears, I've written a script which allows me to send mails in different formats with different attaches. Now I still want to add a feature to this script. My users would like to be able to receive a "read" or "delivered" receipt for their mails. The script send mails on behalve of an specific... (1 Reply)
Discussion started by: plelie2
1 Replies
Login or Register to Ask a Question