User Tools

Site Tools


средства_программирования_shell

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
средства_программирования_shell [2018/11/07 15:42]
val [Использование диалоговых окон]
средства_программирования_shell [2022/09/22 21:26]
val [Web сервер на shell]
Line 4: Line 4:
   * [[http://​mywiki.wooledge.org/​BashFAQ|Часто задаваемые вопросы про bash (eng)]]   * [[http://​mywiki.wooledge.org/​BashFAQ|Часто задаваемые вопросы про bash (eng)]]
   * [[https://​habrahabr.ru/​post/​335960/​|Играючи BASH'​им]]   * [[https://​habrahabr.ru/​post/​335960/​|Играючи BASH'​им]]
 +
   * [[https://​youtu.be/​GxVmukxVUo0|Видео урок]]   * [[https://​youtu.be/​GxVmukxVUo0|Видео урок]]
 +
   * [[https://​www.tutorialspoint.com/​execute_bash_online.php|Execute Bash Shell Online]]   * [[https://​www.tutorialspoint.com/​execute_bash_online.php|Execute Bash Shell Online]]
 +  * [[https://​www.shellcheck.net/​|ShellCheck finds bugs in your shell scripts.]]
 +
 +===== Проверка синтаксиса =====
 +<​code>​
 +# apt install shellcheck
 +
 +$ shellcheck webd/webd
 +</​code>​
 ===== Переменные окружения ===== ===== Переменные окружения =====
  
Line 62: Line 72:
  
 ===== Примеры простых алгоритмов и вариантов использования ===== ===== Примеры простых алгоритмов и вариантов использования =====
 +
 +  * [[Коды завершения#​Проверка наличия аргументов в скриптах]]
  
 ==== Целочисленный цикл (поиск хостов в подсети) ==== ==== Целочисленный цикл (поиск хостов в подсети) ====
Line 79: Line 91:
 done done
 </​code><​code>​ </​code><​code>​
-$ cat test_arp_ping.sh+$ cat arp_ping.sh
 </​code><​code>​ </​code><​code>​
 #!/bin/sh #!/bin/sh
Line 88: Line 100:
 while : while :
 do do
-  ping -c 1 -W 1 $1.$i > /​dev/​null ​2>&1 +  ​ip=$1.$i 
-  ​arp -an | grep "($1.$i)" | grep -q ':​..:​..:'​ && echo $1.$i || echo - $1.$i+ 
 +  ​ping -c 1 -W 1  $ip >/​dev/​null 
 +  ​ip n | grep "$ip " | grep -q  ':​..:​..:'​ && echo $ip 
   i=$(($i + 1))   i=$(($i + 1))
   test $i -eq 254 && break   test $i -eq 254 && break
Line 348: Line 363:
 ===== Дополнительные материалы ===== ===== Дополнительные материалы =====
  
 +==== Расширения BASH ====
 +<​code>​
 +$ echo a{1..5}b
 +
 +$ echo a{1,3,5}b
 +</​code>​
 ==== CGI на shell ==== ==== CGI на shell ====
  
-  * [[http://www.team2053.org/docs/bashcgi/gettingstarted.html|Creating CGI Programs with Bash: Getting Started]]+  * [[http://underpop.online.fr/c/cgi/docs/creating-cgi-programs-with-bash/|Creating CGI Programs with Bash: Introduction]] 
 +  * [[https://​debian-administration.org/​article/​371/​A_web_server_in_a_shell_script|A web server in a shell script]] 
 +  * [[https://​stackoverflow.com/​questions/​16640054/​minimal-web-server-using-netcat|Minimal web server using netcat]] 
 +  * [[https://​funprojects.blog/​2021/​04/​11/​a-web-server-in-1-line-of-bash/​|A Web Server in 1 Line of Bash Code]]
  
 ==== Web сервер на shell ==== ==== Web сервер на shell ====
  
-  * [[https://​debian-administration.org/​article/​371/​A_web_server_in_a_shell_script|A web server in a shell script]]+  * [[Сервис HTTP]]
  
-=== Debian/​Ubuntu === 
 <​code>​ <​code>​
 # cat /​usr/​local/​sbin/​webd # cat /​usr/​local/​sbin/​webd
Line 362: Line 385:
 #!/bin/bash #!/bin/bash
 base=/​var/​www base=/​var/​www
 +log=/​var/​log/​webd.log
  
 read request read request
 +#echo $request >> $log
  
 while : while :
 do do
-  read header+  read -r header 
 +#  echo $header >> $log
   [ "​$header"​ == $'​\r'​ ] && break;   [ "​$header"​ == $'​\r'​ ] && break;
 done done
Line 373: Line 399:
 url="​${request#​GET }" url="​${request#​GET }"
 url="​${url% HTTP/​*}"​ url="​${url% HTTP/​*}"​
-filename="​$base$url"​ 
  
-echo -e "HTTP/1.1 200 OK\r" +test $url = "/" ​&& url="/index.html"
-echo -e "Content-Type:​ `/usr/​bin/​file -bi \"​$filename\"​`\r"​ +
-echo -e "\r"+
  
-/bin/cat "​$filename"​ 
-</​code>​ 
- 
-=== FreeBSD === 
-<​code>​ 
-# cat /​usr/​local/​sbin/​webd 
-</​code><​code>​ 
-#!/bin/sh 
-base=/​var/​www 
- 
-read request 
- 
-url="​${request#​GET }" 
-url="​${url% HTTP/​*}"​ 
 filename="​$base$url"​ filename="​$base$url"​
  
-echo "​HTTP/​1.1 200 OK" +if [ -e "​$filename"​ ] 
-echo "​Content-Type: ​`/​usr/​bin/​file -bi \"​$filename\"​`+then 
-echo ""​ +  ​echo `date` OK $url >> $log 
- +  echo -e "​HTTP/​1.1 200 OK\r
-/bin/cat "​$filename"​+  echo -e "​Content-Type: ​$(/​usr/​bin/​file -bi \"​$filename\"​)\r
 +  echo -e "\r
 +  /bin/cat "​$filename"​ 
 +else 
 +  echo "​$(date)"​ ERR $url >> $log 
 +  echo -e "​HTTP/​1.1 404 Not Found\r"​ 
 +  echo -e "​Content-Type:​ text/​html;​\r"​ 
 +  echo -e "​\r"​ 
 +  ip=$(cat /​proc/​net/​fib_trie | awk '/32 host/ { print f } {f=$2}'​ | sort -u | grep -v 127.0.0.1) 
 +  echo -e "<​h1>​$url Not Found in container $(hostname) with ip $ip</​h1>"​ 
 +  echo "ver 1.1" 
 +fi
 </​code>​ </​code>​
  
-=== Debian/​Ubuntu/​FreeBSD === 
 <​code>​ <​code>​
 # chmod +x /​usr/​local/​sbin/​webd # chmod +x /​usr/​local/​sbin/​webd
 +</​code>​
  
 +==== Ресурсы Web сервера на shell ====
 +<​code>​
 # mkdir /var/www # mkdir /var/www
  
Line 418: Line 440:
 </​code>​ </​code>​
  
-=== Debian/​Ubuntu === 
 <​code>​ <​code>​
 # wget -O /​var/​www/​img/​logo.gif http://​val.bmstu.ru/​unix/​Media/​logo.gif # wget -O /​var/​www/​img/​logo.gif http://​val.bmstu.ru/​unix/​Media/​logo.gif
 </​code>​ </​code>​
  
-=== FreeBSD ​===+  * [[Сервис INETD]] 
 +==== Проверка ​==== 
 <​code>​ <​code>​
-# fetch -o /​var/​www/​img/​logo.gif ​http://val.bmstu.ru/unix/​Media/​logo.gif+http://server.corpX.un/
 </​code>​ </​code>​
- 
 ==== Asterisk AGI ==== ==== Asterisk AGI ====
  
-  * [[Сервис Asterisk#Тарификация звонков]]+  * [[Сервис Asterisk#Asterisk AGI]]
  
  
Line 498: Line 520:
  
 mysql mybd -B --skip-column-names -e "​$sql"​ mysql mybd -B --skip-column-names -e "​$sql"​
 +</​code>​
 +
 +===== Отладка =====
 +
 +<​code>​
 +set +x
 +set -n
 </​code>​ </​code>​
средства_программирования_shell.txt · Last modified: 2024/06/19 13:44 by val