Portál AbcLinuxu, 12. května 2025 21:31
riesim v podstate dost jednoduchu vec. potrebujem spravit podmienku, ktorou chcem overit ci IP adresa (z predchadzajuceho kodu) je alebo nie je v zozname excludovanych adries (ktorych sa dalsi vypocet/kod nema tykat. No a problem je, ako tu podmienku spravit co najjednoduhsie.
V podmienke testujem len cislo z posledneho octetu, teda podsiet/siet ostava rovnaka. Priklad:
Mam zoznam excludovanych cisel posledneho oktetu: 1,63,64,65,127,128,129,191,192,193. A ak spracovavana IP adresa obsahuje cislo z tohto zoznamu v poslednom oktete chcem, aby sa dalsie vykonavanie preskocilo (break).
Momentalne ma napada len najjednoduhsia vec: s pouzitim if [ "$ip" =~ "*.*.*.1" ] || [ "$ip" =~ "*.*.*.63" ] || [ "$ip" =~ "*.*.*.64" ] ...
co je samozrejme dost krkolomne a neprehladne. Existuje nejaky jednoduhsi zapis tejto podmienky?
Řešení dotazu:
if [[ $ip =~ \.(1|63|64|65|127|128|129|191|192|193)$ ]]; then ...
case "$ip" in *.1|*.63|*.64|...) break;; *) ;; esacPopř. jde i ten seznam dávat z proměnné (tedy, že
exclude='*.1|*.63|*.64'
).
shopt -s extglob [[ $ip = 192.168.0.@(1|2|3|4|5) ]] && break
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.