Bashblog v3.0 - cria um microblog em HTML5

Publicado por Raphael Ciribelly (última atualização em 17/03/2021)

[ Hits: 3.237 ]

Download 7215.bashblog.sh




Cria um microblog em HTML5.

Uso:

$ chmod +x bashblog.sh

Executar script:

$ ./bashblog.sh

FUNÇÕES

Cria arquivos necessários:

$ ./bashblog.sh -n

Cria uma sessão:

$ ./bashblog.sh -s

Deleta uma sessão:

$ ./bashblog.sh -ds

Faz uma postagem:

$ ./bashblog.sh -p

Deleta uma postagem:

$ ./bashblog.sh -dp

Abre browser:

$ ./bashblog.sh -b

Obs.: para fazer uma postagem é necessário primeiramente cadastrar uma sessão.

  



Esconder código-fonte

#!/bin/bash

# bashblog v3.0 
# Author: Raphael Ciribelly
# Size: 31666 bytes
# Date: 2020-12-04
# Check: QErNpLY9vAJh9rysLDRyrAaKp82d0Eu2fniouQxPghS0nOnxyvOlnEETiA0qcSDmCN1ThxmVRQXqFOCv3HdcSOadC5vZbU0TdpKkdDdn5KZgyW6ARrDNFKkuBGWamw0uaAallQSDL7IeJrKi9N5ahvkTOu9Su5hN37z8Z08tCI63M66lX14dOau22ayFlOrXzPom7UpnoSiTDuMzi9AiSF5J68SUOUb54D9XqSf2xVE99ybTfUKQxjk5tYbYrXmuZwVLtEcCr9bLsQxMkiHEUxkcSuaDkQvvytbJ74vFJt6MbQttNzWErZw9fhiCYuJQ5BdFJrsDd1nuu8g8RFyEY4FcSknnsAM0nyJ87SDhQNSZ4FW6SMfeRArlyh3iQFeIk6636jvx5VNfRShXhRRyjQZKBcdrkd6qFwRInAldv4xBXmea1GFtPV1aQ2qz2WCOByOBSYDqiXG

# OS: Debian GNU/Linux 10 (buster)
# bash version: GNU bash, versão 5.0.3(1)-release (x86_64-pc-linux-gnu)
# sed version: sed (GNU sed) 4.7
# grep version: grep (GNU grep) 3.3
# vim version: VIM - Vi IMproved 8.1 
# touch version: touch (GNU coreutils) 8.30
# mkdir version: mkdir (GNU coreutils) 8.30
# rm version: rm (GNU coreutils) 8.30
# xargs version: xargs (GNU findutils) 4.6.0.225-235f
# rmdir version: rmdir (GNU coreutils) 8.30

# Variables - set the names inside the double quotes, CONFIGURE!
WEBSITE_NAME="Name Website"
WEBSITE_LINK="https://www.Website.com"
MENU_NAME_1="Home"
MENU_NAME_2="About"
MENU_NAME_3="Blog"
MENU_NAME_4="Downloads"
MENU_NAME_5="Email"
MENU_LINK_1="index.html"
MENU_LINK_2="about.html"
MENU_LINK_3="blog.html"
MENU_LINK_4='downloads.html'
MENU_LINK_5="mailto:contact@email.com"
FEED_LINK="feed.rss"
SOCIAL_NAME_1="Facebook"
SOCIAL_NAME_2="Instagram"
SOCIAL_NAME_3="YouTube"
SOCIAL_LINK_1="link facebook"
SOCIAL_LINK_2="link instagram"
SOCIAL_LINK_3="link youtube"
COPYRIGHT="© 2020 - All rights reserved"
AUTHOR="AUTHOR Website"
LANGUAGE="en-US"
DESCRIPTION="description website"

# Variables - path of files and directories
DIR_WEBSITE="${HOME}/Website"
DIR_POST="${HOME}/Website/post"
DIR_CSS="${HOME}/Website/css"
DIR_IMG="${HOME}/Website/img"
DIR_FILES="${HOME}/Website/files"
DIR_TAGS="${HOME}/Website/tags"
INDEXHTML="${HOME}/Website/${MENU_LINK_1}"
ABOUTHTML="${HOME}/Website/${MENU_LINK_2}"
BLOGHTML="${HOME}/Website/${MENU_LINK_3}"
DOWNLOADSHTML="${HOME}/Website/${MENU_LINK_4}"
FEEDRSS="${HOME}/Website/feed.rss"
STYLE_CSS="${HOME}/Website/css/style.css"
NORMALIZE_CSS="${HOME}/Website/css/normalize.css"
EDITOR="vim"

# checks if files exist
CHECK_FILES(){
for i in ${DIR_WEBSITE} ${DIR_POST} ${DIR_CSS} ${DIR_IMG} ${DIR_FILES} ${DIR_TAGS} ${INDEXHTML} ${ABOUTHTML} ${BLOGHTML} ${DOWNLOADSHTML} ${STYLE_CSS} ${NORMALIZE_CSS};do
[[ ! -e "${i}" ]] && { echo "$i Does not exist." ; exit 1 ; }
done
}

