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 

Forrige Artikel Næste Artikel

Top Tips