Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Šta izabrati? Bash ili Python?

[es] :: Skript jezici :: Šta izabrati? Bash ili Python?

Strane: < .. 1 2 3

[ Pregleda: 6255 | Odgovora: 59 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 717



+125 Profil

icon Re: Šta izabrati? Bash ili Python?21.12.2018. u 15:49 - pre 26 meseci
Citat:
kako da umesto da mi ispiše invalid da me pita ponovo da izaberem read -n1 status

Koristi while petlju, na primer:
Code:
while true
do
    echo "Do you want to continue with script? Chose y or n:"
    read -n1 status
    case $status in
        n|N ) exit 1;;
        y|Y ) echo "";;
        * ) echo "invalid";;
    esac
done


Citat:
Hoću da prilikom startovanja nginx servisa dobijem info da li je startovan ili nije

Code:
[[ -e /var/run/nginx.pid ]] && echo "nginx service is running"
 
Odgovor na temu

CoyoteKG

Član broj: 70939
Poruke: 2771



+6824 Profil

icon Re: Šta izabrati? Bash ili Python?21.12.2018. u 15:55 - pre 26 meseci
Citat:
Zlatni_bg:
Cemu --quiet parametar? Sto jednostavno ne ides "systemctl is-active httpd" i to citas kao parametar?

edit: nginx, ali ista stvar je u pitanju

Ne utiče to baš na moj problem.
Lakše mi bilo da dobijem 0 nego active/inactive

Citat:
plus_minus: To odmah vežeš za proces i znaš kasnije ili ubijaš na silu, na zahtev.

Video sam i ovaj primer, ali mi je nekako za moj slucaj manje pisanja bilo ovaj nacin jer meni je samo potrebno da se nastavi sa izvrsavanjem ili ne u slucaju da zbog nekog problema nginx nije uspeo da se startuje.


probacu sa while, mada mi u ovom momentu ovako laicki nije jasno jer sva ova 3 cases su verovatno true. Meni treba ako je user greskom uneo neki karakter umesto n,N,y,Y da ga pita ponovo
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 717



+125 Profil

icon Re: Šta izabrati? Bash ili Python?21.12.2018. u 16:15 - pre 26 meseci
Citat:
Meni treba ako je user greskom uneo neki karakter umesto n,N,y,Y da ga pita ponovo

Da pitace ga ponovo sve dok ne izabere n. Treba ti uslov za while koji je u gornjem primeru uvek true, za tvoj skript uslov moze da bude sve dok nginx nje pokrenut, na primer:
Code:
while ! [[ -e /var/run/nginx.pid ]]; do ...

ili sa until:
Code:
until [[ -e /var/run/sshd.pid ]]; do ...
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 717



+125 Profil

icon Re: Šta izabrati? Bash ili Python?21.12.2018. u 17:01 - pre 26 meseci
Citat:
ps aux | grep "[p]hp -S ${host}:${port}" | awk '{print $2}'

Tri nova procesa da se samo proveri da li je neki proces pokrenut? Zar nije jednostavnije samo sa pgrep, pidof, ps -C ime_procesa?
 
Odgovor na temu

CoyoteKG

Član broj: 70939
Poruke: 2771



+6824 Profil

icon Re: Šta izabrati? Bash ili Python?21.12.2018. u 17:49 - pre 26 meseci
nisam objasnio dobro. Ne zelim ja da uslov stoji dok nginx nije pokrenut, jer mozda se desilo da se zbog neke greske, recimo u nekom conf fajlu, nije podigao nginx.
I onda samo zelim da ponudim da onaj ko je pokrenuo skriptu
1. prekine ostatak skripte (one sa pocetka teme)
2. da nastavi dalje sa izvrsavanjem skripte
3. da ukoliko nije izabrao greskom y ili n, da ga pita ponovo.

Ali while mi je pomoglo pa sam iskombinovao i napravio ovakvu skriptu koja mi radi posao


#!/bin/bash

systemctl is-active --quiet nginx
if [ $? == 0 ]; then
echo "nginx service is up and running"
else
echo "* [ERROR] Apache service did not started successfully"
echo "Do you want to continue with script? Type Y or N"

while true; do
read -r -p "[Y/N]: " status
case $status in
[nN]) exit 1 ;;
[yY]) break ;;
esac
done
fi

