<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Bash - Tag - Filipe Felisbino</title><link>https://felisbino.dev/tags/bash/</link><description>Bash - Tag - Filipe Felisbino</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 06 Dec 2015 00:00:00 +0000</lastBuildDate><atom:link href="https://felisbino.dev/tags/bash/" rel="self" type="application/rss+xml"/><item><title>Bash: Simple network ip/mask calculations with bash</title><link>https://felisbino.dev/posts/bash-calculating-ip-addresses/</link><pubDate>Sun, 06 Dec 2015 00:00:00 +0000</pubDate><author>Filipe Felisbino</author><guid>https://felisbino.dev/posts/bash-calculating-ip-addresses/</guid><description><![CDATA[<p>Here is quick-and-dirty network subnet calculator for bash:</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1">#converts an int to a netmask as 24 -&gt; 255.255.255.0</span>
</span></span><span class="line"><span class="cl">netmask<span class="o">()</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="nb">local</span> <span class="nv">mask</span><span class="o">=</span><span class="k">$((</span><span class="m">0</span>xffffffff &lt;&lt; <span class="o">(</span><span class="m">32</span> <span class="o">-</span> <span class="nv">$1</span><span class="k">))</span><span class="o">)</span><span class="p">;</span> <span class="nb">shift</span>
</span></span><span class="line"><span class="cl">    <span class="nb">local</span> ip n
</span></span><span class="line"><span class="cl">    <span class="k">for</span> n in <span class="m">1</span> <span class="m">2</span> <span class="m">3</span> 4<span class="p">;</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">        <span class="nv">ip</span><span class="o">=</span><span class="k">$((</span>mask <span class="o">&amp;</span> <span class="m">0</span>xff<span class="k">))</span><span class="si">${</span><span class="nv">ip</span><span class="p">:+.</span><span class="si">}</span><span class="nv">$ip</span>
</span></span><span class="line"><span class="cl">        <span class="nv">mask</span><span class="o">=</span><span class="k">$((</span>mask &gt;&gt; <span class="m">8</span><span class="k">))</span>
</span></span><span class="line"><span class="cl">    <span class="k">done</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="nv">$ip</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#receives a ip/mask parameter and returns the nth ip in that range:</span>
</span></span><span class="line"><span class="cl">get_nth_ip<span class="o">()</span>
</span></span><span class="line"><span class="cl"><span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">IFS</span><span class="o">=</span><span class="s2">&#34;. /&#34;</span> <span class="nb">read</span> -r i1 i2 i3 i4 mask <span class="o">&lt;&lt;&lt;</span> <span class="nv">$1</span>
</span></span><span class="line"><span class="cl">    <span class="nv">IFS</span><span class="o">=</span><span class="s2">&#34; .&#34;</span> <span class="nb">read</span> -r m1 m2 m3 m4 <span class="o">&lt;&lt;&lt;</span> <span class="k">$(</span>netmask <span class="nv">$mask</span><span class="k">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">printf</span> <span class="s2">&#34;%d.%d.%d.%d\n&#34;</span> <span class="s2">&#34;</span><span class="k">$((</span>i1 <span class="o">&amp;</span> m1<span class="k">))</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="k">$((</span>i2 <span class="o">&amp;</span> m2<span class="k">))</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="k">$((</span>i3 <span class="o">&amp;</span> m3<span class="k">))</span><span class="s2">&#34;</span> <span class="s2">&#34;</span><span class="k">$((</span><span class="nv">$2</span> <span class="o">+</span> <span class="o">(</span>i4 <span class="o">&amp;</span> m4<span class="k">))</span><span class="s2">)&#34;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span></span></span></code></pre></div></div>
<p>To find the 10th ip in a subnet you just need to:</p>]]></description></item></channel></rss>