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
Last revision Both sides next revision
средства_программирования_shell [2022/09/22 21:26]
val [Web сервер на shell]
средства_программирования_shell [2024/03/13 08:30]
val [Целочисленный цикл (поиск хостов в подсети)]
Line 11: Line 11:
  
 ===== Проверка синтаксиса ===== ===== Проверка синтаксиса =====
 +
 +  * [[https://​www.shellcheck.net/​wiki/​]]
 +
 <​code>​ <​code>​
 # apt install shellcheck # apt install shellcheck
Line 76: Line 79:
  
 ==== Целочисленный цикл (поиск хостов в подсети) ==== ==== Целочисленный цикл (поиск хостов в подсети) ====
 +
 +  * [[Утилита nmap#Ping диапазона адресов с verbose и debug]]
 +
 <​code>​ <​code>​
 $ cat test_ping.sh $ cat test_ping.sh
Line 81: Line 87:
 #!/bin/sh #!/bin/sh
  
-test -z $1 && exit 1+#test -z $1 && exit 1 
 +#[ "​$1"​ ] || { echo Example: ./​test_ping.sh 10.5.11; exit 1; }
  
 i=1 i=1
Line 87: Line 94:
 do do
   test $i = 50 && continue   test $i = 50 && continue
-  ping -c 1 -W 1 $1.$i > /dev/null 2>&1 && echo $1.$i+  ping -c 1 -W 1 $1.$i > /dev/null 2>&1 && echo $1.$i || echo No $i
   i=$(($i + 1))   i=$(($i + 1))
 done done
Line 379: Line 386:
  
   * [[Сервис HTTP]]   * [[Сервис HTTP]]
 +  * [[Переменные окружения#​Чтение значений переменных окружения]]
  
 <​code>​ <​code>​
Line 385: Line 393:
 #!/bin/bash #!/bin/bash
 base=/​var/​www base=/​var/​www
-log=/​var/​log/​webd.log+#log=/​var/​log/​webd.log
  
 read request read request
-#echo $request >> $log+##echo "$request" ​>> $log       # for educational demonstration 
 + 
 +filename="​${request#​GET }" 
 +filename="​${filename% HTTP/​*}"​ 
 + 
 +test $filename = "/"​ && filename="/​index.html"​ 
 + 
 +filename="​$base$filename"​
  
 while : while :
 do do
   read -r header   read -r header
-#  echo $header >> $log+##  echo "$header" ​>> $log       # for educational demonstration
   [ "​$header"​ == $'​\r'​ ] && break;   [ "​$header"​ == $'​\r'​ ] && break;
 +##  [ "​$header"​ == $''​ ] && break; ​   # for STDIN/​STDOUT educational demonstration
 done done
- 
-url="​${request#​GET }" 
-url="​${url% HTTP/​*}"​ 
- 
-test $url = "/"​ && url="/​index.html"​ 
- 
-filename="​$base$url"​ 
  
 if [ -e "​$filename"​ ] if [ -e "​$filename"​ ]
 then then
-  ​echo `date` OK $url >> $log+#  ​echo `date` OK $filename on `hostname` ​>> $log
   echo -e "​HTTP/​1.1 200 OK\r"   echo -e "​HTTP/​1.1 200 OK\r"
   echo -e "​Content-Type:​ $(/​usr/​bin/​file -bi \"​$filename\"​)\r"​   echo -e "​Content-Type:​ $(/​usr/​bin/​file -bi \"​$filename\"​)\r"​
Line 412: Line 421:
   /bin/cat "​$filename"​   /bin/cat "​$filename"​
 else else
-  ​echo "​$(date)"​ ERR $url >> $log+#  ​echo "​$(date)"​ ERR $filename on "​$(hostname)" ​>> ​"$log"
   echo -e "​HTTP/​1.1 404 Not Found\r"​   echo -e "​HTTP/​1.1 404 Not Found\r"​
   echo -e "​Content-Type:​ text/​html;​\r"​   echo -e "​Content-Type:​ text/​html;​\r"​
   echo -e "​\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>​File $filename Not Found</​h1>"​ 
-  echo -e "<​h1>​$url Not Found in container ​$(hostname) ​with ip $ip</​h1>"​ +#  ​ip=$(awk '/32 host/ { print f } {f=$2}' ​/​proc/​net/​fib_trie ​| sort -u | grep -v 127.0.0.1) 
-  echo "ver 1.1"+ echo -e "Host: $(hostname), IP: $ipver 1.1"
 fi fi
 </​code>​ </​code>​
Line 456: Line 465:
  
 ==== Использование диалоговых окон ==== ==== Использование диалоговых окон ====
 +
 +<​code>​
 +ansible-pull-gpo#​ cat start.sh
 +</​code><​code>​
 +#!/bin/bash
 +
 +on_off() {
 +        grep -q "​$1"​ "​$2"​ && echo ON || echo OFF
 +}
 +
 +if [ -z ${BR+x} ]; then echo -e "​Variable BR (branch) is not set, specify, for example\nexport BR=master";​ exit 1; fi
 +
 +apt update || exit 0
 +
 +apt install dialog ansible git -y
 +
 +GP_OP_FILE=/​usr/​local/​etc/​gpo_options.yml
 +GP_EX_FILE=/​usr/​local/​bin/​ansible-pull-gpo.sh
 +
 +TEMP_FILE=$(mktemp -t '​XXXX'​)
 +
 +touch "​$GP_OP_FILE"​
 +
 +dialog ​ --title "​Configurations,​ Roles and Programs" ​ --clear --nocancel\
 +        --checklist "​Choose Options"​ 19 56 15 \
 +        CONF_RUS_INT:​ "​Russian Interface"​ "​$(on_off CONF_RUS_INT "​$GP_OP_FILE"​)"​ \
 +        PROG_THBIRD:​ "Mail client Thunderbird"​ "​$(on_off PROG_THBIRD "​$GP_OP_FILE"​)"​ \
 +        ROLE_ZAB_AG:​ "​Zabbix Agent" "​$(on_off ROLE_ZAB_AG "​$GP_OP_FILE"​)"​ \
 +        ROLE_OVPN1_CL:​ "​OpenVPN Client"​ "​$(on_off ROLE_OVPN1_CL "​$GP_OP_FILE"​)"​ \
 +2>"​$TEMP_FILE"​
 +
 +< "​$TEMP_FILE"​ tr " " "​\n"​ > "​$GP_OP_FILE"​
 +
 +rm "​$TEMP_FILE"​
 +
 +echo -e "​\nEND:"​ >> "​$GP_OP_FILE"​
 +
 +echo "/​usr/​bin/​ansible-pull -U http://​server.corpX.un/​student/​ansible-pull-gpo.git -C $BR -e @$GP_OP_FILE"​ > "​$GP_EX_FILE"​
 +
 +chmod +x "​$GP_EX_FILE"​
 +
 +##exit 0
 +
 +echo -e "0 */2 * * * sleep \${RANDOM:​0:​2}m;​ $GP_EX_FILE\n@reboot sleep 3m; $GP_EX_FILE"​ | crontab -
 +
 +"​$GP_EX_FILE"​
 +
 +#apt upgrade -y
 +
 +#reboot
 +</​code>​
  
 === Использование программы whiptail (Linux) === === Использование программы whiptail (Linux) ===
средства_программирования_shell.txt · Last modified: 2024/04/11 12:41 by val