echo "idemo dalje sa skriptom"


Svidja mi se ovo tvoje [[-e /var/run/nginx.pid]]. Najefikasnije :)
 
Odgovor na temu

CoyoteKG

Član broj: 70939
Poruke: 2771



+6824 Profil

icon Re: Šta izabrati? Bash ili Python?25.12.2018. u 08:51 - pre 26 meseci
Citat:
nkrgovic:
Code:
 chcon -Rt httpd_sys_content_t /var/www/

Ovo ce ti se pokarabasiti vremenom. Probaj sa
Code:
semanage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?"

pa onda samo restorecon.

Sad je jasno.
chcon nije trajno rešenje, i nekad u budućnosti kad bih koristio semanage i okinuo restorecon posle toga, to što sam setovao bi bilo prepisano prethodnim vrednostima iz /etc/selinux/targeted/contexts/files/file_contexts.local

Evo zapisano ako nekom zatrebaju baš osnove.

https://www.digitalocean.com/c...centos-7-part-1-basic-concepts
https://www.digitalocean.com/c...s-7-part-2-files-and-processes
https://www.digitalocean.com/c...linux-on-centos-7-part-3-users



A skriptu sam skoro pa završio. Nisam imam baš vremena ovih dana, pa ću večeras da je okačim da vidimo da li je sad kako treba ili moze bolje :)

[Ovu poruku je menjao CoyoteKG dana 25.12.2018. u 10:21 GMT+1]
 
Odgovor na temu

CoyoteKG

Član broj: 70939
Poruke: 2771



+6824 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 00:08 - pre 26 meseci
Evo skoro završio skriptu. Ostalo samo još da napravim rulove i error handling za firewalld i selinux
Je l' ovo ono kako skripta treba da izgleda? Doduše pronašao sam 2 greške.

Code (bash):
#! /bin/bash
# This script will install Jenkins on CentOS 7 minimal ISO

PASSWORD="nekipass"
DOMAIN="jenkins.domain.cc"

jenkinsrepo="http://pkg.jenkins-ci.org/redhat/jenkins.repo"
jenkinskey="https://jenkins-ci.org/redhat/jenkins-ci.org.key"

vhost=$(cat <<EOF
server {

listen 80;
server_name $DOMAIN;

        location / {

          proxy_set_header        Host \$host:\$server_port;
          proxy_set_header        X-Real-IP \$remote_addr;
          proxy_set_header        X-Forwarded-For \$proxy_add_x_forwarded_for;
          proxy_set_header        X-Forwarded-Proto \$scheme;

                # Fix the "It appears that your reverse proxy set up is broken" error.
                proxy_pass          http://127.0.0.1:8080;
                proxy_read_timeout  90;

                proxy_redirect      http://127.0.0.1:8080 http://$DOMAIN;

                # Required for new HTTP-based CLI
                proxy_http_version 1.1;
                proxy_request_buffering off;
                # workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651
                add_header X-SSH-Endpoint jenkins.domain.tld:50022 always;
        }
}
EOF

)


# User with root privileges is required
if [ "$EUID" -ne 0 ]
then
    echo "* [ERROR] Run this script under 'sudo -s' or as root"
    exit 1
fi


# installing useful tools
yum -y install vim net-tools wget telnet


# install nginx and create vhost
yum -y install epel-release
yum -y install nginx

if [ ! -d "/etc/nginx/sites-available"  ]; then
        mkdir /etc/nginx/sites-available
else
        echo "directory /etc/nginx/sites-available already exist"
fi

if [ ! -d "/etc/nginx/sites-enabled"  ]; then
        mkdir /etc/nginx/sites-enabled
else
        echo "directory /etc/nginx/sites-enabled already exist"
fi

if [[ ! -e /etc/nginx/sites-available/$DOMAIN.conf ]]; then
     echo "${vhost}" > /etc/nginx/sites-available/$DOMAIN.conf
else

echo "$DOMAIN.conf already exist"
echo "Do you want to overwrite .conf file?"
while true; do
read -r -p "[Y/N]: " overwrite
case $overwrite in
[nN]) break ;;
[yY]) echo "${vhost}" > /etc/nginx/sites-available/$DOMAIN.conf
break;;
esac
done
fi

