Пользовательский ввод
Bash read user input
read -p "Enter var: " var
echo "$varv"
Условия
Сравнение строк.
Нулевая строка.
if [[ $var == "" ]]; then
echo "choto"
fi
Сравнение численных в bash:
https://stackoverflow.com/questions/18668556/comparing-numbers-in-bash
if (( $delay > 900 )); then
echo "lol"
fi
if [[ "$delay" -gt "900" ]]; then
echo "lol"
fi
CASE
Пример из configure netmap (автоселект ОС):
#!/bin/sh
os=$(uname -s)
topdir=$(cd $(dirname $0); pwd)
case $os in
Linux)
$topdir/LINUX/configure "$@";;
FreeBSD)
$topdir/FreeBSD/configure "$@";;
*)
echo "Sorry, $os is not supported"
exit 1;;
esac
Функции
select_res() {
grep $1 $2
}
select_res $1 $2
СКрипты
скрипт по мониторингу процесса/изменения файла
Простейший однострочный скрипт, который позволяет онлайн (апдейт каждую секунду) следить за изменением процесса/файла и проч.
while true; do ps -aux | grep apache; echo; sleep 1; done
скрипт по поиску строк одного файла в другом файле
- Файл из которого берем строки для поиска указываем в первой переменной.
- Файл в котором делаем поиск указываем во второй переменной.
Можно убрать якоря, чтобы успешный результат считался не только по полному match строки.
usage:
./str_existance.sh to_find.txt where_find.txt
code:
#!/bin/bash
cat $1 | while read sw
do
RESULT=$(grep ^"$sw"$ $2)
if [[ "$RESULT" == "" ]]; then
echo $sw";"not_exist
else
echo $sw";"exist
fi
done
скрипт по генерации списка IP
Простой скрипт по генерации большого количества IP адресов на базе стартового адреса и необходимого количества адресов (в примере 100к):
usage:
generate_range.sh 7.7.7.1 100000
code:
#!/bin/bash ip1=$(echo "$1" | awk -F'.' '{print $1}') ip2=$(echo "$1" | awk -F'.' '{print $2}') ip3=$(echo "$1" | awk -F'.' '{print $3}') ip4=$(echo "$1" | awk -F'.' '{print $4}') limit=$(echo "$2") count=0 for a in $(seq $ip1 255); do for b in $(seq $ip2 255); do for c in $(seq $ip3 255); do for d in $(seq $ip4 255); do if [[ $count == $limit ]]; then exit fi echo "$a.$b.$c.$d" let count++ done done done done
скрипт по генерации списка портов на основе диапазона или последовательности
Набросал скрипт по генерации списка портов на основе диапазона или последовательности. Ест любые известные мне комбинации, использовал для многих кейсов после получения списка из конфига/консоли. Для генерации из диапазона используется подвызов eval.
#!/bin/bash echo "$@" | sed 's/,/ /g' | tr " " "\n" | sed 's/[[:space:]]//g' | grep '[0-9]' | while read port do RANGE_DETECTION=$(echo $port | grep "-") if [[ "$RANGE_DETECTION" == "" ]]; then echo $port else port=$(echo $port | sed 's/-/../') echo `eval echo {$port}` | tr " " "\n" fi done
Usage:
$ port_list_from_range 1 1 $ port_list_from_range 10-11,13-14 10 11 13 14 $ port_list_from_range 10-11,13-14 23,24-28 10 11 13 14 23 24 25 26 27 28