LINUX.ORG.RU

[shell]Как проверить $1 на int ?

 


0

1

Пишу небольшой скрипт, для собственных нужд, есть некая функция в нем, которая проверяет «$1» на больше или меньше чем $VAR, естественно если «$1» будет не число, то проверка не удастся. Например:

VAR=5                                                             
funcs(){ if [ $1 -gt $VAR ]; then echo ok; else echo not ok;fi }                   
funcs 4 #not ok                                                      
funcs 6 #ok
funcs text                                                      
funcs:[: integer expression expected: text
Соответственно требуется изначально «$1» проверить, integer ли это вообще, но как ?

★★★★★

[16:25:41][aitap@flyingteapot ~]> expr 123 : '^[0-9]*$'
3
[16:25:41][aitap@flyingteapot ~]> expr 123a : '^[0-9]*$'
0
[16:25:42][aitap@flyingteapot ~]1>

AITap ★★★★★
()
Ответ на: комментарий от AITap

Какой-то костыльный вариант, хотя, будет как иной способ.

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от uzbl

Потому что решение по сути одно, проверить $VAR регекспом. Но мне почему-то кажется, что это костыль, в какую бы сторону он не был повернут.

joy4eg ★★★★★
() автор топика

Ты хочешь странного!

Если тебе нужна нормальная система типов — пользуйся полноценным ЯП.

fat_angel ★★★★★
()
Ответ на: комментарий от joy4eg

Это еще надо посмотреть-подумать кто гвозди, да микроскопом…

fat_angel ★★★★★
()
18:01 ~
function isitint(){ [ "$1" = "$(echo "scale=0; ($1*10)/10" | bc)" ]; }
18:01 ~
isitint 3 && echo "int" || echo "not int"
int
18:01 ~
isitint 3.5 && echo "int" || echo "not int"
not int
Eddy_Em ☆☆☆☆☆
()

по-моему так тоже зобавно, только проверки знаков +- нету

#include <stdio.h>
int main(int argc, char **argv) {
    if (argc < 1) {
        puts("0");
        return 1;
    }
    for (char *p = argv[1]; *p; p++) {
        if (*p < '0' || *p > '9') {
            puts("0");
            return 0;
        }
    }
    puts("1");
    return 0;
}
% sudo gcc -std=c99 isint.c -o /usr/local/bin/isint
% isint 13666
1
% isint 13/666
0

anonymous
()

кстати-кстати!

#!/bin/sh
VAR=5
if [[ $VAR -eq $1 ]]; then
    echo ok;
else
    echo bad;
fi;
% ./crap.sh 5   
ok
% ./crap.sh 4  
bad
% ./crap.sh lol
bad

anonymous
()

Вопрос решен, всем спасибо, кто ответил.

joy4eg ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.