Script showing incorrect output


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Script showing incorrect output
# 1  
Old 08-12-2016
Script showing incorrect output

Hello scripting geeks,

I am new to scripting and facing some issues in writing the logic of the script. Request your kind help here

Actually when i run a command i get o/p as below

o/p :

Code:
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000

these are hex values i guess...now i want to read all the values and if all the values are same(i.e 0x0000) then it should print "ok" if any one or more than one values are other than 0x0000 then it should print "not ok". I have written something as below but it shows incorrect o/p

script :
Code:
for i in `db2 list tablespaces show detail | grep -i state | awk '{print $3}'`
do
     if [[ $i == 0x0000 ]]
     then
          echo "ok"
     else
          echo "not ok"
     fi
done

Can someone please help here ?


Moderator's Comments:
Mod Comment Use code tags and indention, thanks.

Last edited by zaxxon; 08-12-2016 at 03:15 AM..
# 2  
Old 08-12-2016
What is the meaning of the abbreviation "o/p"???

In your program, you loop over the whole list, and for each list element, you output either ok or not ok. There is no way that you could achieve the output you are posting, from the program you are posting.

Also, note that a

Code:
for i in `...`

is safe only if the list returned from the command is not longer than the maximum length of a command line. Whether or not this is a risk in your case, I can not say, because I don't know how large the resulting list can be.

Finally, whenever you ask about a shell issue, specify which shell you are going to use.

So, provide the code of the programm you are using, together with the output you get, and also let us know which output you expect instead.
# 3  
Old 08-12-2016
Hi rovf,

Thanks for your kind comments !!
o/p can be abbreviated as output Smilie

the list should not be more than 100 entries. my concern is, if all the values are
"0x0000" then it should display "ok" else if any one or more than one value is something other than "0x0000" then it should display "not ok". COuld you please help me in how this can be acheived ?
# 4  
Old 08-12-2016
try this..



Code:
#!/bin/bash

$(db2 list tablespaces show detail | grep -i state | awk '{print $3}') | while read i
do
     if [ $i = "0x0000" ]
     then
          echo "ok"
     else
          echo "not ok"
     fi
done

This User Gave Thanks to itkamaraj For This Post:
# 5  
Old 08-12-2016
Try also

Code:
db2 list tablespaces show detail | awk '/state/ && $3 != "0x0000" {RES = 1} END {print (RES?"not ":"") "OK"; exit RES}'

short version, evaluate the exit code:
Code:
db2 list tablespaces show detail | awk '/state/ && $3 != "0x0000" {exit 1}'

# 6  
Old 08-12-2016
Quote:
Originally Posted by rovf
[..]
Also, note that a

Code:
for i in `...`

is safe only if the list returned from the command is not longer than the maximum length of a command line. Whether or not this is a risk in your case, I can not say, because I don't know how large the resulting list can be.

[..]
This is not correct, there are no line length limitations to a for loop. A for loop is not a utility, it is not even a builtin utility. A for loop is part of the shell syntax, so neither the limitations of passing parameters to a subprocess apply, nor do command line limitations; for the for loop itself no command is being called and no subprocess is being started, and so neither LINE_MAX nor ARG_MAX play a role here...

Last edited by Scrutinizer; 08-12-2016 at 05:24 AM..
These 2 Users Gave Thanks to Scrutinizer For This Post:
# 7  
Old 08-12-2016
Hi Rudic,

Thank you for the code. But not displaying correct output. Like as below, if one value is other than 0x0000

Code:
>db2 list tablespaces show detail | grep -i state
 State                                = 0x0000
 State                                = 0x0000
 State                                = 0x0800 
 State                                = 0x0000
 State                                = 0x0000
 State                                = 0x0000

then also it dispalys "OK"

---------- Post updated at 03:21 PM ---------- Previous update was at 03:15 PM ----------

hi rudic,

thank you for responding,

but it shows "ok" even if any one of the entry is other than 0x0000. like below

Code:
$ db2 list tablespaces show detail | grep -i state
 State                                = 0x0000
 State                                = 0x0000
 State                                = 0x0800
 State                                = 0x0000
 State                                = 0x0000
 State                                = 0x0000