# generates html files
BASE_HTML(){
# index.html
if [[ ! -e "${INDEXHTML}" ]] ; then
cat <<EOF > "${INDEXHTML}"
<!DOCTYPE html>
<html lang="${LANGUAGE}">
   <head>
      <meta charset="UTF-8">
      <title>Home | ${WEBSITE_NAME}</title>
      <meta name="author" content="${AUTHOR}">
      <meta name="robots" content="index, follow" />
      <meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="description" content="${DESCRIPTION}">
      <meta name="keywords" content="index, ${WEBSITE_NAME}"/>
      <link rel="canonical" href="${WEBSITE_LINK}/${MENU_LINK_1}" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" type="text/css" href="css/normalize.css">
      <link rel="stylesheet" type="text/css" href="css/style.css">
   </head>
   <body>
      <header>
         <h1>${WEBSITE_NAME}</h1>
            <nav class="menu">
               <ul class="menu_ul">
                  <li><a class="active" href="${MENU_LINK_1}">${MENU_NAME_1}</a></li>
                  <li><a href="${MENU_LINK_2}">${MENU_NAME_2}</a></li>
                  <li><a href="${MENU_LINK_3}">${MENU_NAME_3}</a></li>
                  <li><a href="${MENU_LINK_4}">${MENU_NAME_4}</a></li>
                  <li><a href="${MENU_LINK_5}">${MENU_NAME_5}</a></li>
               </ul>
            </nav>
      </header>
      <main>
         <h2>Index</h2>
         <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>
      </main>
      <footer>
         <p>$COPYRIGHT</p>
         <p><a href="${SOCIAL_LINK_1}">${SOCIAL_NAME_1}</a> | <a href="${SOCIAL_LINK_2}">${SOCIAL_NAME_2}</a> | <a href="${SOCIAL_LINK_3}">${SOCIAL_NAME_3}</a> | <a href="${FEED_LINK}">Subscribe</a> </p>
      </footer>
   </body>
</html>

EOF

# about.html
cat <<EOF > "${ABOUTHTML}"
<!DOCTYPE html>
<html lang="${LANGUAGE}">
   <head>
      <meta charset="UTF-8">
      <title>About | ${WEBSITE_NAME}</title>
      <meta name="author" content="${AUTHOR}">
      <meta name="robots" content="index, follow" />
      <meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="description" content="${DESCRIPTION}">
      <meta name="keywords" content="about, ${WEBSITE_NAME}"/>
      <link rel="canonical" href="${WEBSITE_LINK}/${MENU_LINK_2}" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" type="text/css" href="css/normalize.css">
      <link rel="stylesheet" type="text/css" href="css/style.css">
   </head>
   <body>
      <header>
         <h1>${WEBSITE_NAME}</h1>
            <nav class="menu">
               <ul class="menu_ul">
                  <li><a href="${MENU_LINK_1}">${MENU_NAME_1}</a></li>
                  <li><a class="active" href="${MENU_LINK_2}">${MENU_NAME_2}</a></li>
                  <li><a href="${MENU_LINK_3}">${MENU_NAME_3}</a></li>
                  <li><a href="${MENU_LINK_4}">${MENU_NAME_4}</a></li>
                  <li><a href="${MENU_LINK_5}">${MENU_NAME_5}</a></li>
               </ul>
            </nav>
      </header>
      <main>
         <h2>About</h2>
         <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>
      </main>
      <footer>
         <p>$COPYRIGHT</p>
         <p><a href="${SOCIAL_LINK_1}">${SOCIAL_NAME_1}</a> | <a href="${SOCIAL_LINK_2}">${SOCIAL_NAME_2}</a> | <a href="${SOCIAL_LINK_3}">${SOCIAL_NAME_3}</a> | <a href="${FEED_LINK}">Subscribe</a> </p>
      </footer>
   </body>
</html>

EOF

# blog.html
cat <<EOF > "${BLOGHTML}"
<!DOCTYPE html>
<html lang="${LANGUAGE}">
   <head>
      <meta charset="UTF-8">
      <title>Blog | ${WEBSITE_NAME}</title>
      <meta name="author" content="${AUTHOR}">
      <meta name="robots" content="index, follow" />
      <meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="description" content="${DESCRIPTION}">
      <meta name="keywords" content="blog, ${WEBSITE_NAME}"/>
      <link rel="canonical" href="${WEBSITE_LINK}/${MENU_LINK_3}" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" type="text/css" href="css/normalize.css">
      <link rel="stylesheet" type="text/css" href="css/style.css">
   </head>
   <body>
      <header>
         <h1>${WEBSITE_NAME}</h1>
            <nav class="menu">
               <ul class="menu_ul">
                  <li><a href="${MENU_LINK_1}">${MENU_NAME_1}</a></li>
                  <li><a href="${MENU_LINK_2}">${MENU_NAME_2}</a></li>
                  <li><a class="active" href="${MENU_LINK_3}">${MENU_NAME_3}</a></li>
                  <li><a href="${MENU_LINK_4}">${MENU_NAME_4}</a></li>
                  <li><a href="${MENU_LINK_5}">${MENU_NAME_5}</a></li>
               </ul>
            </nav>
      </header>
      <main>
         <h2>Blog</h2>
         <ul class="posts">
         </ul>
      </main>
      <footer>
         <p>$COPYRIGHT</p>
         <p><a href="${SOCIAL_LINK_1}">${SOCIAL_NAME_1}</a> | <a href="${SOCIAL_LINK_2}">${SOCIAL_NAME_2}</a> | <a href="${SOCIAL_LINK_3}">${SOCIAL_NAME_3}</a> | <a href="${FEED_LINK}">Subscribe</a> </p>
      </footer>
   </body>
</html>

EOF

# downloads.html
cat <<EOF > "${DOWNLOADSHTML}"
<!DOCTYPE html>
<html lang="${LANGUAGE}">
   <head>
      <meta charset="UTF-8">
      <title>Downloads | ${WEBSITE_NAME}</title>
      <meta name="author" content="${AUTHOR}">
      <meta name="robots" content="index, follow" />
      <meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="description" content="${DESCRIPTION}">
      <meta name="keywords" content="downloads, ${WEBSITE_NAME}"/>
      <link rel="canonical" href="${WEBSITE_LINK}/${MENU_LINK_4}" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" type="text/css" href="css/normalize.css">
      <link rel="stylesheet" type="text/css" href="css/style.css">
   </head>
   <body>
      <header>
         <h1>${WEBSITE_NAME}</h1>
            <nav>
               <ul class="menu_ul">
                  <li><a href="${MENU_LINK_1}">${MENU_NAME_1}</a></li>
                  <li><a href="${MENU_LINK_2}">${MENU_NAME_2}</a></li>
                  <li><a href="${MENU_LINK_3}">${MENU_NAME_3}</a></li>
                  <li><a class="active" href="${MENU_LINK_4}">${MENU_NAME_4}</a></li>
                  <li><a href="${MENU_LINK_5}">${MENU_NAME_5}</a></li>
               </ul>
            </nav>
      </header>
      <main>
         <h2>Downloads</h2>
      </main>
      <footer>
         <p>$COPYRIGHT</p>
         <p><a href="${SOCIAL_LINK_1}">${SOCIAL_NAME_1}</a> | <a href="${SOCIAL_LINK_2}">${SOCIAL_NAME_2}</a> | <a href="${SOCIAL_LINK_3}">${SOCIAL_NAME_3}</a> | <a href="${FEED_LINK}">Subscribe</a> </p>
      </footer>
   </body>
</html>

EOF

echo "html files successfully created!"

exit 0
else
sleep 0
fi

# POST - check if blog.html file exists to create the post
if [[ -e "${BLOGHTML}" ]] ; then
cat <<EOF > "${post_dir}/${final_date}/${post_title_lower// /-}.html"
<!DOCTYPE html>
<html lang="${LANGUAGE}">
   <head>
      <meta charset="UTF-8">
      <title>Blog | ${post_title}</title>
      <meta name="author" content="${AUTHOR}">
      <meta name="robots" content="index, follow" />
      <meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="description" content="${description_post}">
      <meta name="keywords" content="${keywords}, ${WEBSITE_NAME}"/>
      <link rel="canonical" href="${WEBSITE_LINK}/post/${post_session_upper// /-}/${final_date}/${post_title_lower// /-}.html" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" type="text/css" href="../../../../../css/normalize.css">
      <link rel="stylesheet" type="text/css" href="../../../../../css/style.css">
   </head>
   <body>
      <main>
         <article class="article-post">
            <header class="header-post">
               <h1>${post_title}</h1>
               <span>by ${AUTHOR} | <time datetime="${final_date_hour}">${final_date_hour2}</time></span>
            </header>
            <p>TEXT HERE</p>
            <footer class="footer-post">
               <p>TAGS: <a href="${DIR_TAGS}/tag_${tag1_lower}.html" rel="tag">${tag1}</a> <a href="${DIR_TAGS}/tag_${tag2_lower}.html" rel="tag">${tag2}</a> <a href="${DIR_TAGS}/tag_${tag3_lower}.html" rel="tag">${tag3}</a> </p>
            </footer>
         </article>
      </main>
      <footer>
         <p>$COPYRIGHT</p>
         <p><a href="${SOCIAL_LINK_1}">${SOCIAL_NAME_1}</a> | <a href="${SOCIAL_LINK_2}">${SOCIAL_NAME_2}</a> | <a href="${SOCIAL_LINK_3}">${SOCIAL_NAME_3}</a> | <a href="../../../../../${FEED_LINK}">Subscribe</a> </p>
      </footer>
   </body>
</html>

EOF

# TAG 1
if [[ ! -e ${DIR_TAGS}/tag_${tag1_lower}.html ]] ; then
cat <<EOF > "${DIR_TAGS}/tag_${tag1_lower}.html"
<!DOCTYPE html>
<html lang="${LANGUAGE}">
   <head>
      <meta charset="UTF-8">
      <title>Blog | ${tag1_upper}</title>
      <meta name="author" content="${AUTHOR}">
      <meta name="robots" content="index, follow" />
      <meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="description" content="${description_post}">
      <meta name="keywords" content="${keywords}, ${WEBSITE_NAME}"/>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" type="text/css" href="../css/normalize.css">
      <link rel="stylesheet" type="text/css" href="../css/style.css">
   </head>
   <body>
      <header>
         <h1>${WEBSITE_NAME}</h1>
            <nav class="menu">
               <ul class="menu_ul">
                  <li><a href="../${MENU_LINK_1}">${MENU_NAME_1}</a></li>
                  <li><a href="../${MENU_LINK_2}">${MENU_NAME_2}</a></li>
                  <li><a class="active" href="../${MENU_LINK_3}">${MENU_NAME_3}</a></li>
                  <li><a  href="../${MENU_LINK_4}">${MENU_NAME_4}</a></li>
                  <li><a href="../${MENU_LINK_5}">${MENU_NAME_5}</a></li>
               </ul>
            </nav>
      </header>
      <main>
         <h2>TAG: ${tag1_upper}</h2>
         <ul>
<!-- TAG -->         
         </ul>
      </main>
         <footer>
            <p>$COPYRIGHT</p>
            <p><a href="${SOCIAL_LINK_1}">${SOCIAL_NAME_1}</a> | <a href="${SOCIAL_LINK_2}">${SOCIAL_NAME_2}</a> | <a href="${SOCIAL_LINK_3}">${SOCIAL_NAME_3}</a> | <a href="../${FEED_LINK}">Subscribe</a> </p>
         </footer>
   </body>
</html>

EOF

else
sleep 0
fi

# TAG 2
if [[ ! -e ${DIR_TAGS}/tag_${tag2_lower}.html ]] ; then
cat <<EOF > "${DIR_TAGS}/tag_${tag2_lower}.html"
<!DOCTYPE html>
<html lang="${LANGUAGE}">
   <head>
      <meta charset="UTF-8">
      <title>Blog | ${tag2_upper}</title>
      <meta name="author" content="${AUTHOR}">
      <meta name="robots" content="index, follow" />
      <meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="description" content="${description_post}">
      <meta name="keywords" content="${keywords}, ${WEBSITE_NAME}"/>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" type="text/css" href="../css/normalize.css">
      <link rel="stylesheet" type="text/css" href="../css/style.css">
   </head>
   <body>
      <header>
         <h1>${WEBSITE_NAME}</h1>
            <nav class="menu">
               <ul class="menu_ul">
                  <li><a href="../${MENU_LINK_1}">${MENU_NAME_1}</a></li>
                  <li><a href="../${MENU_LINK_2}">${MENU_NAME_2}</a></li>
                  <li><a class="active" href="../${MENU_LINK_3}">${MENU_NAME_3}</a></li>
                  <li><a href="../${MENU_LINK_4}">${MENU_NAME_4}</a></li>
                  <li><a href="../${MENU_LINK_5}">${MENU_NAME_5}</a></li>
               </ul>
            </nav>
      </header>
      <main>
         <h2>TAG: ${tag2_upper}</h2>
         <ul>
<!-- TAG -->         
         </ul>
      </main>
         <footer>
            <p>$COPYRIGHT</p>
            <p><a href="${SOCIAL_LINK_1}">${SOCIAL_NAME_1}</a> | <a href="${SOCIAL_LINK_2}">${SOCIAL_NAME_2}</a> | <a href="${SOCIAL_LINK_3}">${SOCIAL_NAME_3}</a> | <a href="../${FEED_LINK}">Subscribe</a> </p>
         </footer>
   </body>
</html>
EOF

else
sleep 0
fi

# TAG 3
if [[ ! -e ${DIR_TAGS}/tag_${tag3_lower}.html ]] ; then
cat <<EOF > "${DIR_TAGS}/tag_${tag3_lower}.html"
<!DOCTYPE html>
<html lang="${LANGUAGE}">
   <head>
      <meta charset="UTF-8">
      <title>Blog | ${tag3_upper}</title>
      <meta name="author" content="${AUTHOR}">
      <meta name="robots" content="index, follow" />
      <meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" />
      <meta name="description" content="${description_post}">
      <meta name="keywords" content="${keywords}, ${WEBSITE_NAME}"/>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" type="text/css" href="../css/normalize.css">
      <link rel="stylesheet" type="text/css" href="../css/style.css">
   </head>
   <body>
      <header>
         <h1>${WEBSITE_NAME}</h1>
            <nav class="menu">
               <ul class="menu_ul">
                  <li><a href="../${MENU_LINK_1}">${MENU_NAME_1}</a></li>
                  <li><a href="../${MENU_LINK_2}">${MENU_NAME_2}</a></li>
                  <li><a class="active" href="../${MENU_LINK_3}">${MENU_NAME_3}</a></li>
                  <li><a href="../${MENU_LINK_4}">${MENU_NAME_4}</a></li>
                  <li><a href="../${MENU_LINK_5}">${MENU_NAME_5}</a></li>
               </ul>
            </nav>
      </header>
      <main>
         <h2>TAG: ${tag3_upper}</h2>
         <ul>
<!-- TAG -->         
         </ul>
      </main>
         <footer>
            <p>$COPYRIGHT</p>
            <p><a href="${SOCIAL_LINK_1}">${SOCIAL_NAME_1}</a> | <a href="${SOCIAL_LINK_2}">${SOCIAL_NAME_2}</a> | <a href="${SOCIAL_LINK_3}">${SOCIAL_NAME_3}</a> | <a href="../${FEED_LINK}">Subscribe</a> </p>
         </footer>
   </body>
</html>
EOF
else
sleep 0
fi

# feed.rss
cat <<EOF > "${FEEDRSS}"
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>${WEBSITE_NAME}</title>
<link>${WEBSITE_LINK}</link>
<description>${DESCRIPTION}</description>
<item>
<title>${post_title}</title>
<link><${WEBSITE_LINK}/${final_date}/${post_title_lower// /-}.html"/link>
<description>${description_post}</description>
</item>
</channel>
</rss> 
EOF

else
echo "ERROR: blog.html Does not exist."
fi
}

# Create directories and execute fuction BASE_HTML
NEW(){
if [[ -d "${DIR_WEBSITE}" ]]; then
echo "Files already exist!"
exit 0
else
echo "Creating the necessary files and folders"
mkdir -v "${DIR_WEBSITE}"      ; \
mkdir -v "${DIR_POST}"      ; \
mkdir -v "${DIR_CSS}"       ; \
mkdir -v "${DIR_IMG}"       ; \
mkdir -v "${DIR_FILES}"     ; \
mkdir -v "${DIR_TAGS}"      ; \
touch "${STYLE_CSS}"        ; \
touch "${NORMALIZE_CSS}"    ; \
BASE_HTML                 ; \
exit 0
fi
}

ADD_SESSION(){

CHECK_FILES

read -ep "Session name: " new_session

# check if variable is null
if [[ -z "${new_session}" ]] ; then
echo "ERROR: name not specified"
exit 1
else
sleep 0
fi

# check if variable has special characters
if [[ "${new_session}" =~ ^[0-9A-Za-z\ ]+$ ]] && [[ "${new_session}" != *['!'@#\$%^ÀÈÌÒÙùòìèàÝÚÓÍÉÁýúóíéáÛÔÎÊÂûôîêâÕÑÃõñãŸÜÖÏËÄÿüöïëäÇç\&*()_+]* ]] ; then
sleep 0
else
echo "ERROR: has special characters"
exit 1
fi

# variables
local new_session_upper="${new_session^^}"
local new_session_lower="${new_session,,}"
local pattern_ul='<ul class="posts">'

# check if directory already exists 
if [[ ! -d "${DIR_POST}/${new_session_upper// /-}" ]]; then
mkdir -v "${DIR_POST}/${new_session_upper// /-}"
else
echo "ERROR: directory already exists"
exit 1
fi

# add to html tags for list creation below the <ul class="posts"> tag
sed -i '/'"${pattern_ul}"'/a <\!-- SESSION:'"${new_session_upper// /-}"' -->' ${BLOGHTML}
sed -i '/<\!-- SESSION:'"${new_session_upper// /-}"' -->/a <\!-- SESSION-END:'"${new_session_upper// /-}"' -->' ${BLOGHTML}
sed -i 's/<\!-- SESSION:'"${new_session_upper// /-}"' -->/<\!-- SESSION:'"${new_session_upper// /-}"' -->\n<li class="'"${new_session_lower// /-}"'">\n<h3>'"${new_session_upper}"'<\/h3>\n<ul class="'"${new_session_lower// /-}"'">\n<\/ul>/' ${BLOGHTML}
}

DEL_SESSION(){

CHECK_FILES

read -ep "Session name: " session_name

# variables
local session_name_upper="${session_name^^}"
local session_name_lower="${session_name,,}"

# check if session exists
if grep -qow '<ul class="'"${session_name_lower// /-}"'">' ${BLOGHTML} ; then
sleep 0
else
echo "ERROR: Session does not exist!."
exit 1
fi

# asks if you want to delete session
read -p "Delete ${session_name_upper} session??? [y/n]: " question

if [ "${question}" != "${question#[Yy]}" ] ;then
echo "Deleting ${session_name_upper}"
sed -i '/<\!-- SESSION:'"${session_name_upper// /-}"' -->/,/<\!-- SESSION-END:'"${session_name_upper// /-}"' -->/d' ${BLOGHTML}
sed -i '/^<!-- SESSION:'"${session_name_upper// /-}"' .*/,/^<!-- SESSION:'"${session_name_upper// /-}"' .*/d' ${DIR_TAGS}/*.html
grep -rIL "<\!-- SESSION:.*" ${DIR_TAGS}/*.html 2>/dev/null | xargs rm -rv 2>/dev/null
else
echo "preserved "${session_name}".html session"
exit 0
fi

# asks if you want to delete session directory
read -p "Delete directory session ${session_name_upper// /-}??? [y/n]: " question2
read -ep "CAUTION: this will delete all html posts contained in the directory, are you sure you want to continue? [y/n]: " question2

if [[ "${question2}" != "${question2#[Yy]}" ]] ; then
echo "Deleting directory ${session_name_upper// /-}"
rm -rv ${DIR_POST}/${session_name_upper// /-}
else
echo "Directory "${session_name_upper// /-}" preserved"
exit 0
fi
}

ADD_POST(){

CHECK_FILES

read -ep "Add to session: " post_session

# variables
local post_session_upper="${post_session^^}"
local post_session_lower="${post_session,,}"

# check if session exists
if grep -qow '<ul class="'"${post_session_lower// /-}"'">' ${BLOGHTML} ; then
sleep 0
else
echo "ERROR: Session does not exist!."
exit 1
fi

# post dir
local post_dir="${DIR_POST}/${post_session_upper// /-}"

# Date default ISO-8601

# Year
local year=$(date +%Y)

if [[ ! -d "${post_dir}/${year}" ]]; then
mkdir -v "${post_dir}/${year}"
else
sleep 0
fi

# Month
local month=$(date +%m)

if [[ ! -d "${post_dir}/${year}/${month}" ]]; then
mkdir -v "${post_dir}/${year}/${month}"
else
sleep 0
fi

# Day
local day=$(date +%d)

if [[ ! -d "${post_dir}/${year}/${month}/${day}" ]]; then
mkdir -v "${post_dir}/${year}/${month}/${day}"
else
sleep 0
fi

# Final date post.
local final_date="$(date +%Y/%m/%d)"
local final_date_hour="$(date +"%Y-%m-%d %R:%S" | xargs)"
local final_date_hour2="$(date +"%Y-%m-%d - %R:%S" | xargs)"

read -ep "Post title: " post_title

local post_title_upper="${post_title^^}"
local post_title_lower="${post_title,,}"

# check if variable is null
if [[ -z "${post_title}" ]] ; then
echo "ERROR: no name specified"
exit 1
else
sleep 0
fi

# check if variable has special characters
if [[ "${post_title}" =~ ^[0-9A-Za-z\ ]+$ ]] && [[ "${post_title}" != *['!'@#\$%^ÀÈÌÒÙùòìèàÝÚÓÍÉÁýúóíéáÛÔÎÊÂûôîêâÕÑÃõñãŸÜÖÏËÄÿüöïëäÇç\&*()_+]* ]] ; then
sleep 0
else
echo "ERROR: has special characters"
exit 1
fi

read -p "Keywords: " keywords

# tags - get tag name
for i in 1 2 3
do
read -ep "Tag[${i}]: " tag
eval "tag${i}=${tag// /-}"
done

# variable local - link of the tags to lowercase
local tag1_lower="${tag1,,}"
local tag2_lower="${tag2,,}"
local tag3_lower="${tag3,,}"
local tag1_upper="${tag1^^}"
local tag2_upper="${tag2^^}"
local tag3_upper="${tag3^^}"


# check if variable is null
if [[ -z "${tag1}" ]] ; then
echo "ERROR: no name specified"
exit 1
else
sleep 0
fi

# check if variable is null
if [[ -z "${tag2}" ]] ; then
echo "ERROR: no name specified"
exit 1
else
sleep 0
fi

# check if variable is null
if [[ -z "${tag3}" ]] ; then
echo "ERROR: no name specified"
exit 1
else
sleep 0
fi

# check if variable has special characters
if [[ "${tag1}" =~ ^[0-9A-Za-z\ -]+$ ]] && [[ "${tag1}" != *['!'@#\$%^ÀÈÌÒÙùòìèàÝÚÓÍÉÁýúóíéáÛÔÎÊÂûôîêâÕÑÃõñãŸÜÖÏËÄÿüöïëäÇç\&*()_+]* ]] ; then
sleep 0
else
echo "ERROR: has special characters"
exit 1
fi

# check if variable has special characters
if [[ "${tag2}" =~ ^[0-9A-Za-z\ -]+$ ]] && [[ "${tag2}" != *['!'@#\$%^ÀÈÌÒÙùòìèàÝÚÓÍÉÁýúóíéáÛÔÎÊÂûôîêâÕÑÃõñãŸÜÖÏËÄÿüöïëäÇç\&*()_+]* ]] ; then
sleep 0
else
echo "ERROR: has special characters"
exit 1
fi

# check if variable has special characters
if [[ "${tag3}" =~ ^[0-9A-Za-z\ -]+$ ]] && [[ "${tag3}" != *['!'@#\$%^ÀÈÌÒÙùòìèàÝÚÓÍÉÁýúóíéáÛÔÎÊÂûôîêâÕÑÃõñãŸÜÖÏËÄÿüöïëäÇç\&*()_+]* ]] ; then
sleep 0
else
echo "ERROR: has special characters"
exit 1
fi

# check if variables have the same names
if [[ "${tag1}" == "${tag2}" ]] ; then
echo "ERROR: repeated tag name"
exit 1
elif [[ "${tag1}" == "${tag3}" ]] ; then
echo "ERROR: repeated tag name"
exit 1
elif [[ "${tag2}" == "${tag1}" ]] ; then
echo "ERROR: repeated tag name"
exit 1
elif [[ "${tag2}" == "${tag3}" ]] ; then
echo "ERROR: repeated tag name"
exit 1
elif [[ "${tag3}" == "${tag1}" ]] ; then
exit 1
echo "ERROR: repeated tag name"
exit 1
elif [[ "${tag3}" == "${tag2}" ]] ; then
echo "ERROR: repeated tag name"
exit 1
else
sleep 0
fi

read -p "Description post (150 chars): " description_post

# checks if post already exists
if [[ -e "${post_dir}/${final_date}/${post_title_lower// /-}".html ]]; then
echo "ERROR: "${post_dir}/${final_date}/${post_title_lower// /-}".html already exists!."
exit 1
else
sleep 0
fi

# executes BASE_HTML fuction
BASE_HTML

# check if the directories and html were created correctly
if [[ -e "${post_dir}/${final_date}/${post_title_lower// /-}".html ]]; then

# add post link to blog.html
sed -i "/<ul class=\"${post_session_lower// /-}\">/a <li><article><a href=\"post\/${post_session_upper// /-}/${final_date}/${post_title_lower// /-}.html\" title=\"${post_title}\">${post_title} | <time datetime=\"${final_date_hour}\">${final_date}</time></a></article></li> " ${BLOGHTML}

# EDITOR
"${EDITOR}" "${post_dir}/${final_date}/${post_title_lower// /-}".html

# tags 
# TAG 1
sed -i "/<!-- TAG -->/a <\!-- SESSION:${post_session_upper// /-} - POST-END:${post_title_lower// /-} -->" ${DIR_TAGS}/tag_${tag1_lower}.html
sed -i "/<!-- TAG -->/a <\!-- SESSION:${post_session_upper// /-} - POST:${post_title_lower// /-} -->" ${DIR_TAGS}/tag_${tag1_lower}.html
sed -i "/<\!-- SESSION:${post_session_upper// /-} - POST:${post_title_lower// /-} -->/a <li><article><a href=\"../post\/${post_session_upper// /-}/${final_date}/${post_title_lower// /-}.html\" title=\"${post_title}\">${post_title} | <time datetime=\"${final_date_hour}\">${final_date}</time></a></article></li>" ${DIR_TAGS}/tag_${tag1_lower}.html

# TAG 2
sed -i "/<!-- TAG -->/a <\!-- SESSION:${post_session_upper// /-} - POST-END:${post_title_lower// /-} -->" ${DIR_TAGS}/tag_${tag2_lower}.html
sed -i "/<!-- TAG -->/a <\!-- SESSION:${post_session_upper// /-} - POST:${post_title_lower// /-} -->" ${DIR_TAGS}/tag_${tag2_lower}.html
sed -i "/<\!-- SESSION:${post_session_upper// /-} - POST:${post_title_lower// /-} -->/a <li><article><a href=\"../post\/${post_session_upper// /-}/${final_date}/${post_title_lower// /-}.html\" title=\"${post_title}\">${post_title} | <time datetime=\"${final_date_hour}\">${final_date}</time></a></article></li>" ${DIR_TAGS}/tag_${tag2_lower}.html

# TAG 3
sed -i "/<!-- TAG -->/a <\!-- SESSION:${post_session_upper// /-} - POST-END:${post_title_lower// /-} -->" ${DIR_TAGS}/tag_${tag3_lower}.html
sed -i "/<!-- TAG -->/a <\!-- SESSION:${post_session_upper// /-} - POST:${post_title_lower// /-} -->" ${DIR_TAGS}/tag_${tag3_lower}.html
sed -i "/<\!-- SESSION:${post_session_upper// /-} - POST:${post_title_lower// /-} -->/a <li><article><a href=\"../post\/${post_session_upper// /-}/${final_date}/${post_title_lower// /-}.html\" title=\"${post_title}\">${post_title} | <time datetime=\"${final_date_hour}\">${final_date}</time></a></article></li>" ${DIR_TAGS}/tag_${tag3_lower}.html

echo "POST "${post_dir}/${final_date}/${post_title_lower// /-}".html CREATED SUCCESSFULLY!"
else
echo "ERROR: "${post_dir}/${final_date}/${post_title_lower// /-}".html NOT CREATED!"  
exit 1
fi

}

DEL_POST(){

CHECK_FILES

read -ep "Post session: " post_session

# variables
local post_session_upper="${post_session^^}"
local post_session_lower="${post_session,,}"

# check if session exists
if grep -qow '<ul class="'"${post_session_lower// /-}"'">' ${BLOGHTML} ; then
sleep 0
else
echo "ERROR: Session does not exist!."
exit 1
fi

# Year
read -p "Year: " year_post

# check if variable is null
if [[ -z "${year_post}" ]] ; then
echo "ERROR: name not specified"
exit 1
else
sleep 0
fi

# checks if the variable has only four digits
if [[ "${year_post}" = ?(+|-)+([0-9]) ]] && [[ "${#year_post}" -eq 4 ]] ; then 
sleep 0
else
echo "ERROR: value must be numeric and only have four digits"
exit 1
fi

# Month
read -ep "Month: " month_post

# check if variable is null
if [[ -z "${month_post}" ]] ; then
echo "ERROR: name not specified"
exit 1
else
sleep 0
fi

# checks if the variable has only two digits
if [[ "${month_post}" = ?(+|-)+([0-9]) ]] && [[ "${#month_post}" -eq 2 ]] ; then 
sleep 0
else
echo "ERROR: value must be numeric and only have two digits"
exit 1
fi

# Day
read -ep "Day: " day_post

# check if variable is null
if [[ -z "${day_post}" ]] ; then
echo "ERROR: name not specified"
exit 1
else
sleep 0
fi

read -ep "Post title: " post_title

# variables
local post_title_upper="${post_title^^}"
local post_title_lower="${post_title,,}"

# check if variable is null
if [[ -z "${post_title}" ]] ; then
echo "ERROR: name not specified"
exit 1
else
sleep 0
fi

# check if variable has special characters
if [[ "${post_title}" =~ ^[0-9A-Za-z\ ]+$ ]] && [[ "${new_session}" != *['!'@#\$%^ÀÈÌÒÙùòìèàÝÚÓÍÉÁýúóíéáÛÔÎÊÂûôîêâÕÑÃõñãŸÜÖÏËÄÿüöïëäÇç\&*()_+]* ]] ; then
sleep 0
else
echo "ERROR: has special characters"
exit 1
fi

# Checks if html file exists
if [[ -e "${DIR_POST}/${post_session_upper// /-}/${year_post}/${month_post}/${day_post}/${post_title_lower// /-}.html" ]] ; then
sleep 0
else
echo "ERROR: ${post_title_lower// /-}.html file does not exist!."
exit 1
fi

# checks if the variable has only two digits
if [[ "${day_post}" = ?(+|-)+([0-9]) ]] && [[ "${#day_post}" -eq 2 ]] ; then 
sleep 0
else
echo "ERROR: value must be numeric and only have two digits"
exit 1
fi

# asks if you want to delete the html file

read -p "Delete "${post_title_lower// /-}".html file??? [y/n]: " question

if [ "${question}" != "${question#[Yy]}" ] ;then
echo "Deleting ${post_title_lower// /-}"
sed -i '/<li><article><a href="post\/'"${post_session_upper// /-}"'\/'"${year_post}"'\/'"${month_post}"'\/'"${day_post}"'\/'"${post_title_lower// /-}"'.html" title=\"'"${post_title_lower}"'\">/d' ${BLOGHTML}
sed -i '/<\!-- SESSION:'"${post_session_upper// /-}"' - POST:'"${post_title_lower// /-}"' -->/,/<\!-- SESSION:'"${post_session_upper// /-}"' - POST-END:'"${post_title_lower// /-}"' -->/d' ${DIR_TAGS}/*.html
rm -vr "${DIR_POST}/${post_session_upper// /-}/${year_post}/${month_post}/${day_post}/${post_title_lower// /-}.html"
grep -rIL "<\!-- SESSION:.*" ${DIR_TAGS}/*.html 2>/dev/null | xargs rm -rv 2>/dev/null
else
echo "preserved "${post_title_lower// /-}".html file"
exit 0
fi

# delete the day directory if empty
if [ -z "$(ls -A ${DIR_POST}/${post_session_upper// /-}/${year_post}/${month_post}/${day_post}/)" ]; then
rmdir -v "${DIR_POST}/${post_session_upper// /-}/${year_post}/${month_post}/${day_post}/"
else
sleep 0 
fi

# delete the month directory if empty
if [ -z "$(ls -A ${DIR_POST}/${post_session_upper// /-}/${year_post}/${month_post}/)" ]; then
rmdir -v "${DIR_POST}/${post_session_upper// /-}/${year_post}/${month_post}/"
else
sleep 0
fi

# delete the year directory if empty
if [ -z "$(ls -A ${DIR_POST}/${post_session_upper// /-}/${year_post}/)" ]; then
rmdir -v "${DIR_POST}/${post_session_upper// /-}/${year_post}/"
else
sleep 0
fi
}

BROWSER(){
CHECK_FILES
x-www-browser "${INDEXHTML}"
}

HELP()
{
cat <<EOF
bashblog v1.0

This script creates a base for a website in html5, configure the variables in in double quotes, do not change the paths, the html files are created through the BASE_HTML fuction.

USAGE:
./bashblog [OPTIONS]

Arguments:
   -n
     Create necessary files and folders

   -s
     Adds new session
   
   -ds
     Delete session

   -p
     Adds new post to session

   -dp
     Delete post

   -b
     Opens website in browser

EOF
}

case $1 in
             "-n")  NEW            ;            ;;
             "-s")  ADD_SESSION      ;            ;;
             "-ds") DEL_SESSION      ;            ;;
             "-p")   ADD_POST      ;            ;;
             "-dp")   DEL_POST      ;            ;;
             "-b")   BROWSER         ;            ;;
                *)  HELP         ;  exit 1   ;   ;;
esac


Scripts recomendados

Sysinfo versão 0.7

Script simples para fazer backup em fita DAT

Procurando um padrão num arquivo

Script para criação de pacote rpm.

Baixar pdf do "slide share" sem login usando shell script


  

Comentários
[1] Comentário enviado por maurixnovatrento em 17/03/2021 - 21:56h


Muito Top.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts