У вас есть возможность просто обновить 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-версии, которые вы используете, и посмотреть, не затронута ли версия (вероятно, затронута), или есть многочисленные скрипты тестирования оболочки, доступные в сети.
Чтобы обновить bash
на Lenny или Etch, взгляните на ответ Ильи Шершоффа ниже, как скомпилировать bash
из исходных текстов и вручную обновить версию bash
, используемую в вашем релизе.
Вот пример файла 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
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]})
Вы все еще можете сделать что-то подобное:
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
Храните ваши строки в массиве.
Используйте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'