Проверьте, находится ли $REPLY в диапазоне чисел

О Ваших требованиях Iceweasel является поддерживаемой производной Firefox (ветвление), я в настоящее время выполняю debian как свою настольную ОС на работе и использовании iceweasel каждый день, без проблем. Gnome3, я думаю, что это будет доступно на следующей стабильной версии, BTW, какой выпуск Вы выполняете? Сжать? Раз так я думаю (IIRC) Хрипящий, будет иметь его. И наконец, о производительности при обработке графики / качество, которое во многом зависит от Вашей видеокарты и ее драйвера, но если Вы думаете о нем как наличие диапозитивов, окон, соглашающихся с необычными эффектами и так далее, Вам будут нужны современный рабочий стол или compiz (работа с gnome2), который я думаю его доступное на стабильном (хрип).

Я изменил немного Вашего sources.list для хрипа, Вы возражаете, чтобы протестировать его и сообщить?

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

deb http://security.debian.org/ squeeze/updates main non-free contrib
deb-src http://http.us.debian.org/debian/ squeeze/updates main

# squeeze-updates, previously known as 'volatile'
deb http://mirror.cse.iitk.ac.in/debian/ squeeze-updates main non-free contrib
deb-src http://mirror.cse.iitk.ac.in/debian/ squeeze-updates main non-free contrib

# 3rd party repositories
deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all
deb http://www.deb-multimedia.org squeeze main non-free

Если Вы, оказывается, используете хрипящий или sid, необходимо будет измениться, все сжимают случаи для того, который Вы используете.

Скопируйте свой sources.list прежде, чем заменить его, затем протестируйте его следующим образом:

Refresh caches

# apt-get update

Search package

# apt-cache vlc

Install package

# apt-get install <package_name>

Если находят проблему, сообщите с выводом для тех трех команд, или по крайней мере для первого и последнего.

Кроме того, если Вы уже используете Хрипящий или sid, забываете то, что я сказал о Gnome3, не являющемся доступным, это должно быть там, но хрипящий должен все же быть выпуск, и sid всегда является ответвлением разработки.

