diff --git a/bash/rest/server.bash b/bash/rest/server.bash index 8da2af2..5041d74 100755 --- a/bash/rest/server.bash +++ b/bash/rest/server.bash @@ -5,79 +5,79 @@ rm -f response mkfifo response function handle_GET_home() { - RESPONSE=$(cat home.html | - sed "s/{{$COOKIE_NAME}}/$COOKIE_VALUE/") + RESPONSE=$(cat home.html | + sed "s/{{$COOKIE_NAME}}/$COOKIE_VALUE/") } function handle_GET_login() { - RESPONSE=$(cat login.html) + RESPONSE=$(cat login.html) } function handle_POST_login() { - RESPONSE=$(cat post-login.http | - sed "s/{{cookie_name}}/$INPUT_NAME/" | - sed "s/{{cookie_value}}/$INPUT_VALUE/") + RESPONSE=$(cat post-login.http | + sed "s/{{cookie_name}}/$INPUT_NAME/" | + sed "s/{{cookie_value}}/$INPUT_VALUE/") } function handle_POST_logout() { - RESPONSE=$(cat post-logout.http | - sed "s/{{cookie_name}}/$COOKIE_NAME/" | - sed "s/{{cookie_value}}/$COOKIE_VALUE/") + RESPONSE=$(cat post-logout.http | + sed "s/{{cookie_name}}/$COOKIE_NAME/" | + sed "s/{{cookie_value}}/$COOKIE_VALUE/") } function handle_not_found() { - RESPONSE=$(cat 404.html) + RESPONSE=$(cat 404.html) } function handleRequest() { - ## Read request - while read line; do - echo $line - trline=$(echo $line | tr -d '[\r\n]') + ## Read request + while read line; do + echo "$line" + trline=$(echo "$line" | tr -d '[\r\n]') - [ -z "$trline" ] && break + [ -z "$trline" ] && break - HEADLINE_REGEX='(.*?)\s(.*?)\sHTTP.*?' - [[ "$trline" =~ $HEADLINE_REGEX ]] && - REQUEST=$(echo $trline | sed -E "s/$HEADLINE_REGEX/\1 \2/") + HEADLINE_REGEX='(.*?)\s(.*?)\sHTTP.*?' + [[ "$trline" =~ $HEADLINE_REGEX ]] && + REQUEST=$(echo "$trline" | sed -E "s/$HEADLINE_REGEX/\1 \2/") - CONTENT_LENGTH_REGEX='Content-Length:\s(.*?)' - [[ "$trline" =~ $CONTENT_LENGTH_REGEX ]] && - CONTENT_LENGTH=$(echo $trline | sed -E "s/$CONTENT_LENGTH_REGEX/\1/") + CONTENT_LENGTH_REGEX='Content-Length:\s(.*?)' + [[ "$trline" =~ $CONTENT_LENGTH_REGEX ]] && + CONTENT_LENGTH=$(echo "$trline" | sed -E "s/$CONTENT_LENGTH_REGEX/\1/") - COOKIE_REGEX='Cookie:\s(.*?)\=(.*?).*?' - [[ "$trline" =~ $COOKIE_REGEX ]] && - read COOKIE_NAME COOKIE_VALUE <<<$(echo $trline | sed -E "s/$COOKIE_REGEX/\1 \2/") - done - - ## Read body - if [ ! -z "$CONTENT_LENGTH" ]; then - BODY_REGEX='(.*?)=(.*?)' - - while read -n$CONTENT_LENGTH -t1 line; do - echo $line - trline=$(echo $line | tr -d '[\r\n]') - - [ -z "$trline" ] && break - - read INPUT_NAME INPUT_VALUE <<<$(echo $trline | sed -E "s/$BODY_REGEX/\1 \2/") + COOKIE_REGEX='Cookie:\s(.*?)\=(.*?).*?' + [[ "$trline" =~ $COOKIE_REGEX ]] && + read COOKIE_NAME COOKIE_VALUE <<<$(echo "$trline" | sed -E "s/$COOKIE_REGEX/\1 \2/") done - fi - ## Route to the response handlers - case "$REQUEST" in - "GET /login") handle_GET_login ;; - "GET /") handle_GET_home ;; - "POST /login") handle_POST_login ;; - "POST /logout") handle_POST_logout ;; - *) handle_not_found ;; - esac + ## Read body + if [ ! -z "$CONTENT_LENGTH" ]; then + BODY_REGEX='(.*?)=(.*?)' - echo -e "$RESPONSE" >response + while read -n"$CONTENT_LENGTH" -t1 line; do + echo "$line" + trline=$(echo "$line" | tr -d '[\r\n]') + + [ -z "$trline" ] && break + + read INPUT_NAME INPUT_VALUE <<<$(echo "$trline" | sed -E "s/$BODY_REGEX/\1 \2/") + done + fi + + ## Route to the response handlers + case "$REQUEST" in + "GET /login") handle_GET_login ;; + "GET /") handle_GET_home ;; + "POST /login") handle_POST_login ;; + "POST /logout") handle_POST_logout ;; + *) handle_not_found ;; + esac + + echo -e "$RESPONSE" >response } echo 'Listening on 3000...' while true; do - cat response | nc -lN 3000 | handleRequest + cat response | nc -lN 3000 | handleRequest done diff --git a/bash/train_bash/task.sh b/bash/train_bash/task.sh index df96fb4..ca7470c 100755 --- a/bash/train_bash/task.sh +++ b/bash/train_bash/task.sh @@ -2,37 +2,36 @@ CpArray_Mac() { -# Оператор Присваивания + # Оператор Присваивания echo -n 'eval ' - echo -n "$2" # Имя массива-результата + echo -n "$2" # Имя массива-результата echo -n '=( ${' - echo -n "$1" # Имя исходного массива + echo -n "$1" # Имя исходного массива echo -n '[@]} )' -# Все это могло бы быть объединено в одну команду. -# Это лишь вопрос стиля. + # Все это могло бы быть объединено в одну команду. + # Это лишь вопрос стиля. } -declare -f CopyArray # "Указатель" на функцию -CopyArray=CpArray_Mac # Оператор Присваивания +declare -f CopyArray # "Указатель" на функцию +CopyArray=CpArray_Mac # Оператор Присваивания -Hype() -{ +Hype() { -# Исходный массив с именем в $1. -# (Слить с массивом, содержащим "-- Настоящий Рок-н-Ролл".) -# Вернуть результат в массиве с именем $2. + # Исходный массив с именем в $1. + # (Слить с массивом, содержащим "-- Настоящий Рок-н-Ролл".) + # Вернуть результат в массиве с именем $2. local -a TMP - local -a hype=( -- Настоящий Рок-н-Ролл ) + local -a hype=(-- Настоящий Рок-н-Ролл) - $($CopyArray $1 TMP) - TMP=( ${TMP[@]} ${hype[@]} ) - $($CopyArray TMP $2) + $($CopyArray "$1" TMP) + TMP=(${TMP[@]} ${hype[@]}) + $($CopyArray TMP "$2") } -declare -a before=( Advanced Bash Scripting ) +declare -a before=(Advanced Bash Scripting) declare -a after echo "Массив before = ${before[@]}" @@ -45,7 +44,7 @@ echo "Массив after = ${after[@]}" echo "Что такое ${after[@]:4:2}?" -declare -a modest=( ${after[@]:2:1} ${after[@]:3:3} ) +declare -a modest=(${after[@]:2:1} ${after[@]:3:3}) # ---- выделение подстроки ---- echo "Массив Modest = ${modest[@]}" diff --git a/python/fork.py b/python/fork.py index afa1e9d..49e28d6 100755 --- a/python/fork.py +++ b/python/fork.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 -import os, sys +import os +import sys ret = os.fork() if ret == 0: