grpdsku program allows user to check their group disk space in a server environment. The data in the dialog box queries a text file. Each text file is labeled with a current timestamp. Results output to a msgbox. Also, results output to a csv file. The csv file is sent to the user via email
When running the program, I am getting error } missing . I check each open and close bracket and found no issue. There are other issues with this program. The dialog forms aren't creating and generating output. I appreciate any help you can give me. I have attached a document that explains the program process in more detail.
Group name Group name current date: 09/30/2016
Example 2: output
from disk_2016.09.29.txt :
Below is how I want the output results to be displayed in
a csv file and on screen. The output must have headers. Date,and time must be
formatted. Columns must be aligned
correctly.
is opening a code block and there is no closing brace.
At the start of this block these variables are initialised through read statements from stdin that is piped ( | ) into the code blok from the dialog command :
Code:
read -r groups
read -r date1
read -r n
read -r email
Outside the code block these variables do not retain their values (this is because a pipe construction | is used and in most shells this is executed in the background).
Since one or more of them or their derivatives is used in the last mailx command, which is used in a loop, there should be a single closing brace after this loop:
Code:
done <"$DISKINFO"
}
Last edited by Scrutinizer; 10-06-2016 at 01:31 AM..
This User Gave Thanks to Scrutinizer For This Post:
Using gawk to read and manipulate multiple texts from a file
OS is AIX
The first part of the program check if the input of a particular date and group name exist in a text file. The input values need to match on that entire record in the text file. This process is similar to SQL where clause statement.
The second part of the program display an error message and exit the loop if there isn't a match or else continue if there is a match. The date format needs to change from mm/dd/yyyy to mm/dd/yy in the output of results. The input variable n limit the number of records that are displayed.
I'm getting an error message when I run my code. Error message: too many errors to read.
a) Input variables in the code are
Code:
group=hasasvmi
date1=09/29/2016
n=1
b) The following is the data in the text file
Example 1: data in disk_2016.09.29.txt :
I will point out the most obvious ones, but i wouldn't bet on having found all of them. The script is in a state which begs a rewrite anyway.
Code:
#!/bin/bash
You mentioned using AIX. The system shell is ksh, not bash. Use it!
Code:
Now=date + %M/%D/%Y
I suppose you want to use the date command to fill a variable there. This will fill the variable "Now" with the string "date" instead and the rest of the line will produce a syntax error. You do it this way (i have corrected the date-command too):
Code:
Now=$(date +"%M/%D/%Y")
Code:
while [[ -z $groups || -z $date1 || -z $n|| -z $email ]]; do
This is not ouright wrong, just dangerous. Suppose the variable groups has no content: this would leave the following command to be executed:
Code:
while [[ -z || -z $date1 || -z $n|| -z $email ]]; do
similar, if groups contains a space char:
Code:
while [[ -z foo bar || -z $date1 || -z $n|| -z $email ]]; do
and this, subsequently, will lead to a syntax error. If you query variables and their contents do it this way (notice the quoting):
Code:
while [[ -z "$groups" || -z "$date1" || -z "$n" || -z "$email" ]]; do
or, even more preferably, because being POSIX-compliant:
Code:
while [ -z "$groups" || -z "$date1" || -z "$n" || -z "$email" ] ; do
This will also not work:
Code:
dialog --separate-widget $\n
--clear \
Notice the "n" at the end of the first line. When you continue a line with a backslash, it needs to be the absolutely last character in this line, because in fact you are escaping the following newline character with it. If there is another character (common problem: a space) after it, the backslash will escape that instead of the newline.
regex=/^[0-1][0-9]/[0-3][0-9]/[0-9]\{4\}$/
if [[$regex =~ date -d "$date1"]]
This won't work at all. First, "date -d" is not available in AIX (and in no other POSIX-compliant UNIX, because "-d" is not part of the POSIX standard). Since i cannot figure out what you are trying to achieve no suggestion for an alternative here, but explain what it should do and we probably find a solution.
Code:
if ! grep -q '$group' $DISKINFO ; then
almost correct. The problem is that variables ("$group") will not be expanded inside single quotes, only double quotes. And "grep" only works on files or streams, not on fixed strings:
Code:
if ! echo "$DISKINFO" | grep -q "$group" ; then
Finally: capitalisation is not arbitrary in UNIX. If a keyword is "else", it is supposed to be "else", not "Else", "ELSE" or anything else either (sorry for the pun). Likewise with all the other keywords: do, done, if, while, then, ...
while [[ -z $groups || -z $date1 || -z $n|| -z $email ]]; do
This is not ouright wrong, just dangerous. Suppose the variable groups has no content: this would leave the following command to be executed:
Code:
while [[ -z || -z $date1 || -z $n|| -z $email ]]; do
similar, if groups contains a space char:
Code:
while [[ -z foo bar || -z $date1 || -z $n|| -z $email ]]; do
and this, subsequently, will lead to a syntax error. If you query variables and their contents do it this way (notice the quoting):
Code:
while [[ -z "$groups" || -z "$date1" || -z "$n" || -z "$email" ]]; do
Hi Bakunin, this is not right. Again, this is mixing up shell keywords ( which [[ ... ]] are) and a shell utility (which is the case with [ ... ]) . There really is no reason to use double quotes here, unless you want to combine whitespace separated fields (which is not the same as field splitting) or prevent pattern matching together with the == operator or regex matching together with the =~ operator (if available).
From man bash
Quote:
Word splitting and pathname expansion are not performed on the words between the [[ and ]]
and man ksh (both 88 and 93):
Quote:
Field splitting and file name generation are not performed on the words between [[ and ]]
Quote:
or, even more preferably, because being POSIX-compliant:
Code:
while [ -z "$groups" || -z "$date1" || -z "$n" || -z "$email" ] ; do
This syntax is incorrect and not part of POSIX. Correct POSIX syntax would be:
Thank for your help. I want to get my code running. I realized I need to get the code working before adding the shell script code to zenity dialog i. Here is what I am trying to do
The first part of the code check if the input of a particular date and group name exist in a text file. The input values need to match on that entire record in the text file. This process is similar to SQL where clause statement.
The second part of the code display an error message and exit the loop if there isn't a match or else continue if there is a match. The date format needs to change from mm/dd/yyyy to mm/dd/yy in the output of results. The input variable n limit the number of records that are displayed.
I'm getting an error message when I run my code. Error message:
Code:
too many errors to read
.
a) Input variables in the code are
Code:
group=hasasvmi
date1=09/29/2016
n=1
b) The following is the data in the text file
Example 1: data in disk_2016.09.29.txt :
Hello,
I have an ubuntu14.04 installed pc with 32GB ram.
Operating System: Ubuntu 14.04.5 LTS
Kernel: Linux 4.9.148-xxxx-std-ipv6-64
Architecture: x86_64
When I check free memory it shows:
total used free shared buffers cached
Mem: 31882 ... (2 Replies)
Hi,
I will be creating a process myself and I want to know the average CPU and RAM used by the process over the lifetime of the process. I see that there are various tools available(pidstat) for doing , I was wondering if it possible to do it in a single command while creation.
Thanks in... (3 Replies)
Hey there! I'm a new user here who registered because I couldn't get these kind of questions answered in the place I directly com from. :o
I've found a discrepancy in total RAM used and I can't figure out why it is. My only guess is there are some RAM used by some stuff impossible to identify,... (2 Replies)
Hi team
I have three physical servers running on Red Hat Enterprise Linux Server release 6.2 with the following memory conditions:
# cat /proc/meminfo | grep -i mem
MemTotal: 8062888 kB
MemFree: 184540 kB
Shmem: 516 kB
and the following swap conditions:
... (6 Replies)
Hi RAM of my system is 24 GB however when i checked the processes pids and counted the memory usage by pmap i found out that the total memory usage is 36 GB
It s obvious that my system might be using some of virtual memory or swap space . How can i check which memory it is using and how ..
... (9 Replies)
Hi
one of our applications that runs on our Linux server leaks memory resulting in Ram that was used by the program not being released back to the operating system once a file has been processed. the result is over a very short period virtual all the memory has been used. an example currently
... (8 Replies)
Hi i just wanted to know what is the code to display amount of RAM and also the percentage used? I know i can possibly use the vmstat code but what part indicates the RAM? Any help would be much appreciated. Thanks (1 Reply)
how can I find cpu usage memory usage swap usage and
I want to know CPU usage above X% and contiue Y times and memory usage above X % and contiue Y times
my final destination is monitor process
logical volume usage above X % and number of Logical voluage above
can I not to... (3 Replies)
Hi All,
I am trying to find the physical memory usage by each process/users.
Can you please let me know how to get the memory usage?.
Thanks,
bsraj. (12 Replies)