this is my first post here. Been reading stackoverflow for a long time and i want to take a time to appreciate everything you do to help community. Thank you.
A lack of knowledge in scripting area leads me to creating this post. Due to complication of my problem (in my opinion) i wasnt able to google the solution. First of all – i would really appreciate any related material links to be able to leard by myself. If there is any modern solution for what im trying to do – i’d rather switch from bashcgiphp to it since i dont know much.
I have an apache 2.4 and what im doing is trying to create web application. It now has bash syntacsis but i will convert it to CGI later on when figure out how to build working bash script. It does:
#!/bin/bash
echo "Content-type: text/html"
echo ""
sv00dbtest01=$(5d0b3f1b-16f4-4d6a-8fac-0e746887f71d)
sv00dbtest02=$(010eeaea-f56b-42b3-b4e4-26ef235860a9)
sv00dbtest03=$(0688e718-c807-4629-ab90-1cc729fd1513)
sv00dbtest04=$(4e9bf96b-3311-4936-a877-4e66ca3a860a)
sv00dbtest05=$(fce66f7a-2a50-4856-978c-cbe44dd2acb6)
sv00dbtest06=$(271476de-97d0-4915-895c-98da9be2d6d2)
sv00dbtest07=$(9c5a7112-1685-4a0e-9d07-30669383ec12)
sv00dbtest08=$(f7a7f06a-adcb-4eda-8f68-3a2d7874ff86)
sv00dbtest09=$(5d1f2088-5148-4ec7-b169-8e674dd6ba40)
sv00dbtest10=$(fc4ad441-a997-4a28-888e-97e53e965447)
file=$(ssh -p 48563 root@$srv1 'ls -1t /app/docker/pg/backup/daily | head -n 1')
echo '<html>'
echo '<head>'
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'
echo '<title>Form Example</title>'
echo '</head>'
echo '<body>'
echo "<form method=GET action="${SCRIPT}">"
'<table nowrap>'
'<tr><td>Input</TD><TD><input type="text" name="srv1" size=12></td></tr>'
'<tr><td>Section</td><td><input type="text" name="srv_list" size=12 value=""></td>'
'</tr></table>'
echo '<input type="radio" name="srv2" value="sv00dbtest01" checked> Test server №1<br>'
'<input type="radio" name="srv2" value="sv00dbtest02"> Test server №2<br>'
'<input type="radio" name="srv2" value="sv00dbtest03"> Test server №3'
'<input type="radio" name="srv2" value="sv00dbtest04"> Test server №4'
'<input type="radio" name="srv2" value="sv00dbtest05"> Test server №5'
'<input type="radio" name="srv2" value="sv00dbtest06"> Test server №6'
'<input type="radio" name="srv2" value="sv00dbtest07"> Test server №7'
'<input type="radio" name="srv2" value="sv00dbtest08"> Test server №8'
'<input type="radio" name="srv2" value="sv00dbtest09"> Test server №9'
'<input type="radio" name="srv2" value="sv00dbtest10"> Test server №10'
echo '<br><input type="submit" value="Process Form">'
'<input type="reset" value="Reset"></form>'
scp -3 -P 48563 root@$srv1:/app/docker/pg/backup/daily/$file root@$srv2:/app/docker/pg/backup/$file
ssh -p 48563 root@$srv2 "systemctl stop docker-compose"
ssh -p 48563 root@$srv2 "rm -Rfv /app/docker/pg/data"
ssh -p 48563 root@$srv2 "tar -zsxvf /app/docker/pg/backup/$file --strip=3 -C /app/docker/pg/"
ssh -p 48563 root@$srv2 "chown -R 1000:1000 /app/docker/pg/data"
ssh -p 48563 root@$srv2 "systemctl start docker-compose"
ssh -p 48563 root@$srv2 "rm -Rfv /app/docker/pg/backup/$file"
ssh -p 48563 root@sv00apptest01 "docker exec server1c /opt/1C/v8.3/x86_64/rac infobase update --cluster=7f122b3b-799c-4c98-a98f-4953a78eff48 --infobase=$srv_list --infobase-user=123 --infobase-pwd=123 --db-server=$srv1"
if [ "$REQUEST_METHOD" != "GET" ]; then
echo "<hr>Script Error:"
"<br>Usage error, cannot complete request, REQUEST_METHOD!=GET."
"<br>Check your FORM declaration and be sure to use METHOD="GET".<hr>"
exit 1
fi
# If no search arguments, exit gracefully now.
if [ -z "$QUERY_STRING" ]; then
exit 0
else
# No looping this time, just extract the data you are looking for with sed:
srv1=`echo "$QUERY_STRING" | sed -n 's/^.*srv1=([^&]*).*$/1/p' | sed "s/%20/ /g"`
srv2=`echo "$QUERY_STRING" | sed -n 's/^.*srv2=([^&]*).*$/1/p' | sed "s/%20/ /g"`
srv_list=`echo "$QUERY_STRING" | sed -n 's/^.*srv_list=([^&]*).*$/1/p' | sed "s/%20/ /g"`
echo "Restored base: " $XX
echo '<br>'
echo "On the server: " $YY
fi
echo '</body>'
echo '</html>'
exit 0
So the problem is that i cant figure out how to use a pool of created variables and assign them to another variable, $srv_list. So that when users enter text into a web form, the script reacts only to values from variables. And another problem is to create web form in which for variables $srv1 and $srv2 entered text goes to script and executes it. And the time when people enter text from web-form application, variable will evalute to script and execute it. Im reading this post atm http://www.yolinux.com/TUTORIALS/BashShellCgi.html And trying to create something similar. Thanks in advance.
Advertisement
Answer
Instead of creating each variable once create an array:
srv_list=(
"5d0b3f1b-16f4-4d6a-8fac-0e746887f71d"
"010eeaea-f56b-42b3-b4e4-26ef235860a9"
"0688e718-c807-4629-ab90-1cc729fd1513"
"4e9bf96b-3311-4936-a877-4e66ca3a860a"
"fce66f7a-2a50-4856-978c-cbe44dd2acb6"
"271476de-97d0-4915-895c-98da9be2d6d2"
"9c5a7112-1685-4a0e-9d07-30669383ec12"
"f7a7f06a-adcb-4eda-8f68-3a2d7874ff86"
"5d1f2088-5148-4ec7-b169-8e674dd6ba40"
"fc4ad441-a997-4a28-888e-97e53e965447"
)
And to process this list you can loop over the array with for
:
for i in ${srv_list[@]}; do
ssh -p 48563 root@sv00apptest01 "docker exec server1c /opt/1C/v8.3/x86_64/rac infobase update --cluster=7f122b3b-799c-4c98-a98f-4953a78eff48 --infobase=${i} --infobase-user=123 --infobase-pwd=123 --db-server=$srv1"
done