Толик Панков
hex_laden
............ .................. ................
October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Linux: bash, получить случайный символ из заранее заданной строки

Преамбула


Задана, например, такая строка:

PGSTRING='#$%@!?0'

Задача - получить из строки с паттерном случайный символ.

Bash: получаем длину строки


STRLEN=`expr length "$PGSTRING"`

Если вывести переменную STRLEN для строки выше, будет следующее:

Len: 7

expr есть в coreutils, так что должен быть практически везде

Bash: получаем случайное число из заданного диапазона


Получить случайное число из заданного диапазона можно командой shuf, например:

shuf -i x-x1 -n1

где:
x-x1 - диапазон чисел
-nX - X - количество цифр в числе.

Получаем случайное число:

RNUM=`shuf -i 1-$STRLEN -n1`

Вывод:

R Num: 3

Получаем случайный символ из строки с паттерном


Отправляем строку на консоль:

echo -e -n "$PGSTRING"

И перенаправляем команде cut:

Для того, чтобы вырезать командой cut символ, или группу символов из строки, нужно указать первый и последний символ. Например:

cut -c1-5

Применяем все вышесказанное:

RCHAR=`echo -e -n "$PGSTRING"|cut -c$RNUM-$RNUM`

Вывод:

Char: %

Можно объединить все это в функцию


getrandchar() #$1 - pattern_string
{
    STRLEN=`expr length "$1"`
    RNUM=`shuf -i 1-$STRLEN -n1`
    RCHAR=`echo -e -n "$1"|cut -c$RNUM-$RNUM`
}


Использование:

getrandchar $PGSTRING

Копия функции на PasteBin

Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2023/02/07/linux-bash-poluchit-sluchajnyj-simvol-iz-zaranee-zadannoj-stroki/

From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message:



Notice! This user has turned on the option that logs IP addresses of anonymous posters.