Shell - Test en numerisk variabel
Introduktion
I en "shell" er variablerne i "streng" -typen (standard). Betyder det at du ikke kan erklære en variabel af typen "heltal"?
Nå, det er ikke helt sandt!
Eksempler på test
Her er tre tests, der gør brug af følgende kommandoer, kombineret med nogle kontrolinstruktioner, som f.eks. Returkode til en kommando.
- grep
- expr
- prøve"
Bemærk: I nedenstående eksempler antager vi, at variablen $ var er initialiseret i henhold til parameteren "$ 1", der sendes direkte i kommandolinjen efter opkaldet af hvert script.
Brug grep
Bemærk: I det følgende eksempel skal "[[:: ciffer:]]" -udtrykket skrives uden mellemrum mellem dobbelt parentes.
#! / bin / bash # script_grep.sh var = $ 1 hvis ["$ (echo $ var | grep" ^ [[: ciffer:]] * $ ")"] derefter ekko "stringens numeriske" fi
Brug af expr
Baseret på returkode (her i $ statut-variablen) efter en test på en aritmetisk operation ved hjælp af kommandoen "expr".
#! / bin / sh # script_expr.sh var = $ 1 expr $ var + 0 1> / dev / null 2> & 1 statut = $? hvis test $ statut -lt 2 ekko så "$ var" numerisk fi
Brug af test
Baseret på brugen af "test" kommandoen (repræsenteret her "[" og "]"). Kontroller, om værdien af $ va-variablen er nul (0), og vurderer derefter returkoden ($?) For sine to udgangstilstande (sand eller falsk, dvs. 0 eller 1). I tilfælde af at returkoden er større end 1, fejlede evalueringen.
#! / bin / bash # script_test.sh var = $ 1 [$ var -eq 0] 2> / dev / null hvis [$? -qq 0 -o $? -eq 1] derefter ekko "Strengen er numerisk" fi
Variabel for heltalstypen
Du kan også initialisere en variabel af typen "heltal" gennem "POSIX" -skallen.
For at oprette en variabel af heltalstypen, skal du først erklære den med kommandoen "typeset -i" eller "let".
Her er et eksempel, der implementerer brugen af "lad" -kommandoen:
#! / bin / sh # script_let.sh var = $ 1 hvis lad $ var 2> / dev / null derefter ekko "$ var numerisk" andet ekko "$ var ikke numerisk" fi
Bemærk at linjen " hvis lad $ var 2> / dev / null " også kan skrives som:
hvis lad var 2> / dev / null
eller
hvis ((var)) 2> / dev / null