Dynamic variables and our friend "if"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Dynamic variables and our friend "if"
# 1  
Old 03-20-2013
Code Dynamic variables and our friend "if"

Hi guys,

Sorry if it is somewhere in the forum, I've checked for an hour or so with my google friend and can't figure this one out. Not counting the 2 hours I spent yelling at it.

Welcome to BASH + AIX

Code:
	$LSLV -l $LV | $GREP -v $LV | $GREP -v "IN BAND" | $AWK '{print $1}' | while read PV; do
		if [ $ARG = "-all" ]; then
			if [ -z "\$${PV}_SIZE" ]; then
				eval ${PV}_SIZE="Some weird calculation"
				eval echo \$${PV}_SIZE
			else
				eval echo \$${PV}_SIZE
			fi
		else
			$ECHO "\t\t|_____ - PV: "`$ECHO $PV | $AWK '{print $1}'`
		fi
	done

In short, I have a list of physical volumes (hdiskX), I want to create a variable hdisk1_size (for example with hdisk1) IF it does not already exists. If it exists, I just want to echo it; only if my $ARG="-all"

I know some part of it works since:

Code:
[censored]# PV=hdisk1
[censored]# eval ${PV}_SIZE="test"
[censored]# echo \$${PV}_SIZE
$hdisk1_SIZE
[censored]# eval echo \$${PV}_SIZE
test

I have no idea what is wrong. I've tried wc the amount of letters within the variable, it acts weirdly when put inside the if but works well from the prompt:

Code:
# eval echo \$${PV}_SIZE | wc -m
       5

So far I have tried:

Code:
[ -z "\$${PV}_SIZE" ]

It always says it's not empty even if not initialized

Code:
[ `eval echo \$${PV}_SIZE | wc -m` -eq 1 ]

Note that the above will always be at least 1 (?):

Code:
# eval echo \$${UNiX}rAmdOmnEss | wc -m
       1

I've tried a bunch of stuff ... I thought my logic might just be wrong but I can't figure another way of doing it.

Any ideas? Smilie
# 2  
Old 03-20-2013
Try read instead of eval. It can do the same job -- setting dynamic variable names -- with less doublethink. You can feed it the output of a shell command inside a here-document.
Code:
VARIABLENAME="abc_def"

# Sets the variable abc_def
read $VARIABLENAME <<EOF
$(long | complex | command)
EOF

Note that the ending EOF must be at the beginning of the line, not indented.

You can also convert a variable containing a variable name into that varibable's contents with ${!VARNAME}, if you're using BASH or new enough KSH.

Last edited by Corona688; 03-20-2013 at 06:18 PM..
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

Makefiles and "Dynamic" Rules

I have a configuration file, foo.cfg, and a script, bar.sh. bar.sh generates .cc and .h files based on foo.cfg. To exemplify, let's say it creates apple.cc, apple.h, banana.cc, banana.h, carrot.cc, carrot.h, and so on. How do I write a Makefile that runs bar.sh if and only if foo.cfg has... (2 Replies)
Discussion started by: acheong87
2 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

Question about special variables: "-" and "$_"

both ksh/bash support this 2 special variables, Is there any document for reference? 1) "-" is $OLDPWD 2) "$_" is last argument of previous command. (4 Replies)
Discussion started by: honglus
4 Replies

7. Red Hat

"Dynamic" Group Permissions?

Hi all, Apologies if the answer is out there somewhere, I did have a search about..... In my environment of a RHEL 4 machine and users all listed out in LDAP (say, userA in a deptZ primary group; userB in same deptZ primary group, plus deptY secondary group), I am trying to find a mechanism... (1 Reply)
Discussion started by: en7smb
1 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

passing a list of dynamic names to a "PS" command in shell script?

Hi, I am new to shell script. This is my first post .I have written a small script which returns list of names starts with "ram" in /etc/passwd .Here is that:- #!/bin/ksh NAME_LIST="name_list.txt" cat /dev/null > $NAME_LIST evalcmd="cat /etc/passwd | grep "^ram?*" | cut -d: -f1" eval... (3 Replies)
Discussion started by: sachin.tendulka
3 Replies
Login or Register to Ask a Question