Portál AbcLinuxu, 5. listopadu 2025 10:33
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;;
*) ;;
esac
Popř. 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.