incld=`grep -r "include \/etc\/nginx\/sites-enabled\/\*.conf;" /etc/nginx/nginx.conf | wc -l`
if [[ $incld  == 0 ]]; then
sed -i '/http {/a include /etc/nginx/sites-enabled/*.conf;' /etc/nginx/nginx.conf
else
echo "this line is included in conf file"
fi

bcktsize=`grep -r "#server_names_hash_bucket_size 64;" /etc/nginx/nginx.conf | wc -l`
if [[ $bcktsize  == 0 ]]; then
sed -i '/http {/a #server_names_hash_bucket_size 64;' /etc/nginx/nginx.conf
else
echo "this line is included in conf file"
fi

if [[ ! -L "/etc/nginx/sites-enabled/$DOMAIN.conf" ]]; then
ln -s /etc/nginx/sites-available/$DOMAIN.conf /etc/nginx/sites-enabled/$DOMAIN.conf
else
echo "symlink elready exist"
echo "Do you want to overwrite symlink?"

while true; do
        read -r -p "[Y/N]: " status
        case $status in
                [nN]) break ;;
                [yY]) ln -s /etc/nginx/sites-available/$DOMAIN.conf /etc/nginx/sites-enabled/$DOMAIN.conf ;;
        esac
done
fi

systemctl enable nginx
systemctl start nginx
systemctl is-active --quiet nginx
if [ $? == 0 ]; then
        echo "nginx service is up and running"
else
        echo "* [ERROR] nxinx service did not started successfully"
        echo ""
        tail /var/log/nginx/error.log
        echo ""
        echo "Do you want to continue with script, and later fix nginx issues?"

while true; do
        read -r -p "[Y/N]: " status
        case $status in
                [nN]) exit 1 ;;
                [yY]) break ;;
        esac
done
fi


# Install Java and Jenkins
if [[ `whereis jenkins | wc -l` == 0 ]]; then
        httpcoderepo=`curl --write-out %{http_code} --silent --output /dev/null $jenkinsrepo`
        httpcodekey=`curl --write-out %{http_code} --silent --output /dev/null $jenkinskey`
        if ([ $httpcoderepo ==  200 ] || [ $httpcoderepo ==  301 ]) && ([ $httpcodekey ==  200 ] || [ $httpcodekey ==  301 ]); then
                echo "Starting with Jenkins installation"
        else
                echo "[ERROR] repo links are outdated"
                echo "Please check https://wiki.jenkins.io/displa...nkins+on+Red+Hat+distributions"
                echo "and update links at the begining of this script."
                echo ""
                echo "Do you want to continue with script, and later fix outdated links?"
        while true; do
                read -r -p "[Y/N]: " status
                case $status in
                        [nN]) exit 1 ;;
                        [yY]) break ;;
                esac
        done
        fi
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
yum -y install jenkins java
else
        echo "Jenkins is already installed"
fi

systemctl enable jenkins
systemctl start jenkins
systemctl is-active --quiet nginx
if [ $? == 0 ]; then
        echo "jenkins is up and running"
else
        echo "* [ERROR] jenkins service did not started successfully"
        echo ""
        tail /var/log/jenkins/jenkins.log
        echo ""
        echo "Do you want to continue with script, and later fix jenkins issues?"
while true; do
        read -r -p "[Y/N]: " status
        case $status in
                [nN]) exit 1 ;;
                [yY]) break ;;
        esac
done
fi

# Setup firewall rules
systemctl stop firewalld
systemctl disable firewalld

#set selinux
yum install -y setroubleshoot-server selinux-policy-devel
semanage port -m -t http_port_t -p tcp 8080
systemctl restart nginx jenkins

# enable jenkins user to login to ssh and create keys
essstatus=`passwd --status jenkins | awk '{print $2}'`
if [[ $passstatus == "P" ]] || [[ $passstatus == "PS" ]]; then
        echo "password for username jenkins is already set. Do you want to reset it?"
        while true; do
                read -r -p "[Y/N]: " passyesno
                case $passyesno in
                [yY])
                echo -e "$PASSWORD\n$PASSWORD" | passwd jenkins
                break;;
                [nN]) break ;;
                esac
        done
else
echo -e "$PASSWORD\n$PASSWORD" | passwd jenkins
fi

usermod -s /bin/bash jenkins

