How to convert my /bin/sh script with cgi and html to run it on browser!??


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers How to convert my /bin/sh script with cgi and html to run it on browser!??
# 8  
Old 10-07-2019
on my script.sh after line:
Code:
 grep -r "$XX" /var/www/html/ > /tmp/$YY.txt

this line:
Code:
sed 's/INFO.*;|//g' /tmp/$YY.txt > /tmp/$ZZ.txt

but it just create file /tmp/$YY.txt , it does not perform the sed command to clear the rows in
/tmp/$YY.txt file in a new /tmp/$ZZ.txt file. I don't know what I did wrong! Please help me to resolve this issue.

Regards
Juta2020

Moderator's Comments:
Mod Comment
Do not ignore request for code tags.
You are breaking the rules and consecutively ignoring remarks!

Last edited by Peasant; 10-07-2019 at 11:26 PM.. Reason: Added code & icode tags.
# 9  
Old 10-07-2019
I have no way of knowing if your sed expression will do what you want or not! Show the input you have and the output you want.

You also haven't told me what $XX, $YY, or $ZZ are supposed to be, and what the output from your CGI script was, if anything.

Also, show your script itself. I have no way of knowing if it's correct either without actually seeing it.
# 10  
Old 10-08-2019
Hello again Corona688. Please take a look to my script.sh:

Code:
#!/bin/sh -f
echo "Content-type: text/html"
echo ""
echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
echo '<title>Instance LOG's</title>'

#Step 1
echo "<form method=GET action=\"${SCRIPT}\">"\
     '<table nowrap>'\
         '<tr><td>UserName</TD><TD><input type="text" name="val_x" size=12></td></tr>'\
         '</tr></table>'
#Step 2
echo "<form method=GET action=\"${SCRIPT}\">"\
        '<table nowrap>'\
                '<tr><td>FileName not_cleaned</TD><TD><input type="text" name="val_y" size=12></td></tr>'\
                '</tr></table>'
#Step 3
echo "<form method=GET action=\"${SCRIPT}\">"\
        '<table nowrap>'\
                 '<tr><td>FileName cleaned</TD><TD><input type="text" name="val_z" size=12></td></tr>'\
                '</tr></table>'

echo '<br><input type="submit" value="Search">'\
       '<input type="reset" value="Reset"></form>'


OLDIFS="$IFS"
IFS="&=" # Split strings upon ampersand and equals

# If query_string="a=b&c=d, this sets $1=a, $2=b, $3=c, $4=d

set -- ${QUERY_STRING}
IFS="$OLDIFS" # Set splitting back to normal

while [ "$#" -gt 0 ]
do
        case "$1" in
        val_x) XX="$2" ; shift ;;
        val_y) YY="$2" ; shift ;;
        val_z) ZZ="$2" ; shift ;;
        *) ;; # Ignore unknown option
        esac
        shift # Throw away $1, move $2 etc down
done

# Catch error messages so you see them in the web browser

exec 2>&1

# Check log files for

grep -r "$XX" /opt/SUNWappserver/nodeagents/ins1/logs/ > /tmp/$YY.txt

sed 's/INFO.*;|//g' /tmp/$YY.txt > /tmp/$ZZ.txt

sendmail -t my_mail@mydomain.com -s "LOG's instance for $XX" -a=/tmp/$ZZ.txt

rm /tmp/$ZZ.txt

echo '</body>'
echo '</html>'
exit 0

I have
Code:
chown apache:apache /opt/SUNWappserver/nodeagents/ins1/logs/

, grep command works perfectly, but this command desn't work :
Code:
sed -n 's/INFO.*;|//g' /tmp/$YY.txt > /tmp/$ZZ.txt

to clear in each line INFO.*; . One example of my logs in /tmp/$YY.txt (FileName not_cleaned):

