Инструменты пользователя

Инструменты сайта


linux:binbash

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:binbash [2022/12/09 11:33]
admin
linux:binbash [2025/02/10 15:38] (текущий)
admin
Строка 172: Строка 172:
 Обработка диапазонных значений.\\ Обработка диапазонных значений.\\
 **for** условие **do** действие **done**. **for** условие **do** действие **done**.
-<code bash> for (( i=100; i>1; 1-- )); do action; done </code>+<code bash>  
 +for (( i=100; i>1; 1-- )); do action; done  
 + 
 +# Внутри **((..)')** вычисляется арифметическое выражение и возвращается результат и позволяет работать с переменными в стиле С. Так же, можно указать диапазон
  
-Внутри **((..)')** вычисляется арифметическое выражение и возвращается результат и позволяет работать с переменными в стиле С. Так же, можно указать диапазон\\ 
-<code bash> 
 for i in {100..104}; do action; done for i in {100..104}; do action; done
  
Строка 184: Строка 185:
 numbers="1 2 3 4 5" numbers="1 2 3 4 5"
 for i in `echo $numbers`; do action; done for i in `echo $numbers`; do action; done
 +
 +# Перебор массива, выполнение команды с каждым элементом
 +list=(user1 user2 user3 user4 user5 user6)
 +for i in ${list[*]}; do
 +        printf '\n=======%s\n', $i
 +        influx -execute 'show grants for '$i';' -username '<auth>' -password '<auth>'
 +done
 </code> </code>
  
Строка 253: Строка 261:
 # В итоге, ждем тайм-аут один раз, для всех хостов # В итоге, ждем тайм-аут один раз, для всех хостов
 </code> </code>
 +
 +
 +<details>
 +<summary>:!: Случайные значения</summary>
 +<code bash>
 +**Записать случайные байты в файл**\\
 +head -c 1024 /dev/urandom > file
 +
 +dd if=/dev/urandom of=file bs=100M count=1 iflag=fullblock
 +
 +  # только печатные символы
 +tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 100M > file
 +
 +  # либо base64 вместо tr, только менее гибко по символам
 +base64 < /dev/urandom | head -c 1024 (1K/1M)
 +
 +  # ${RANDOM} - возвращает случайное число 0..32К
 +  # случайное число от 1..10, (1+ чтобы небыло ноля)
 +$(1 + ${RANDOM} % 10)
 +
 +  # Еще так можно диапазон возвращать
 +  # 1..5, вернуть одно число
 +$(shuf -i 1-5 -n 1)
 +</code>
 +</details>
  
  
Строка 264: Строка 297:
 test [expr] test [expr]
  
-if test -f file.txt или [ -f file.txt ] +if test -f file.txt или [ -f file.txt ]then
-then+
   rm file.txt   rm file.txt
 else else
   echo 'no found'   echo 'no found'
 fi fi
 +
 +
 +# Проверка передачи файла в первом аргументе
 +if (($# < 1)) || [ ! -f ${1} ]; then
 +  echo "Config file must be set in the first agrument"
 +  exit 1
 +fi
 +
 +# Если первый аргмент пустой или отсутствует
 +if [ -z ${1} ]; then
 +
 +# Если второй аргумент НЕ пустой и не отсутствует
 +if [ -n ${2} ]; then
 +
 +# Если отсутствует или пустые первый или второй аргументы
 +if [ -z ${1} ] || [ -z ${2} ]; then
 </code> </code>
  
Строка 300: Строка 348:
 {{ :linux:overall:bash:makeimport_sh.doc |}} {{ :linux:overall:bash:makeimport_sh.doc |}}
 </details> </details>
 +
 +
 +<details>
 +<summary> :!: Проверка PID</summary>
 +
 +<code bash>
 +# Такая конструкция сохранит ПИД последнего запущенного процесса в файл
 +& echo $! > file.pid
 +</code>
 +
 +<code bash>
 +#!/bin/bash
 +
 +status=2
 +for i in 1 2 3
 +    do
 +        # Для kill нужны права
 +        #if kill -0 `cat /path/file.pid` &> /dev/null;
 +        if ps -p `cat /path/file.pid` > /dev/null
 +        then
 +            status=0
 +            break
 +        fi
 +    sleep 1
 +done
 +
 +echo "Service status is $status"
 +exit $status
 +</code>
 +</details>
 +
 +
 +<details>
 +<summary>:!: Выполнение скрипта на удаленной машине через SSH</summary>
 +При условии что настроен беспарольный доступ\\
 +<code bash>
 +#!/bin/bash
 +
 +ssh username@my-host -p 2444 'bash -s' <<-'ENDSSH'
 +
 +if systemctl is-active --quiet "apache2"; then
 +        sudo systemctl stop apache2
 +        sudo systemctl start nginx
 +        sudo systemctl status nginx
 +else
 +        sudo systemctl stop nginx
 +        sudo systemctl start apache2
 +        sudo systemctl status apache2
 +fi
 +
 +ENDSSH
 +</code>
 +
 +
 +Проверка процессов по списку PID
 +<code bash>
 +# Запуск фонового процесса с сохранением PID ($! для фонового процесса)
 +(/usr/bin/sleep infinity &) && (echo $! > pids)
 +
 +
 +for pid in `cat pids`; do
 +  if ! ps -p $pid > /dev/null; then
 +    echo "exit 1 for pid - $pid"
 +    exit 1
 +  fi
 +done
 +</code>
 +
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: Имя скрипта без расширения</summary>
 +<code bash>
 +tmp=${0##*/}
 +echo ${tmp%%.*}
 +echo "-------"
 +echo ${0##*/} | sed 's/\..*//g'
 +echo "------"
 +tmp2=$(basename "$0" | sed 's/\..*//g')
 +echo $tmp2
 +</code>
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: </summary>
 +<code bash>
 +</code>
 +</details>
 +
 +
  
  
linux/binbash.1670585596.txt.gz · Последнее изменение: 2022/12/09 11:33 — admin