if [[ ! -e /var/lib/.ssh/id_rsa ]]; then
        mkdir /var/lib/jenkins/.ssh
        ssh-keygen -f /var/lib/jenkins/.ssh/id_rsa -t rsa -N ''
        cat /var/lib/jenkins/.ssh/id_rsa.pub >> /var/lib/jenkins/.ssh/authorized_keys
        chown -R jenkins /var/lib/jenkins/.ssh/
else
        echo "file /var/lib/.ssh/id_rsa already exist"
        echo "do you want to overwrite it? Be carefull, because existing key if is in a function will be overwriten"
        while true; do
                read -r -p "[Y/N]: " status
                case $status in
                [nN]) break ;;
                [yY])
                mkdir /var/lib/jenkins/.ssh
                ssh-keygen -f /var/lib/jenkins/.ssh/id_rsa -t rsa -N ''
                cat /var/lib/jenkins/.ssh/id_rsa.pub >> /var/lib/jenkins/.ssh/authorized_keys
                chown -R jenkins /var/lib/jenkins/.ssh/
                ;;
                esac
        done
fi


hst=`grep -r "Host *" /var/lib/jenkins/.ssh/config | wc -l`
keychk=`grep -r "StrictHostKeyChecking=no" /var/lib/jenkins/.ssh/config | wc -l`
if ([ $hst  == 0 ] &&  [ $keychk  == 0 ]) || [ ! -f  /var/lib/jenkins/.ssh/config ]; then
echo -e 'Host *\nStrictHostKeyChecking=no' >> /var/lib/jenkins/.ssh/config
else
echo "this line is included in config file"
fi
 
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 717



+125 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 09:23 - pre 26 meseci
Citat:
Je l' ovo ono kako skripta treba da izgleda?

Ako radi ono za šta je namenjena, uvek kasnije možeš da je doradiš. Na primer, da `command` zameniš sa $(command) kao na početku skripta.
http://mywiki.wooledge.org/BashFAQ/082
Da proveru da li je skript pokrenut sa root privilegijama izvršiš na početku skripta.
Da proveriš da li je nešto već instalirano pre nego što ga instaliraš, na primer: command -v wget >/dev/null || yum -y install wget.
Da je učiniš portabilnom, tj. da ti pored CentOSa služi i za instalaciju na drugim dristribucijama, npr. Ubuntu, Debian i ostale DEB based:
Code:
if command -v yum >/dev/null; then
    command=yum
elif command -v apt >/dev/null; then
    command=apt
fi

Naravno, zameniš repoe i ključeve u zavisnosti od distribucije, npr. declare -A repos=(["centos"]=cent-os-repo ["ubuntu"]=ubuntu-repo), itd.. Ovo je samo primer, mada mislim da nisu potrebne neke veće izmene.
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12705



+4688 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 09:32 - pre 26 meseci
#offtopic

Pocecemo uskoro da srecemo CoyoteKG na programerskim forumima, vidim ja :)
 
Odgovor na temu

CoyoteKG

Član broj: 70939
Poruke: 2771



+6824 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 09:45 - pre 26 meseci
Super onda... zadovoljan sam :)

Samo još da skontam te kraće načine if petlji koje ti iz par navrata si mi dao primere ovde u temi.

Počeo sam i sa ovim kursem
https://linuxacademy.com/linux...ators-guidep-to-bash-scripting

^
Pa sigurno u Python delu foruma, samo da dodje na red :)


Code (bash):
# enable jenkins user to login to ssh and create keys
essstatus=`passwd --status jenkins | awk '{print $2}'`
if [[ $passstatus == "P" ]] || [[ $passstatus == "PS" ]]; then
        echo "password for username jenkins is already set. Do you want to reset it?"
        while true; do
                read -r -p "[Y/N]: " passyesno
                case $passyesno in
                [yY])
                echo -e "$PASSWORD\n$PASSWORD" | passwd jenkins
                break;;
                [nN]) break ;;
                esac
        done
else
echo -e "$PASSWORD\n$PASSWORD" | passwd jenkins
fi

Jedan od problema koji imam je u ovom primeru.
Buni me while petlja. Kad izaberem Y, i okine se ova komanda, ne završi se petlja nego me ponovo pita. Pa sam rešio tako što sam posle komande stavio break.
Što me zeza na ovom mestu, a kod nekih drugih primera ne?
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12705