$ db2 list tablespaces show detail | awk '/state/ && $3 != "0x0000" {RES = 1} END {print (RES?"not ":"") "OK"; exit RES}'
OK


Moderator's Comments:
Mod Comment Please use CODE tags as required by forum rules!

Last edited by RudiC; 08-12-2016 at 06:53 AM.. Reason: Added CODE tags.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Pgrep not showing desired output

I am searching for a process that should be up and running. Im using the following command ps -ef | grep elasticsearch to get elastic+ 1673 1 0 Jan29 ? 05:08:56 /bin/java -Xms4g -Xmx4g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC... (1 Reply)
Discussion started by: Junaid Subhani
1 Replies

2. UNIX for Dummies Questions & Answers

Script output in Email is not showing Colored headers

Hi All I am working on AIX 7.1 and I am trying to show an output that I get from "cat" a log file to email. However in email I get the below output: In the script I have defined the colors as: #!/bin/sh echo "\033 Below is the script I have created to send this output: ... (9 Replies)
Discussion started by: Bubs
9 Replies

3. UNIX for Dummies Questions & Answers

Command showing no output!

Hi Folks, I have a situation here, where no command is giving any output, and it's not even showing any error message also. What could be the reason? (3 Replies)
Discussion started by: nixhead
3 Replies

4. Shell Programming and Scripting

Now showing the correct output

Hello I am working on one script where I am trying to display all the directories which is inside the workspace but somehow it is giving me weird output and this is occurring only with one directory other also having the result.html file inside the directory. for i in `ls -1 | egrep -iv... (2 Replies)
Discussion started by: anuragpgtgerman
2 Replies

5. Solaris

Showing strange size in df output

Hi, This is Solaris-10 box and in few of file-system (root file-system of non global zones), usage/available is not showing correct size. I am not able to figure out, what is eating up this space. Global Server - bdrpod01 Non Global zone - bdrpod01-zputq01 root@bdrpod01:/root# df -h... (2 Replies)
Discussion started by: solaris_1977
2 Replies

6. Shell Programming and Scripting

Df -h | awk - output incorrect matching

Running solaris 9, on issuing the follwing command df -h | awk '$5 > 45 {print}' Filesystems with utilisation > 45% are being displayed as well as those between 5 and-9%!!! (3 Replies)
Discussion started by: squrcles
3 Replies

7. UNIX for Dummies Questions & Answers

HELP! showing output as a ratio in uniq

Hi, I have the following file called addresses, (it is a large file i have only copy and pasted few of the data below) and I am wanting to write a command so it will Find the ratio of mobile (07....) to land line (01....) telephone numbers? then find the most popular first name and list the... (1 Reply)
Discussion started by: tina_2010
1 Replies

8. Solaris

iSCSI disk showing incorrect size

Hi, I have a very frustrating issue! I hope you guys can assist When a disk is presented out the iSCSI target display a lower disk capacity SOLARIS VERSION is SOLARIS 10 05/09 Kernel Patch 139555-31 ISCSI Patch 119090-31, 141878-11 Unix Commands To discover Target bash-3.00# i... (0 Replies)
Discussion started by: capitalexall
0 Replies

9. Shell Programming and Scripting

Merge lines in a file with Awk - incorrect output

Hi, I would like: FastEthernet0/0 is up, line protocol is up 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored 0 output errors, 0 collisions, 0 interface resets Serial1/0:0 is up, line protocol is up 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort 0... (14 Replies)
Discussion started by: mv652
14 Replies

10. Shell Programming and Scripting

Incorrect output using find command

I'm using the below command to list files older than 2 hours but it returns redundant output, am I missing something. # find . -mmin +120 -exec ls -l {} \; total 0 -rw-r--r-- 1 root system 0 Oct 13 09:52 test1 -rw-r--r-- 1 root system 0 Oct 13 09:52 test2 -rw-r--r-- 1 root ... (5 Replies)
Discussion started by: mbak
5 Replies
Login or Register to Ask a Question