Одним предложением является Linux Mint - Это имеет большинство кодеков на живой ISO и LibreOffice - таким образом, необходимо смочь посмотреть видео, слушать аудио и прочитать документы и т.д.
Следующее обнаруживает целые числа, положительные или отрицательные, и работает под тире
и является POSIX:
echo "$1" | grep -Eq '^[+-]?[0-9]+$' && echo "It's an integer"
case "${1#[+-]}" in
''|*[!0-9]*)
echo "Not an integer" ;;
*)
echo "Integer" ;;
esac
Или, с небольшим использованием команды :
(nop):
! case ${1#[+-]} in *[!0-9]*) :;; ?*) ! :;; esac && echo Integer
Попробуйте использовать его в качестве арифметического расширения, и посмотрите, работает ли он. На самом деле, нужно быть немного строже, потому что арифметические расширения будут игнорировать, например, лидирующие и трейлинговые пространства. Так сделайте арифметическое расширение и убедитесь, что развернутый результат точно совпадает с исходной переменной.
check_if_number()
{
if [ "$1" = "$((${1}))" ] 2>/dev/null; then
echo "Number!"
else
echo "not a number"
fi
}
Это также примет отрицательные числа - если вы действительно хотите их исключить, добавьте дополнительную проверку для $((${1} >= 0))
.
Вы можете использовать тест -EQ
на строке, с собой: -EQ
-EQ
$ dash -c 'a="a"; if [ "$a" -eq "$a" ] ; then echo number; else echo not a number; fi'
dash: 1: [: Illegal number: a
not a number
$ dash -c 'a="0xa"; if [ "$a" -eq "$a" ] ; then echo number; else echo not a number; fi'
dash: 1: [: Illegal number: 0xa
not a number
$ dash -c 'a="-1"; if [ "$a" -eq "$a" ] ; then echo number; else echo not a number; fi'
number
, если сообщение об ошибке является проблемой, вывод ошибки перенаправления на / Нуль
:
$ dash -c 'a="0xa"; [ "$a" -eq "$a" ] 2>/dev/null|| echo no'
no
Будь то
, Bash
, KSH
ZSH
, POSIX SH
, или posh
( ( «Огренение раковины Борна» Sh
); Корпус конструкция
является наиболее широко доступным и надежным:
case $1 in (*[!0-9]*|"") false ;; (*) true ;; esac
Возможно с Expr
? [1205366]?
if expr match "$1" '^\([0-9]\+\)$' > /dev/null; then
echo "integer"
else
echo "non-integer"
fi
Вот простая функция, использующая тот же метод, что и ответmuru :
IsInteger() # usage: IsInteger string
{ # returns: flag
[ "$1" -eq "$1" ] 2> /dev/null
}
Пример:
p= n=2a3; IsInteger $n || p="n't" ; printf "'%s' is%s an integer\n" "$n" "$p"
p= n=23; IsInteger $n || p="n't" ; printf "'%s' is%s an integer\n" "$n" "$p"
Выход:
'2a3' isn't an integer
'23' is an integer