Выбрать случайную строку из нескольких и установить ее как переменную?

У вас есть возможность просто обновить bash. Для этого используйте следующую команду apt-get:

apt-get update

Затем, после того как обновление получит все доступные обновления, запустите:

apt-get install --only-upgrade bash

Для получения обновлений на старых версиях, например, Squeeze, вам, вероятно, понадобится добавить Squeeze-LTS repo в ваш исходный файл source.list.

Чтобы добавить это хранилище, отредактируйте /etc/apt/sources.list и добавьте следующую строку в конец файла.

deb http://ftp.us.debian.org/debian squeeze-lts main non-free contrib

Чтобы проверить определенную систему на наличие уязвимостей (или посмотреть, работает ли обновление), вы можете проверить bash-версии, которые вы используете, и посмотреть, не затронута ли версия (вероятно, затронута), или есть многочисленные скрипты тестирования оболочки, доступные в сети.

EDIT 1

Чтобы обновить bash на Lenny или Etch, взгляните на ответ Ильи Шершоффа ниже, как скомпилировать bash из исходных текстов и вручную обновить версию bash, используемую в вашем релизе.

EDIT 2

Вот пример файла source.list с сервера Squeeze, который я успешно обновил:

deb http://ftp.us.debian.org/debian/ squeeze main
deb-src http://ftp.us.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

# squeeze-updates, previously known as 'volatile'
deb http://ftp.us.debian.org/debian/ squeeze-updates main
deb-src http://ftp.us.debian.org/debian/ squeeze-updates main

# Other - Adding the lsb source for security updates
deb http://http.debian.net/debian/ squeeze-lts main contrib non-free
deb-src http://http.debian.net/debian/ squeeze-lts main contrib non-free

1
04.11.2015, 16:49
3 ответа
array=(test001 test002 test003 test004)          
totalstr=$((${#array[@]} - 1)) # -1 because 1st string = ${array[0]} , and last one(4th) = ${array[3]
randomnum=$(($(($RANDOM % $totalstr)) + 0)) # get random number between 0 and $totalstr-1
your_random_var=$(echo ${array[$randomnum]})
0
28.01.2020, 01:31

Вы все еще можете сделать что-то подобное:

v=$(printf "test%03d" $(($RANDOM%4+1)))
v=${!v}

где bash $ {! Variable} выполняет один уровень косвенного обращения к реальной переменной test001 и т. Д.


Когда имена переменных могут быть любыми, например test001 somevar anothervar, настройте массив:

declare -a teststrings=(test001 somevar anothervar)
v=${teststrings[$(($RANDOM % ${#teststrings[*]}))]}
w=${!v}
echo $w
0
28.01.2020, 01:31

Храните ваши строки в массиве.

Используйтеjot(1)для случайного выбора индекса массива.

Напечатать элемент массива с этим случайным индексом.

Рассмотрим этот скриптfoo.sh:

# initialize array a with a few strings
a=("test1" "test2" "test3" "test4" "test5" "test6")

# get the highest index of a (the number of elements minus one)
Na=$((${#a[@]}-1))

# choose:  
#    jot -r 1         1 entry, chosen at random from between
#             0       0 and...
#               $Na    ... the highest index of a (inclusive)
randomnum=$(jot -r 1 0 $Na)

# index the array based on randomnum:
randomchoice="${a[$randomnum]}"

# display the result:
printf "randomnum is %d\na[randomnum] is '%s'\n" \
    $randomnum "$randomchoice"

Выход:

$. foo.sh
randomnum is 3
a[randomnum] is 'test4'
$. foo.sh
randomnum is 0
a[randomnum] is 'test1'
$. foo.sh
randomnum is 4
a[randomnum] is 'test5'
$. foo.sh
randomnum is 1
a[randomnum] is 'test2'
1
28.01.2020, 01:31

Теги

Похожие вопросы