Code:
/opt/SUNWappserver/nodeagents/ins1/logs/server.log_2018-10-05T09-05-18:[#|2018-10-05T06:22:37.640+0200|INFO|sun-appserver2.1|web.test.bean.alert.NominalsMyThread|_ThreadID=1610;_ThreadName=Thread-33935;|My Search: Username -> Test, Test, 123456789|#]

I want to delete the bold ones in rows, every line that starts with : /opt and end with [# ,also each line thats starts with INFO and end with ; (second one works with sed -n 's/INFO.*;|//g' /tmp/$YY.txt > /tmp/$ZZ.txt if I run via command line but on my script.sh desn't work). What I want to


What I want to get as a result in /tmp/$ZZ.txt (FileName cleaned) is:

Code:
|2018-10-05T06:22:37.640+0200||My Search: Username -> Test, Test, 123456789|#]

So, deleted :
Code:
/opt/SUNWappserver/nodeagents/ins1/logs/server.log_2018-10-05T09-05-18:[#

and
Code:
INFO|sun-appserver2.1|web.test.bean.alert.NominalsMyThread|_ThreadID=1610;_ThreadName=Thread-33935;

After that I want to attach /tmp/$ZZ.txt and sent into my e-mail via sendmail (
Code:
sendmail -t my_mail@mydomain.com -s "LOG's instance for $XX" -a=/tmp/$ZZ.txt

desn't work )and and after send it, remove /tmp/$ZZ.txt from server.

Regards,
Juta2020

Last edited by Scrutinizer; 10-11-2019 at 04:31 AM.. Reason: Additional code tags
# 11  
Old 10-08-2019
Couple of things.

How do you know that /tmp/$ZZ.txt isn't being created? You're deleting it!

If you're not getting error messages in your browser, sed is running. So I'd check that $ZZ is what you actually think it is. Just a line somewhere that does

echo "XX=$XX YY=$YY ZZ=$ZZ" so you can see it in the browser and rule out the obvious.

Quote:
Hello again Corona688. Please take a look to my script.sh:

....

I have chown apache:apache /opt/SUNWappserver/nodeagents/ins1/logs/ , grep command works perfectly
That's a really bad idea. You need to put back whatever permissions you had before. If you don't know them, restore from backup.

It's a bad idea for two reasons. #1, it gives the web server permission to change the files! And the web server could be being used by anyone!
#2, it only works right now but will break whenever new log files are created. New log files won't have the right permissions.

The proper way to do it depends on what's creating those files, and what permissions they were in the first place. You might have been able to do it by adding apache to some group or other and restarting apache, but without knowing it's impossible to say.

Quote:
...but this command desn't work : sed -n 's/INFO.*;|//g' /tmp/$YY.txt > /tmp/$ZZ.txt to clear in each line INFO.*; . One example of my logs in /tmp/$YY.txt (FileName not_cleaned):

Code:
/opt/SUNWappserver/nodeagents/ins1/logs/server.log_2018-10-05T09-05-18:[#|2018-10-05T06:22:37.640+0200|INFO|sun-appserver2.1|web.test.bean.alert.NominalsMyThread|_ThreadID=1610;_ThreadName=Thread-33935;|My Search: Username -> Test, Test, 123456789|#]

I want to delete the bold ones in rows, every line that starts with : /opt and end with [# ,also each line thats starts with INFO and end with ; (second one works with sed -n 's/INFO.*;|//g' /tmp/$YY.txt > /tmp/$ZZ.txt if I run via command line but on my script.sh desn't work). What I want to

What I want to get as a result in /tmp/$ZZ.txt (FileName cleaned) is:

Code:
|2018-10-05T06:22:37.640+0200||My Search: Username -> Test, Test, 123456789|#]

So, deleted : /opt/SUNWappserver/nodeagents/ins1/logs/server.log_2018-10-05T09-05-18:[# and INFO|sun-appserver2.1|web.test.bean.alert.NominalsMyThread|_ThreadID=1610;_ThreadName=Thread-33935;

After that I want to attach /tmp/$ZZ.txt and sent into my e-mail via sendmail (sendmail -t my_mail@mydomain.com -s "LOG's instance for $XX" -a=/tmp/$ZZ.txt desn't work )and and after send it, remove /tmp/$ZZ.txt from server.

Regards,
Juta2020
# 12  
Old 10-11-2019
I've added down the line:
Code:
sed -n 's/INFO.*;|//g' /tmp/$YY.txt > /tmp/$ZZ.txt

this row :

Code:
echo "XX=$XX YY=$YY ZZ=$ZZ"

to see it in the browser, but nothing appears. No clean file is created ($ ZZ.txt), only un cleaned file is created ($ YY.txt). To test it I have comented the line: rm /tmp/$ZZ.txt . I haven't receive any e-mail on my_mail@mydomain.com!

Please take a look :

Code:
grep -r "$XX" /opt/SUNWappserver/nodeagents/ins1/logs/ > /tmp/$YY.txt
sed 's/INFO.*;|//g' /tmp/$YY.txt > /tmp/$ZZ.txt
sendmail -t my_mail@mydomain.com -s "LOG's instance for $XX" -a=/tmp/$ZZ.txt
echo "XX=$XX YY=$YY ZZ=$ZZ"

#rm /tmp/$ZZ.txt



Moderator's Comments:
Mod Comment Please do not "demand" solutions!




Regards,
Juta2020

Last edited by Scrutinizer; 10-11-2019 at 04:42 AM.. Reason: code tags
# 13  
Old 10-11-2019
That you see nothing at all in the browser, not even errors hints that your program isn't running -- you're only seeing files left by previous attempts.

Last edited by Corona688; 10-11-2019 at 12:39 PM..
# 14  
Old 10-11-2019
To be clear: We cannot pull a rabbit out of our hat and give you perfect code. You've given us too many unknowns and change everything we give you far too much. What I am trying to do is show you how to troubleshoot. The basics are:
  1. SIMPLIFY.
    • Strip the webpage out of your script to remove that complication.
    • If that doesn't help, remove EVERYTHING until it starts working. Pare it down to 'hello world'. Then add things back, one by one, until something breaks.
  2. IGNORE ASSUMPTIONS.
    • You think grep is working. Do you know that for a fact? You're using the same name every time, it could have created that file last week.
  3. TEST.
    • The error could be in something 90 lines up. You're getting NO OUTPUT when you should be getting something. That hints the program is breaking early.

Zero feedback tells you nothing. Try this:

Code:
#!/bin/bash

# Make sure errors get shown in web browser.  DO THIS FIRST!
exec 2>&1

# Make sure web browser shows everything raw
echo "Content-Type:  text/plain"
echo

echo "Text output test"
echo "Error output test" >&2
echo
echo "Query is: ${QUERY_STRING}"

IFS="&=" ; set -- ${QUERY_STRING}

while [ "$#" -gt 0 ]
do
        echo "Got variable $1=$2"

        case "$1" in
        val_x) XX="$2" ; shift ;;
        val_y) YY="$2" ; shift ;;
        val_z) ZZ="$2" ; shift ;;
        *) ;; # Ignore unknown option
        esac
        shift
done

echo "got XX=$XX YY=$YY ZZ=$ZZ"

grep "$XX" /var/www/html/* > /tmp/a.txt
echo "grep returned $?"
sed 's/INFO.*;|//g' /tmp/a.txt > /tmp/b.txt
echo "sed returned $?"


Last edited by Corona688; 10-11-2019 at 12:50 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How can I use my /bin/sh script on web browser?

Hello, I have created my script which works properly through the terminal, but I want to convert it to perform all functions as it performs through terminal, but in this case perform through web browser. My /bin/sh script is:... (1 Reply)
Discussion started by: juta2020
1 Replies

2. Shell Programming and Scripting

Run command through html+cgi in bash

Hi everyone, I want to kill process through the web, so I create html page with single bottom that run kill command in shell script with CGI. Here is html code: <td><form METHOD="GET" action="http://IP:port/cgi_bin/script.cgi" > <input type="submit" value= "Submit" > <INPUT name="q"... (7 Replies)
Discussion started by: indeed_1
7 Replies

3. UNIX for Beginners Questions & Answers

How to run script through CGI?

Hi I have written a script and I want it to be run from web with the help of CGI. can you please guide me . below script is working fine if run from backend but not sure how I should run through web. #!/bin/bash string1=look string2=0 string3=.sdn.dnb echo -n "enter... (3 Replies)
Discussion started by: scriptor
3 Replies

4. Shell Programming and Scripting

Perl cgi pages out of cgi-bin folder in WINDOWS

Hi team, I have a typical problem with cgi pages in apache webserver in WINDOWS I am able to execute(display) the pages that are saved in cgi-bin folder. But I am not able to execute the pages stored in htdocs or other folder other than cgi-bin folder. Could anyone please let me know how... (1 Reply)
Discussion started by: scriptscript
1 Replies

5. UNIX and Linux Applications

execute shell script using CGI for html site

hi there im currently in the process of creating a website for use basically within our org. im using a os x machine and installed MAMP - which includes Apache, mysql... the site will be used by techs to primarily install pkgs files onto os x devices. i would like to have buttons or hyperlinks... (2 Replies)
Discussion started by: sheshe
2 Replies

6. Shell Programming and Scripting

How to pass data from server (CGI script) to client (html page)

Hi I know how to pass data from client side (html file) to server using CGI script (POST method). I also know how to re-create the html page from server side after receiving the data (using printf). However I want to write static pages on client side (only the structure), and only to pass... (0 Replies)
Discussion started by: naamabm
0 Replies

7. Shell Programming and Scripting

cgi script to echo a html file

Hi, I'm learning some simple cgi scripting. I can make a script like this, so my browser shows "Hello World" /www/cgi-bin/name.sh --- #!/bin/sh MyName=World echo "<html> Hello $MyName </html>" --- What I'd like is to have a separate html and script files in the cgi folder so ... (1 Reply)
Discussion started by: Performer
1 Replies

8. Shell Programming and Scripting

running a cgi script even when browser is closed

hii, i have a cgi script file which may take some hours to complete. The script logs the output and mails the user. so the browser need not be open for the output. But currently the script dies off the instant the browser is closed or other pages are viewed. Is there a way out .. ? i have... (0 Replies)
Discussion started by: damn_bkb
0 Replies

9. Shell Programming and Scripting

html - df -k cgi script

Hey - I am new to cgi scripting... just writing a script to output df -k output to html page... but I cannot get the df lines on separate lines on the page, it all comes out on one line and is not very readable.. any suggestions? My script is below - please keep in mind I am only new to it so... (1 Reply)
Discussion started by: frustrated1
1 Replies

10. UNIX for Dummies Questions & Answers

Run ksh script from cgi

Hi, I'm developing a system which requires me to run a ksh script from within a cgi script. What sort of syntax will I need to do this, I'm sure it's simple but can't find out how anywhere! Thanks. (2 Replies)
Discussion started by: hodges
2 Replies
Login or Register to Ask a Question