30
09.03.2014, 22:45
5 ответов
[115859] В команде [116197][[116198] встроены сравнительные тесты, поэтому можно просто сделать

, где [116199]-ge[116200] означает greater-or-equal-to (и так далее). Команда [116201]-a[116202] является логическим "и". Команда [116203][[116204] - это просто команда, а не специальный синтаксис (на самом деле это то же самое, что и [116205]-тест[116206]: проверьте [116207]-мужской тест[116208]), поэтому пробел за ней НЕ ОТМЕНЯЕТСЯ. Если вы напишете [116209][$REPLY[116210], он попытается найти команду с именем [116211][$REPLY[116212] и выполнить ее, что не сработает. То же самое можно сказать и о закрытии [116213]][116214].

Правка: чтобы проверить, целое ли число (если это может произойти в вашем коде), сначала выполните тест

Конечно, все эти выражения в скобках возвращают 0 (истина) или 1 (ложь) и могут быть объединены. Можно не только заключить все в одну скобку, но и сделать

или что-то подобное.[115868].

30
27.01.2020, 19:38
[115871] Можно просто сказать:

Цитата из [116215] руководства[116216]:

((...))

(( выражение))

#!/bin/bash

SSH_ORIGINAL_COMMAND=${SSH_ORIGINAL_COMMAND/#git /git-}

case $SSH_ORIGINAL_COMMAND in
    "git-receive-pack"*|"git-upload-pack"*|"git-upload-archive"*)
        eval exec $SSH_ORIGINAL_COMMAND
        ;;
    *)
        echo "Go away." >&2
        exit 1
        ;;
esac
Арифметическое выражение оценивается в соответствии с правилами, описанными ниже (см. [116367]Арифметика оболочки [116368]). Если значение выражения ненулевое значение, состояние возврата - 0; в противном случае состояние возврата - 1. Это в точности эквивалентно

gedit $(find -name show.html.erb)

пусть "выражение".

12
27.01.2020, 19:38
[115869] Можно сделать что-то вроде этого:

4
27.01.2020, 19:38

Сначала проверьте, является ли вводимая информация числовой. Например, используя оператор совпадения регулярного выражения bash условных выражений:

if [[ $REPLY =~ -?[0-9]+ ]]; then
  echo "Invalid input (not numeric): $REPLY"
  exit 2
fi

Для проверки числовых диапазонов у вас есть две возможности:

  • оператор -gt из условных выражений внутри [ ... ] или [[ ... ]] (учтите, что операторы < и > выполняют сравнение строк, а не сравнение числовых значений, поэтому [[ 10 < 9 ]] верен);
  • обычные арифметические операторы внутри ((...)).

Таким образом:

if ((REPLY >= -2 && REPLY <= 10)); then
  : # do nothing -- pass directly to libvorbis
elif ((REPLY <= 24)); then
  echo "Value outside supported range: $REPLY"
  exit 2
elif ((REPLY <= 135)); then
  REPLY=$(((REPLY+8) / 16 - 4))
elif ((REPLY <= 271)); then
  REPLY=$(((REPLY+16) / 32))
elif ((REPLY <= 400)); then
  REPLY=9
elif ((REPLY <= 707)); then
  REPLY=10
else
  echo "Value outside supported range: $REPLY"
  exit 2
fi

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

.
2
27.01.2020, 19:38

Чтобы правильно определить, является ли строка (десятичным )числом, нам сначала нужно определить, что такое десятичное целое число. Простое и в то же время достаточно полное определение:

A sequence of an optional sign (+ or -) followed by no more than 18 (significant) decimal digits.

И эти шаги необходимы:

  1. Удалить все символы, не являющиеся десятичными цифрами (после знака ).
  2. Удалите все необязательные ведущие нули. Ведущие нули заставят оболочку полагать, что число является восьмеричным.
  3. Ограничение максимального размера целого числа до 18 цифр. Ниже 2 **63 -1 (макс. 64-битное целое число ).

Всего одно регулярное выражение сделает большую часть этого:

re='^([+-])?0*([0-9]{1,18})$'
[[ $number =~ $re ]] && integer=${BASH_REMATCH[*]:1}

Код для обработки нескольких чисел:

#!/bin/bash
DebugLevel=4     # 1:fatal 2:error 3:warn 4:info 5:debug 6:trace

SayMsg    (){   local a; a=$1; shift ;            # Log level
                [[ $a -le $DebugLevel ]] && printf '%s' "$@" $'\n' >&2 ;
            }
SayError  (){   a=$1; shift; printf '%s' "$@" $'\n' >&2; exit   "$a";   }

parseint  (){   local re # Parse the first argument as an integer or fail
                re='^([+-])?0*([0-9]{1,18})$'
                [[ $1 =~ $re ]] || { SayMsg 4 "Invalid number $1"; return 2; }
                integer=${BASH_REMATCH[1]}${BASH_REMATCH[2]}
                echo "integer=$integer"
             }

while read val; do
    parseint "$val"
    done <<-\_EOT_
    0
    1
    10
    100
    2345
    123456789012345678
    923456789012345678
    999999999999999999
    0000000012345
    +023
    -00045
    -76
    ""
    ''
    a
    abc
    1234567890123456789
    7.23
    -8.17
    1e3
    10+11
    _EOT_

Что напечатает:

integer=0
integer=1
integer=10
integer=100
integer=2345
integer=123456789012345678
integer=923456789012345678
integer=999999999999999999
integer=12345
integer=+23
integer=-45
integer=-76
Invalid number ""
Invalid number ''
Invalid number 
Invalid number a
Invalid number abc
Invalid number 1234567890123456789
Invalid number 7.23
Invalid number -8.17
Invalid number 1e3
Invalid number 10+11

После того, как число станет чистым и ясным, единственным отсутствующим тестом будет ограничение диапазона значений. Эта простая пара строк сделает это:

(( 1  <= integer && integer <= 32 )) && REPLY="-2"
(( 33 <= integer && integer <= 48 )) && REPLY="-1"
1
27.01.2020, 19:38

Теги

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