+4688 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 10:25 - pre 26 meseci
Imas while true. Umesto tog "true" stavi uslov pod kojim hoces da vrti petlju. Kad uslov nije ispunjen, vise nece prolaziti. U ovom slucaju ti je uslov nesto tipa kad @passyesno nije y, Y, n ili N, kako god se to u bash sintaksi pisalo :)
U trenutnom stanju, vrti unedogled jer je true uvek tacno :)
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 717



+125 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 10:30 - pre 26 meseci
while true se izvršava neograničeno (infinite loop), iz razloga zato što nema uslova koji bi prekinuo izvršavanje, dok break prekida izvršavanje i izlazi iz petlji.
 
Odgovor na temu

CoyoteKG

Član broj: 70939
Poruke: 2771



+6824 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 10:36 - pre 26 meseci
Jasno. Znaci treba da stavim while $passyesno == yYnN?
Samo da nadjem kako da napisem to.

mozda nesto kao $passyesno == y || Y || n || N
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12705



+4688 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 10:41 - pre 26 meseci
Ne bih rekao da je nesto od toga em sintaksno, em zato sto hoces da vrti dok nije nesto od tih slova. Pre ce biti not @passyesno in [yYnN] ili tako nesto.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3004

Jabber: djoka_l


+1268 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 10:43 - pre 26 meseci
Sve je bolje. Ali još nema funkcija:

evo jednog malog primera. Prouči program, onda ga modifikuj tako da funkcija YesNo dobije još jedan parametar, komandu koju treba da izvrši ako je odgovor potvrdan, na primer

YesNo -c "ls -al"

Code:
#!/bin/bash
#
# Primer korišćenja funkcija u bash
# djoka_l za elitesecurity
#
# 2018-12-26

# Keyword function je opcioni

function YesNo () {

# definišem lokalne varijable da se ne bi preklopile sa nekom varijablom u ostatku skripta
local prompt=""
local defY="[Y/n]"
local defN="[y/N]"
local defAns=$defY
local default=0

# ovako se procesiraju ulazni parametri funkcije. Oni su $1, $2, ... $n
while [ -n "$1" ]
do
   case $1 in
      -p) shift                 # shift pomera parametre, tako da drugi postane prvi itd.
          prompt=$1 ;;
      -y) default=0
          defAns=$defY;;
      -n) default=1
          defAns=$defN ;;
   esac
   shift
done

read -r -p "$prompt $defAns : " status
  case $status in
     [nN]) return 1 ;;
     [yY]) return 0 ;;
        *) return $default ;;
  esac

}

YesNo && echo DA
YesNo -n || echo NE
YesNo -p "Da li je duže ili zelenije?" && echo confused || echo even more confused
 
Odgovor na temu

CoyoteKG

Član broj: 70939
Poruke: 2771



+6824 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 10:44 - pre 26 meseci
ne znam sintaksu, sad cu da probam.

U principu, poenta je ako neko izabere nesto bilo sta drugo osim tih karaktera, da ponovo vrti.
Sto se da.... sad vidim, svodi na to sto si ti napisao :D
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4263
*.dynamic.sbb.rs.



+490 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 15:23 - pre 26 meseci
Pomagajuci nekome sa vise elektrotehnicke danas za neki kolokvijum, dosao sam do njihovog PDF materijala. Bukvalno su samo ciste osnove sh/bash skriptinga. Okacicu PDF, nesto je sto se sazvace za sat vremena, al' neka stoji. Na srpskom je i osnove su u pitanju.
THE ONLY EASY DAY WAS YESTERDAY
Prikačeni fajlovi
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 717



+125 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 17:37 - pre 26 meseci
Evo nešto za malo duže žvakanje: Bash | Python
Prikačeni fajlovi
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4263
*.dynamic.sbb.rs.



+490 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 18:04 - pre 26 meseci
U lepo. Svaka cast za materijal.
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

CoyoteKG

Član broj: 70939
Poruke: 2771



+6824 Profil

icon Re: Šta izabrati? Bash ili Python?26.12.2018. u 20:31 - pre 26 meseci
@djoka, sad su na redu funkcije hvala.

A sad imam i materijala, samo jos da procitam :D
 
Odgovor na temu

[es] :: Skript jezici :: Šta izabrati? Bash ili Python?

Strane: < .. 1 2 3

[ Pregleda: 6255 | Odgovora: 59 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.