====== Средства программирования shell ======
* [[http://lib.ru/unixhelp/unixshell.txt|Интерпретатор командного языка shell]]
* [[http://mywiki.wooledge.org/BashFAQ|Часто задаваемые вопросы про bash (eng)]]
* [[https://habrahabr.ru/post/335960/|Играючи BASH'им]]
* [[https://unix.stackexchange.com/questions/159513/what-are-the-shells-control-and-redirection-operators|What are the shell's control and redirection operators?]]
* [[https://youtu.be/GxVmukxVUo0|Видео урок]]
* [[https://www.tutorialspoint.com/execute_bash_online.php|Execute Bash Shell Online]]
* [[https://www.shellcheck.net/|ShellCheck finds bugs in your shell scripts.]]
===== Проверка синтаксиса =====
* [[https://www.shellcheck.net/wiki/]]
# apt install shellcheck
$ shellcheck webd/webd
===== Переменные окружения =====
* [[Переменные окружения]]
===== Объединение команд =====
==== Последовательность команд в строке ====
* [[https://ss64.com/bash/read.html|read]]
$ echo -n "Enter Name: "; read a; echo Hello $a
$ sleep 3; echo -e "\007"
==== Последовательности команд в текстовом файле ====
$ cat ex1.txt
echo -n "Enter Name: "
read p
echo Hello $p
$ sh ex1.txt
$ . ex1.txt
==== Последовательности команд в выполняемом файле ====
$ cat ex1.sh
#!/bin/sh
echo -n "Enter Name: "
read p
echo Hello "$p !!!"
$ chmod +x ex1.sh
$ ex1.sh
$ /home/userX/ex1.sh
$ ./ex1.sh
==== Последовательность команд в функции ====
$ mycd () {
> cd $1
> PS1="`pwd` $ "
> }
===== Примеры простых алгоритмов и вариантов использования =====
* [[Коды завершения#Проверка наличия аргументов в скриптах]]
==== Целочисленный цикл (поиск хостов в подсети) ====
* [[Утилита nmap#Ping диапазона адресов с verbose и debug]]
$ cat test_ping.sh
#!/bin/sh
#test -z $1 && exit 1
#[ "$1" ] || { echo Example: ./test_ping.sh 10.5.11; exit 1; }
i=1
while [ $i -lt 254 ]
do
test $i = 50 && continue
ping -c 1 -W 1 $1.$i > /dev/null 2>&1 && echo $1.$i || echo No $i
i=$(($i + 1))
done
$ cat arp_ping.sh
#!/bin/sh
test $# -lt 1 && exit 1
i=1
while :
do
ip=$1.$i
ping -c 1 -W 1 $ip >/dev/null
ip n | grep "$ip " | grep -q ':..:..:' && echo $ip
i=$(($i + 1))
test $i -eq 254 && break
done
==== Цикл for - обработка множеств (массовое переименование файлов) ====
for i in *sample; do cp $i ${i%.sample}; done
==== Чтение полей из файла ====
$ cat readifs.sh
#!/bin/sh
IFS=:
while read a b c d e f g
do
echo "$a $g"
done < /etc/passwd
#!/bin/sh
for i in `cut -d: -f1 /etc/passwd`
do
echo user $i
done
==== Перехват сигналов ====
$ cat trap.sh
#!/bin/sh
trap "echo got signal 2; date" 2
while : ; do
cat <