<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://aznot.com/index.php?action=history&amp;feed=atom&amp;title=Bash</id>
	<title>Bash - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://aznot.com/index.php?action=history&amp;feed=atom&amp;title=Bash"/>
	<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Bash&amp;action=history"/>
	<updated>2026-04-30T09:04:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://aznot.com/index.php?title=Bash&amp;diff=9767&amp;oldid=prev</id>
		<title>Kenneth: /* Set Builtin */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Bash&amp;diff=9767&amp;oldid=prev"/>
		<updated>2026-03-31T17:12:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Set Builtin&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:12, 31 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l214&quot;&gt;Line 214:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 214:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The two most commonly used options:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The two most commonly used options:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  set -ex&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  set -ex &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; # exit immediately on failure, and display all commands&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; set +e -x  # do not exit immediately on failure, and display all commands&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Exit immediately if single command returns non 0 exit code:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Exit immediately if single command returns non 0 exit code:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key aznot:diff:1.41:old-8703:rev-9767:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
	<entry>
		<id>https://aznot.com/index.php?title=Bash&amp;diff=8703&amp;oldid=prev</id>
		<title>Kenneth: /* STDIN, STDOUT, STDERR IO Redirection */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Bash&amp;diff=8703&amp;oldid=prev"/>
		<updated>2025-05-16T19:37:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;STDIN, STDOUT, STDERR IO Redirection&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:37, 16 May 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l640&quot;&gt;Line 640:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 640:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==STDIN, STDOUT, STDERR IO Redirection==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==STDIN, STDOUT, STDERR IO Redirection==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[http://www.acodedb.com/115/how-to-redirect-stdin-stdout-stderr-and-use-simple-interprocess-communication/ How to redirect stdin, stdout, stderr and use simple interprocess communication]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;STDIN=1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;STDIN=1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;STDOUT=2&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;STDOUT=2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;STDERR=3&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;STDERR=3&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ref: [http://www.acodedb.com/115/how-to-redirect-stdin-stdout-stderr-and-use-simple-interprocess-communication/ How to redirect stdin, stdout, stderr and use simple interprocess communication]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Both to Log file and console ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; exec &amp;gt; &amp;gt;(tee -a $log_file) 2&amp;gt;&amp;amp;1&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===STDOUT===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===STDOUT===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key aznot:diff:1.41:old-8529:rev-8703:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
	<entry>
		<id>https://aznot.com/index.php?title=Bash&amp;diff=8529&amp;oldid=prev</id>
		<title>Kenneth: /* fork bomb */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Bash&amp;diff=8529&amp;oldid=prev"/>
		<updated>2025-03-31T16:57:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;fork bomb&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:57, 31 March 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l960&quot;&gt;Line 960:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 960:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  :&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  :&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;1. &lt;/del&gt;declare a function called &quot;:&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &lt;/ins&gt;declare a function called &quot;:&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2. &lt;/del&gt;the function calls itself into the background &quot;&amp;amp;&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &lt;/ins&gt;the function calls itself &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and pushes the call &lt;/ins&gt;into the background &quot;&amp;amp;&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;3. &lt;/del&gt;the semi colon just seperates the function from the call&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &lt;/ins&gt;the semi colon just seperates the function from the call&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Catch Signals ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Catch Signals ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
	<entry>
		<id>https://aznot.com/index.php?title=Bash&amp;diff=8528&amp;oldid=prev</id>
		<title>Kenneth: /* fork bomb */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Bash&amp;diff=8528&amp;oldid=prev"/>
		<updated>2025-03-31T16:57:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;fork bomb&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:57, 31 March 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l945&quot;&gt;Line 945:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 945:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== fork bomb ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== fork bomb ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; :(){:|:&amp;amp;};:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  :(){ :|:&amp;amp; };:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  :(){ :|:&amp;amp; };:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l951&quot;&gt;Line 951:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 954:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   :|:&amp;amp;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   :|:&amp;amp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  };:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  };:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; :() {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  : | : &amp;amp;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; :&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;1. declare a function called &quot;:&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2. the function calls itself into the background &quot;&amp;amp;&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;3. the semi colon just seperates the function from the call&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Catch Signals ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Catch Signals ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key aznot:diff:1.41:old-7853:rev-8528:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
	<entry>
		<id>https://aznot.com/index.php?title=Bash&amp;diff=7853&amp;oldid=prev</id>
		<title>Kenneth: /* Bash History */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Bash&amp;diff=7853&amp;oldid=prev"/>
		<updated>2024-08-28T22:53:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Bash History&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:53, 28 August 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1001&quot;&gt;Line 1,001:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1,001:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For permanence, add to your .profile or .bash_profile&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For permanence, add to your .profile or .bash_profile&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Capture First Pipped Command Return Code ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ref: https://stackoverflow.com/questions/1221833/pipe-output-and-capture-exit-status-in-bash&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== mispipe ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; mispipe - pipe two commands, returning the exit status of the first&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; mispipe [&quot;command1&quot;] [&quot;command2&quot;]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; The exit status of the first command. If the process terminated abnormally (due to a signal), 128 will be added to its exit status.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; mispipe - pipe two commands, returning the exit status of the first&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Note: mispipe is part of the &quot;moreutils&quot; package in Ubuntu&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; apt install moreutils&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== keywords ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== keywords ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key aznot:diff:1.41:old-7849:rev-7853:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
	<entry>
		<id>https://aznot.com/index.php?title=Bash&amp;diff=7849&amp;oldid=prev</id>
		<title>Kenneth: /* For Loop */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Bash&amp;diff=7849&amp;oldid=prev"/>
		<updated>2024-08-28T21:57:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;For Loop&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:57, 28 August 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l189&quot;&gt;Line 189:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 189:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   echo $i&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   echo $i&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  done&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  done&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; for (( i=1; i&amp;lt;=$RETRIES; i++ )); do ... ; done&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Note &amp;#039;break&amp;#039; and &amp;#039;continue&amp;#039; can be used to exit/continue a for loop.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Note &amp;#039;break&amp;#039; and &amp;#039;continue&amp;#039; can be used to exit/continue a for loop.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key aznot:diff:1.41:old-7399:rev-7849:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
	<entry>
		<id>https://aznot.com/index.php?title=Bash&amp;diff=7399&amp;oldid=prev</id>
		<title>Kenneth: /* unset */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Bash&amp;diff=7399&amp;oldid=prev"/>
		<updated>2024-05-24T04:41:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;unset&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:41, 24 May 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l206&quot;&gt;Line 206:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 206:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  echo ${myvar:-mydefault}  # or just return if empty to something using default set&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  echo ${myvar:-mydefault}  # or just return if empty to something using default set&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  ${myvar:=mydefault}  # or just set empty to something using default set&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  ${myvar:=mydefault}  # or just set empty to something using default set&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Set Builtin ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Options are either set with &quot;-&quot; or unset with &quot;+&quot; (opposite what math would imply, but makes sense considering default &quot;-&quot; param meaning).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The two most commonly used options:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; set -ex&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Exit immediately if single command returns non 0 exit code:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; set -e&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; # if you need to later turn it off:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; set +e&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Print commands and their arguments as they are executed: &amp;lt;ref&amp;gt;https://askubuntu.com/questions/1167965/what-does-set-x-do-in-a-bash-script&amp;lt;/ref&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; set -x&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; # if you need to later turn it off:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; set +x&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Reference:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; The Set Builtin (Bash Reference Manual)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Case (switch) ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Case (switch) ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key aznot:diff:1.41:old-6146:rev-7399:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
	<entry>
		<id>https://aznot.com/index.php?title=Bash&amp;diff=6146&amp;oldid=prev</id>
		<title>Kenneth: /* Full Path to File */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Bash&amp;diff=6146&amp;oldid=prev"/>
		<updated>2022-12-14T06:00:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Full Path to File&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Bash Programming ==&lt;br /&gt;
&lt;br /&gt;
[http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html BASH Programming - Introduction HOW-TO]&lt;br /&gt;
&lt;br /&gt;
[http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ Bash Guide for Beginners]&lt;br /&gt;
&lt;br /&gt;
[http://tldp.org/LDP/abs/html/ Advanced Bash-Scripting Guide - An in-depth exploration of the art of shell scripting - by Mendel Cooper]&lt;br /&gt;
:&amp;quot;This tutorial assumes no previous knowledge of scripting or programming, but progresses rapidly toward an intermediate/advanced level of instruction . . . all the while sneaking in little nuggets of UNIX® wisdom and lore. It serves as a textbook, a manual for self-study, and a reference and source of knowledge on shell scripting techniques. The exercises and heavily-commented examples invite active reader participation, under the premise that the only way to really learn scripting is to write scripts. This book is suitable for classroom use as a general introduction to programming concepts.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
EnglishFrontPage - Greg&amp;#039;s Wiki - http://mywiki.wooledge.org/EnglishFrontPage&lt;br /&gt;
:&amp;quot;This is Greg&amp;#039;s (also known as GreyCat&amp;#039;s) wiki. It has some pages which may be of interest for people doing Unix shell scripting or system administration. Its official front page URL is http://mywiki.wooledge.org/.&amp;quot;&lt;br /&gt;
* BashPitfalls - Greg&amp;#039;s Wiki - http://mywiki.wooledge.org/BashPitfalls&lt;br /&gt;
* BashGuide - Greg&amp;#039;s Wiki - http://mywiki.wooledge.org/BashGuide&lt;br /&gt;
* BashSheet - Greg&amp;#039;s Wiki - http://mywiki.wooledge.org/BashSheet&lt;br /&gt;
* BashFAQ - Greg&amp;#039;s Wiki - http://mywiki.wooledge.org/BashFAQ&lt;br /&gt;
&lt;br /&gt;
== Bash Prompt ==&lt;br /&gt;
&lt;br /&gt;
Customize your Bash prompt - makandropedia - http://makandracards.com/makandra/1090-customize-your-bash-prompt&lt;br /&gt;
&lt;br /&gt;
Git Example&lt;br /&gt;
&lt;br /&gt;
GIT adds a __git_ps1 function that will output your branch. You can add onto it by specifying a string argument. A &amp;#039;%s&amp;#039; in the string will be replaced by the branch. I configured it to also show the short hash. Below is how I did it: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
get_sha() {&lt;br /&gt;
    git rev-parse --short HEAD 2&amp;gt;/dev/null&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
get_hg_id() {&lt;br /&gt;
    id=&amp;quot;$(hg id -bt 2&amp;gt; /dev/null| sed -r &amp;#039;s/[\(\)]+//g&amp;#039;)&amp;quot;&lt;br /&gt;
    if [ -n &amp;quot;$id&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;($id)&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PS1=&amp;#039;${debian_chroot:+($debian_chroot)}&amp;#039;&lt;br /&gt;
PS1=$PS1&amp;#039;\[\033[00;32m\]\u@\h\[\033[00m\]:&amp;#039;&lt;br /&gt;
PS1=$PS1&amp;#039;\[\033[02;48m\]\w\[\033[00m\]&amp;#039;&lt;br /&gt;
PS1=$PS1&amp;#039;\[\033[00;35m\]$(__git_ps1 &amp;quot;(%s $(get_sha))&amp;quot;)$(get_hg_id)\[\033[00m\]&amp;#039;&lt;br /&gt;
PS1=$PS1&amp;#039;\[\033[01;38m\]\$\[\033[00m\] &amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bash script header==&lt;br /&gt;
&amp;quot; The first line of the script, starting with &amp;quot;#!&amp;quot; (called pound-bang), is special--it tells the shell what program should be used to interpret my script.&amp;quot; [http://linux.about.com/library/bl/open/newbie/blnewbie3.4.5.htm]&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
&lt;br /&gt;
Show debug information&lt;br /&gt;
 #!/bin/bash -x&lt;br /&gt;
&lt;br /&gt;
==Return Values==&lt;br /&gt;
 exit 1&lt;br /&gt;
 &lt;br /&gt;
 echo $?&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
 NAME=hello&lt;br /&gt;
 echo $name&lt;br /&gt;
 echo ${name}&lt;br /&gt;
&lt;br /&gt;
Variable by string name:&lt;br /&gt;
 SDA=/dev/sda&lt;br /&gt;
 SDB=/dev/sdb&lt;br /&gt;
 device=SDA&lt;br /&gt;
 echo ${!device}  # returns /dev/sda&lt;br /&gt;
&lt;br /&gt;
== Bash Special Parameters Variables ==&lt;br /&gt;
&lt;br /&gt;
These are $? $! $0 $1 - $9&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# man bash&lt;br /&gt;
   Special Parameters&lt;br /&gt;
       $?      Expands to the status of the most recently executed foreground pipeline.&lt;br /&gt;
       $!      Expands to the process ID of the most recently executed background (asynchronous) command. (PID)&lt;br /&gt;
       $0      Expands to the name of the shell or shell script.&lt;br /&gt;
       $1 - $9 Expands to the number of positional parameters in decimal.&lt;br /&gt;
       $@      Expands to all positional parameters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arrays ==&lt;br /&gt;
&lt;br /&gt;
Expansion Array Simple:&lt;br /&gt;
 ls myfile.{txt,jpg}&lt;br /&gt;
 # equivalent to:&lt;br /&gt;
 # ls myfile.txt myfile.jpg&lt;br /&gt;
&lt;br /&gt;
Expansion Array Range:&lt;br /&gt;
 echo my-{1..100}&lt;br /&gt;
 # equivalent to:&lt;br /&gt;
 # echo my-1 my-2 ... my-100&lt;br /&gt;
&lt;br /&gt;
Array:&lt;br /&gt;
 a=()  # empty&lt;br /&gt;
 b=(1 2 3)&lt;br /&gt;
&lt;br /&gt;
Dereference array: (one based)&lt;br /&gt;
 echo ${b[1]} = 2&lt;br /&gt;
&lt;br /&gt;
Dereference array in for loop:&lt;br /&gt;
 for i in &amp;quot;${mylist[@]}&amp;quot; ; do ... done&lt;br /&gt;
&lt;br /&gt;
Add item:&lt;br /&gt;
 mylist+=(&amp;quot;$i&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Capture command input==&lt;br /&gt;
 DBS=`mysql -uroot  -e&amp;quot;show databases&amp;quot;`&lt;br /&gt;
 for b in $DBS ;&lt;br /&gt;
 do&lt;br /&gt;
   mysql -uroot -e&amp;quot;show tables from $b&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
==Subcommands==&lt;br /&gt;
 echo $( echo &amp;quot;test&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
 { echo &amp;quot;hi&amp;quot;; xyz; }&lt;br /&gt;
&lt;br /&gt;
 OF=/var/my-backup-$(date +%Y%m%d).tgz&lt;br /&gt;
&lt;br /&gt;
==If==&lt;br /&gt;
 if [ &amp;quot;foo&amp;quot; = &amp;quot;foo&amp;quot; ]; then&lt;br /&gt;
   echo expression evaluated as true&lt;br /&gt;
 else&lt;br /&gt;
   echo expression evaluated as false&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
 if [ $? -ne 0 ]; then ... ; fi&lt;br /&gt;
&lt;br /&gt;
 mybool=true&lt;br /&gt;
 if $mybool ; then echo &amp;quot;yes&amp;quot; ; else echo &amp;quot;no&amp;quot; ; fi&lt;br /&gt;
&lt;br /&gt;
 if [...]; then&lt;br /&gt;
   ...&lt;br /&gt;
 elif [...]; then&lt;br /&gt;
   ...&lt;br /&gt;
 else&lt;br /&gt;
   ...&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Refering to use if [ $1 = $2 ].  This is not quite a good idea, as if either $S1 or $S2 is empty, you will get a parse error. x$1=x$2 or &amp;quot;$1&amp;quot;=&amp;quot;$2&amp;quot; is better. &lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
 T1=&amp;quot;a&amp;quot;&lt;br /&gt;
 T2=&amp;quot;b&amp;quot;&lt;br /&gt;
 if [ &amp;quot;$T1&amp;quot; = &amp;quot;$T2&amp;quot; ]; then&lt;br /&gt;
&lt;br /&gt;
Test if parameter passed&lt;br /&gt;
 if [ -z &amp;quot;$1&amp;quot; ]; then &lt;br /&gt;
   echo usage: $0 directory&lt;br /&gt;
   exit&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
Test if parameter unset verses empty &amp;quot;&amp;quot;:&lt;br /&gt;
 if [ -z ${TEST} ] ; then ... fi  # true if unset or empty &amp;quot;&amp;quot;&lt;br /&gt;
 if [ -z ${TEST+x} ] ; then ... fi  # true if unset only&lt;br /&gt;
 if [ ! -z ${TEST+x} ] ; then ... fi  # true if empty &amp;quot;&amp;quot; or populated&lt;br /&gt;
 # test with:&lt;br /&gt;
 #   unset TEST&lt;br /&gt;
 #   TEST=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Check for Empty Variable ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ -z &amp;quot;$var&amp;quot; ] || echo &amp;quot;Empty&amp;quot;&lt;br /&gt;
[[ -z &amp;quot;$var&amp;quot; ]] || echo &amp;quot;Empty&amp;quot;&lt;br /&gt;
# Check if $var is set using ! i.e. check if expr is false ##&lt;br /&gt;
[ ! -z &amp;quot;$var&amp;quot; ] &amp;amp;&amp;amp; echo &amp;quot;Empty&amp;quot;&lt;br /&gt;
[[ ! -z &amp;quot;$var&amp;quot; ]] &amp;amp;&amp;amp; echo &amp;quot;Empty&amp;quot;&lt;br /&gt;
[  -z &amp;quot;$_JAIL&amp;quot; ] &amp;amp;&amp;amp; echo &amp;quot;No&amp;quot; || echo &amp;quot;Yes&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* Bash Shell: Find Out If a Variable Is Empty Or Not - http://www.cyberciti.biz/faq/unix-linux-bash-script-check-if-variable-is-empty/&lt;br /&gt;
&lt;br /&gt;
==For Loop==&lt;br /&gt;
 for i in $( ls ); do&lt;br /&gt;
   echo item: $i&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
C-like for&lt;br /&gt;
 for i in `seq 1 10`; do&lt;br /&gt;
   echo $i&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Better C-like for loop [http://www.netadmintools.com/art423.html]&lt;br /&gt;
 for ((i=100;i&amp;lt;=115;i+=1)); do&lt;br /&gt;
  echo $i&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Note &amp;#039;break&amp;#039; and &amp;#039;continue&amp;#039; can be used to exit/continue a for loop.&lt;br /&gt;
&lt;br /&gt;
Alternate for format: [http://i8n1.blogspot.com/2010/04/ethernet-bonding-linux.html]&lt;br /&gt;
 for i in {3..5} ; ...&lt;br /&gt;
&lt;br /&gt;
== unset ==&lt;br /&gt;
&lt;br /&gt;
To unset a variable:&lt;br /&gt;
 unset myvar&lt;br /&gt;
&lt;br /&gt;
To check for an empty or unset variable:&lt;br /&gt;
 if [ -z $myvar ] ; then ... fi&lt;br /&gt;
 if [ &amp;quot;$myvar&amp;quot; = &amp;quot;&amp;quot; ] ; then ... fi&lt;br /&gt;
 if [ &amp;quot;${myvar-unset} = &amp;quot;unset&amp;quot; ] ; then ... fi&lt;br /&gt;
 echo ${myvar:-mydefault}  # or just return if empty to something using default set&lt;br /&gt;
 ${myvar:=mydefault}  # or just set empty to something using default set&lt;br /&gt;
&lt;br /&gt;
== Case (switch) ==&lt;br /&gt;
&lt;br /&gt;
 start() {&lt;br /&gt;
 ...&lt;br /&gt;
 } &lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
   start)&lt;br /&gt;
     start&lt;br /&gt;
     ;;&lt;br /&gt;
   stop)&lt;br /&gt;
     stop&lt;br /&gt;
     ;;&lt;br /&gt;
   restart | reload)&lt;br /&gt;
     stop&lt;br /&gt;
     sleep 3&lt;br /&gt;
     start&lt;br /&gt;
     ;;&lt;br /&gt;
   status)&lt;br /&gt;
     status&lt;br /&gt;
     ;;&lt;br /&gt;
   *)&lt;br /&gt;
     echo $&amp;quot;Usage: $0 (start|stop|restart|status)&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
==While Loop==&lt;br /&gt;
 COUNTER=0&lt;br /&gt;
 while [  $COUNTER -lt 10 ]; do&lt;br /&gt;
   echo The counter is $COUNTER&lt;br /&gt;
   let COUNTER=COUNTER+1 &lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
 COUNTER=20&lt;br /&gt;
   until [  $COUNTER -lt 10 ]; do&lt;br /&gt;
   echo COUNTER $COUNTER&lt;br /&gt;
   let COUNTER-=1&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
Simple Function:&lt;br /&gt;
 function hello {&lt;br /&gt;
   echo &amp;quot;hello&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 hello&lt;br /&gt;
&lt;br /&gt;
Exit Program:&lt;br /&gt;
 function quit {&lt;br /&gt;
   exit 1&lt;br /&gt;
 }&lt;br /&gt;
 quit&lt;br /&gt;
 echo &amp;quot;hello&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
 function param {&lt;br /&gt;
   echo $1&lt;br /&gt;
 }&lt;br /&gt;
 param hello&lt;br /&gt;
&lt;br /&gt;
Local variables:&lt;br /&gt;
 HELLO=bye&lt;br /&gt;
 function test {&lt;br /&gt;
   local HELLO=World&lt;br /&gt;
   echo $HELLO&lt;br /&gt;
 }&lt;br /&gt;
 echo $HELLO&lt;br /&gt;
 test&lt;br /&gt;
 echo $HELLO&lt;br /&gt;
&lt;br /&gt;
== System Arguments and Parameters ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
echo &amp;quot;Program Name: $0&amp;quot;&lt;br /&gt;
echo &amp;quot;First argument: $1&amp;quot;&lt;br /&gt;
echo &amp;quot;All arguments: $*&amp;quot;  # single word&lt;br /&gt;
echo &amp;quot;All arguments: $@&amp;quot;  # separate quoted strings&lt;br /&gt;
echo &amp;quot;Argument Count: $#&amp;quot; # actual count, does not include $0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== getopts ===&lt;br /&gt;
&lt;br /&gt;
The getopts construct uses two implicit variables. $OPTIND is the argument pointer (OPTion INDex) and $OPTARG (OPTion ARGument) the (optional) argument attached to an option. A colon following the option name in the declaration tags that option as having an associated argument. [http://tldp.org/LDP/abs/html/internal.html#EX33]&lt;br /&gt;
&lt;br /&gt;
A getopts construct usually comes packaged in a while loop, which processes the options and arguments one at a time, then increments the implicit $OPTIND variable to point to the next.&lt;br /&gt;
&lt;br /&gt;
# The arguments passed from the command-line to the script must be preceded by a dash (-). It is the prefixed - that lets getopts recognize command-line arguments as options. In fact, getopts will not process arguments without the prefixed -, and will terminate option processing at the first argument encountered lacking them.&lt;br /&gt;
# The getopts template differs slightly from the standard while loop, in that it lacks condition brackets.&lt;br /&gt;
# The getopts construct is a highly functional replacement for the traditional getopt external command.&lt;br /&gt;
&lt;br /&gt;
WARNING: Options must come before other arguments, or they won&amp;#039;t be processed!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while getopts &amp;quot;abcde:fg&amp;quot; Option&lt;br /&gt;
# Initial declaration.&lt;br /&gt;
# a, b, c, d, e, f, and g are the options (flags) expected.&lt;br /&gt;
# The : after option &amp;#039;e&amp;#039; shows it will have an argument passed with it.&lt;br /&gt;
do&lt;br /&gt;
  case $Option in&lt;br /&gt;
    a )  # Do something with variable &amp;#039;a&amp;#039;.&lt;br /&gt;
         ;;&lt;br /&gt;
    ...&lt;br /&gt;
    e )  # Do something with &amp;#039;e&amp;#039;, and also with $OPTARG,&lt;br /&gt;
         # which is the associated argument passed with option &amp;#039;e&amp;#039;.&lt;br /&gt;
         echo &amp;quot;Option -e- with argument \&amp;quot;$OPTARG\&amp;quot;   [OPTIND=${OPTIND}]&amp;quot;&lt;br /&gt;
         ;;&lt;br /&gt;
    * )  echo &amp;quot;Unimplemented option chosen.&amp;quot;;;   # Default.&lt;br /&gt;
  esac&lt;br /&gt;
done&lt;br /&gt;
shift $(($OPTIND - 1))&lt;br /&gt;
# Move argument pointer to next so $1 points to not opt argument&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot Example: (by Kenneth)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HARDREBOOT=true&lt;br /&gt;
&lt;br /&gt;
while getopts &amp;quot;a&amp;quot; Option&lt;br /&gt;
do&lt;br /&gt;
  case $Option in&lt;br /&gt;
    s )  HARDREBOOT=false  ;;&lt;br /&gt;
    * )  exit 1 ;;&lt;br /&gt;
  esac&lt;br /&gt;
done&lt;br /&gt;
shift $(($OPTIND - 1))&lt;br /&gt;
&lt;br /&gt;
if [ $# -ne 2 ] ; then&lt;br /&gt;
  echo &amp;quot;Usage: $0 [-s:SOFTREBOOT] &amp;lt;SERVER&amp;gt; &amp;lt;CARD&amp;gt;&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
SERVER=$1&lt;br /&gt;
CARD=$2&lt;br /&gt;
&lt;br /&gt;
if $HARDREBOOT ; then&lt;br /&gt;
  #...&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       getopts optstring name [args]&lt;br /&gt;
              getopts is used by shell procedures to parse positional  parame-&lt;br /&gt;
              ters.   optstring  contains  the  option characters to be recog-&lt;br /&gt;
              nized; if a character is followed by  a  colon,  the  option  is&lt;br /&gt;
              expected  to have an argument, which should be separated from it&lt;br /&gt;
              by white space.  The colon and question mark characters may  not&lt;br /&gt;
              be  used as option characters.  Each time it is invoked, getopts&lt;br /&gt;
              places the next option in the shell variable name,  initializing&lt;br /&gt;
              name if it does not exist, and the index of the next argument to&lt;br /&gt;
              be processed into the variable OPTIND.  OPTIND is initialized to&lt;br /&gt;
              1  each  time  the  shell or a shell script is invoked.  When an&lt;br /&gt;
              option requires an argument, getopts places that  argument  into&lt;br /&gt;
              the  variable OPTARG.  The shell does not reset OPTIND automati-&lt;br /&gt;
              cally; it must be  manually  reset  between  multiple  calls  to&lt;br /&gt;
              getopts within the same shell invocation if a new set of parame-&lt;br /&gt;
              ters is to be used.&lt;br /&gt;
&lt;br /&gt;
              When the end of options is encountered,  getopts  exits  with  a&lt;br /&gt;
              return  value  greater than zero.  OPTIND is set to the index of&lt;br /&gt;
              the first non-option argument, and name is set to ?.&lt;br /&gt;
&lt;br /&gt;
              getopts normally parses the positional parameters, but  if  more&lt;br /&gt;
              arguments are given in args, getopts parses those instead.&lt;br /&gt;
&lt;br /&gt;
              getopts  can  report errors in two ways.  If the first character&lt;br /&gt;
              of optstring is a colon, silent error  reporting  is  used.   In&lt;br /&gt;
              normal  operation  diagnostic  messages are printed when invalid&lt;br /&gt;
              options or missing option arguments  are  encountered.   If  the&lt;br /&gt;
              variable  OPTERR  is  set  to  0, no error messages will be dis-&lt;br /&gt;
              played, even if the first character of optstring is not a colon.&lt;br /&gt;
&lt;br /&gt;
              If an invalid option is seen, getopts places ? into name and, if&lt;br /&gt;
              not silent, prints an  error  message  and  unsets  OPTARG.   If&lt;br /&gt;
              getopts  is  silent,  the  option  character  found is placed in&lt;br /&gt;
              OPTARG and no diagnostic message is printed.&lt;br /&gt;
&lt;br /&gt;
              If a required argument is not found, and getopts is not  silent,&lt;br /&gt;
              a  question  mark  (?) is placed in name, OPTARG is unset, and a&lt;br /&gt;
              diagnostic message is printed.  If getopts  is  silent,  then  a&lt;br /&gt;
              colon  (:)  is  placed  in  name and OPTARG is set to the option&lt;br /&gt;
              character found.&lt;br /&gt;
&lt;br /&gt;
              getopts returns true if an option, specified or unspecified,  is&lt;br /&gt;
              found.  It returns false if the end of options is encountered or&lt;br /&gt;
              an error occurs.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Random ==&lt;br /&gt;
&lt;br /&gt;
[http://tldp.org/LDP/abs/html/randomvar.html $RANDOM: generate random integer]&lt;br /&gt;
 RANGE=100&lt;br /&gt;
 number=$RANDOM&lt;br /&gt;
 let &amp;quot;number $= $RANGE&amp;quot;&lt;br /&gt;
 echo $number&lt;br /&gt;
&lt;br /&gt;
Floor option:&lt;br /&gt;
 let &amp;quot;number = $RANDOM + $FLOOR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Random number between 0 and 99:&lt;br /&gt;
 echo $(( $RANDOM % 100 ))&lt;br /&gt;
&lt;br /&gt;
=== /dev/random ===&lt;br /&gt;
&lt;br /&gt;
 od -vAn -N4 -tu4 &amp;lt; /dev/urandom&lt;br /&gt;
&lt;br /&gt;
 od -An -N2 -i /dev/random&lt;br /&gt;
&lt;br /&gt;
 tr -dc &amp;#039;[:print:]&amp;#039; &amp;lt; /dev/urandom	# Filter non printable characters&lt;br /&gt;
&lt;br /&gt;
 i=$(( `dd if=/dev/random bs=1 count=2 2&amp;gt;/dev/null | od -i | sed &amp;#039;s/-//&amp;#039; | head -n 1 | awk &amp;#039;{print $2}&amp;#039;` % 100 ))&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* Bash Shell Generate Random Numbers - http://www.cyberciti.biz/faq/bash-shell-script-generating-random-numbers/&lt;br /&gt;
&lt;br /&gt;
== Strings ==&lt;br /&gt;
&lt;br /&gt;
string length:&lt;br /&gt;
 S=&amp;quot;Hello&amp;quot;&lt;br /&gt;
 echo ${#S}                 # 5&lt;br /&gt;
 echo `expr length $S`      # 5&lt;br /&gt;
 echo `expr &amp;quot;$S&amp;quot; : &amp;#039;.*&amp;#039;`    # 5&lt;br /&gt;
&lt;br /&gt;
lower case:&lt;br /&gt;
 echo &amp;quot;Hello&amp;quot; | tr &amp;#039;[A-Z]&amp;#039; &amp;#039;[a-z]&amp;#039;   # hello&lt;br /&gt;
&lt;br /&gt;
upper case:&lt;br /&gt;
 echo &amp;quot;Hello&amp;quot; | tr &amp;#039;[a-z]&amp;#039; &amp;#039;[A-Z]&amp;#039;   # HELLO&lt;br /&gt;
&lt;br /&gt;
mid string: (substring)&lt;br /&gt;
 # ${VAR:START:LENGTH}&lt;br /&gt;
 S=&amp;quot;Hello&amp;quot; ; echo ${S:2}    # llo&lt;br /&gt;
 S=&amp;quot;Hello&amp;quot; ; echo ${S:0:1}  # H&lt;br /&gt;
 S=&amp;quot;Hello&amp;quot; ; echo ${S::1}   # H&lt;br /&gt;
 S=&amp;quot;Hello&amp;quot; ; echo ${S:(-2)} # lo (notice paren)&lt;br /&gt;
&lt;br /&gt;
Process multiple line string:&lt;br /&gt;
 echo &amp;quot;$output&amp;quot; | while IFS= read line ; do&lt;br /&gt;
   echo &amp;quot;$line&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Padding with zeros:&lt;br /&gt;
 printf &amp;quot;%03d&amp;quot; 9  # 009&lt;br /&gt;
 printf &amp;quot;%03d&amp;quot; 9999  # 9999&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* Manipulating Strings - http://tldp.org/LDP/abs/html/string-manipulation.html&lt;br /&gt;
&lt;br /&gt;
== Script Path and Name ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCRIPT=&amp;quot;$0&amp;quot;&lt;br /&gt;
SCRIPT_NAME=`basename $SCRIPT`&lt;br /&gt;
SCRIPT_PATH=`echo $SCRIPT | sed &amp;quot;s/$SCRIPT_NAME$//&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== User Input ==&lt;br /&gt;
&lt;br /&gt;
Get input from the user&lt;br /&gt;
&lt;br /&gt;
 echo Please, enter your name&lt;br /&gt;
 read NAME&lt;br /&gt;
 echo &amp;quot;Hi $NAME!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Read Lines ==&lt;br /&gt;
&lt;br /&gt;
To read from stdin:&lt;br /&gt;
 while read line ; do&lt;br /&gt;
   for word in $line ; do&lt;br /&gt;
     echo $word&lt;br /&gt;
   done&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
To read from a file:&lt;br /&gt;
 while read line ; do&lt;br /&gt;
 ...&lt;br /&gt;
 done &amp;lt; $myfile&lt;br /&gt;
&lt;br /&gt;
To read from a variable: [http://unix.stackexchange.com/questions/9784/how-can-i-read-line-by-line-from-a-variable-in-bash]&lt;br /&gt;
 echo &amp;quot;$output&amp;quot; | while IFS= read -r line ; do&lt;br /&gt;
   for word in $line ; do&lt;br /&gt;
     echo $word&lt;br /&gt;
   done&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
== Math ==&lt;br /&gt;
&lt;br /&gt;
Add / Subtract / Multiply / Divide&lt;br /&gt;
 echo $(( 1 + 1 ))    # 2&lt;br /&gt;
 echo $(( 1 - 1 ))    # 0&lt;br /&gt;
 echo $(( 2 * 2 ))    # 4&lt;br /&gt;
 echo $(( 4 / 2 ))    # 2&lt;br /&gt;
&lt;br /&gt;
Exponents:&lt;br /&gt;
 echo $(( 2**20 ))    # 2^20 = 1048576&lt;br /&gt;
 echo &amp;quot;2^20&amp;quot; | bc    # 2^20 = 1048576&lt;br /&gt;
&lt;br /&gt;
Convert Decimal to Hex:&lt;br /&gt;
 printf &amp;quot;%X\n&amp;quot; 255    # FF&lt;br /&gt;
 echo $(echo &amp;quot;ibase=10; obase=16; 255&amp;quot; | bc)    # FF&lt;br /&gt;
&lt;br /&gt;
Hex to Decimal&lt;br /&gt;
 printf &amp;quot;%d\n&amp;quot; 0xB    # 11&lt;br /&gt;
 echo $(( 0xB ))    # 11&lt;br /&gt;
 echo $(( 0xA + 0x1 ))    # 11&lt;br /&gt;
 echo $(echo &amp;quot;ibase=16; B&amp;quot; | bc)    # 11&lt;br /&gt;
&lt;br /&gt;
== Arithmetic evaluation ==&lt;br /&gt;
Does not work:&lt;br /&gt;
 echo 1 + 1&lt;br /&gt;
&lt;br /&gt;
 echo $(( 1+1 ))&lt;br /&gt;
 echo $[ 1+1 ]&lt;br /&gt;
&lt;br /&gt;
If you need to use fractions, or more math or you just want it, you can use bc to evaluate arithmetic expressions.&lt;br /&gt;
&lt;br /&gt;
if i ran &amp;quot;echo $[3/4]&amp;quot; at the command prompt, it would return 0 because bash only uses integers when answering. If you ran &amp;quot;echo 3/4|bc -l&amp;quot;, it would properly return 0.75.&lt;br /&gt;
&lt;br /&gt;
 echo 3/4 | bc -l&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* Writing Robust Bash Shell Scripts - http://www.davidpashley.com/articles/writing-robust-shell-scripts.html&lt;br /&gt;
* Bash: Error handling - FVue - http://fvue.nl/wiki/Bash:_Error_handling&lt;br /&gt;
* Two simple tricks for better shell script error handling | TurnKey Linux Blog - http://www.turnkeylinux.org/blog/shell-error-handling&lt;br /&gt;
&lt;br /&gt;
=== verbose ===&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash -v&lt;br /&gt;
&lt;br /&gt;
 set -v&lt;br /&gt;
&lt;br /&gt;
=== uninitialized variable ===&lt;br /&gt;
&lt;br /&gt;
Exit your script if you try to use an uninitialized variable&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash -u&lt;br /&gt;
&lt;br /&gt;
 set -u&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* Writing Robust Bash Shell Scripts - http://www.davidpashley.com/articles/writing-robust-shell-scripts.html&lt;br /&gt;
&lt;br /&gt;
=== exit on non true return value ===&lt;br /&gt;
&lt;br /&gt;
exit the script if any statement returns a non-true return value.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash -e&lt;br /&gt;
&lt;br /&gt;
 set -e&lt;br /&gt;
&lt;br /&gt;
Unfortunately it means you can&amp;#039;t check $? as bash will never get to the checking code if it isn&amp;#039;t zero. There are other constructs you could use:&lt;br /&gt;
&lt;br /&gt;
 command&lt;br /&gt;
 if [ &amp;quot;$?&amp;quot;-ne 0]; then echo &amp;quot;command failed&amp;quot;; exit 1; fi &lt;br /&gt;
&lt;br /&gt;
could be replaced with&lt;br /&gt;
&lt;br /&gt;
 command || { echo &amp;quot;command failed&amp;quot;; exit 1; } &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 if ! command; then echo &amp;quot;command failed&amp;quot;; exit 1; fi &lt;br /&gt;
&lt;br /&gt;
What if you have a command that returns non-zero or you are not interested in its return value? You can use:&lt;br /&gt;
&lt;br /&gt;
 command || true &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
Turn off then on:&lt;br /&gt;
&lt;br /&gt;
 set +e  # turn off&lt;br /&gt;
 command1&lt;br /&gt;
 command2&lt;br /&gt;
 set -e  # turn on&lt;br /&gt;
&lt;br /&gt;
== Use trap for robust clean-ups ==&lt;br /&gt;
&lt;br /&gt;
A trap is a snippet of code that the shell executes when it exits or receives a signal. For example, pressing CTRL-C in the terminal where the script is running generates the INT signal. killing the process by default generates a TERM (I.e., terminate) signal.&lt;br /&gt;
&lt;br /&gt;
Enable trap (&lt;br /&gt;
 TMPFILE=$(tempfile)&lt;br /&gt;
 trap &amp;#039;echo &amp;quot;removing $TMPFILE&amp;quot;; rm -f $TMPFILE&amp;#039; INT TERM EXIT&lt;br /&gt;
&lt;br /&gt;
* INT - Ctrl+C&lt;br /&gt;
* TERM - kill&lt;br /&gt;
* EXIT - regular exit&lt;br /&gt;
&lt;br /&gt;
Disable trap:&lt;br /&gt;
 trap - INT TERM EXIT&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
If you decide to trap INT or TERM, it would be wise to properly kill your process with INT or TERM:&lt;br /&gt;
&lt;br /&gt;
 # if you&amp;#039;re using bash, you can use $BASHPID in place of $$&lt;br /&gt;
 for sig in INT TERM EXIT; do&lt;br /&gt;
     trap &amp;quot;rm -f \&amp;quot;\$TMPFILE\&amp;quot;; [[ $sig == EXIT ]] || kill -$sig $$&amp;quot; $sig&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Not propagating signals in this manner is being a bad Unix citizen. Bash would have re-raised the SIGNAL, so you should too.&lt;br /&gt;
&lt;br /&gt;
This guy has it figured out: http://www.cons.org/cracauer/sigint.html&lt;br /&gt;
&lt;br /&gt;
==STDIN, STDOUT, STDERR IO Redirection==&lt;br /&gt;
[http://www.acodedb.com/115/how-to-redirect-stdin-stdout-stderr-and-use-simple-interprocess-communication/ How to redirect stdin, stdout, stderr and use simple interprocess communication]&lt;br /&gt;
&lt;br /&gt;
STDIN=1&lt;br /&gt;
STDOUT=2&lt;br /&gt;
STDERR=3&lt;br /&gt;
&lt;br /&gt;
===STDOUT===&lt;br /&gt;
 #Print to stdout&lt;br /&gt;
 echo &amp;quot;text&amp;quot;&lt;br /&gt;
 #Redirect stdout to a file&lt;br /&gt;
 echo &amp;quot;text&amp;quot; &amp;gt; out.txt&lt;br /&gt;
 #Redirect stdout to the end of a file (append)&lt;br /&gt;
 echo &amp;quot;text&amp;quot; &amp;gt;&amp;gt; out.txt&lt;br /&gt;
 #Use the tee operator to copy stdin to stdout and additionally into a file. Very &lt;br /&gt;
 #nice if you want to watch the output on the console and need it in a file at the same time.&lt;br /&gt;
 echo &amp;quot;text&amp;quot; | tee out.txt&lt;br /&gt;
&lt;br /&gt;
===STDERR===&lt;br /&gt;
 #Print to stderr&lt;br /&gt;
 echo &amp;quot;text&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
 #Redirect stderr to a file&lt;br /&gt;
 xyz 2&amp;gt; err.txt&lt;br /&gt;
 #Redirect stderr to the end of a file (append)&lt;br /&gt;
 xyz 2&amp;gt;&amp;gt; err.txt&lt;br /&gt;
&lt;br /&gt;
===STDOUT and STDERR===&lt;br /&gt;
 #Redirect stdout and stderr to a file. (The curley braces are just for the grouping of the commands.)&lt;br /&gt;
 { echo &amp;quot;text&amp;quot;;xyz; } &amp;gt;result.txt 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
 #Redirect both&lt;br /&gt;
 { echo &amp;quot;test&amp;quot;;xyz; } &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
===STDIN===&lt;br /&gt;
 #Read from stdin(keyboard) and write into the variable testvar.&lt;br /&gt;
 read testvar&lt;br /&gt;
 #Redirect stdin to a file. This means that a command which expects data from the &lt;br /&gt;
 #keyboard gets its data now from a file. As an example we assign the first line of &lt;br /&gt;
 #the file test.txt to the variable testvar.&lt;br /&gt;
 read testvar &amp;lt; test.txt&lt;br /&gt;
&lt;br /&gt;
===PIPES===&lt;br /&gt;
Pipes (|) are used to redirect stdout to stdin of another process.&lt;br /&gt;
 tail /var/log/messages | grep error&lt;br /&gt;
 echo &amp;quot;text&amp;quot; |tee result.txt&lt;br /&gt;
 # Pass stderr instead of stdin to a pipe&lt;br /&gt;
 xyz 2&amp;gt;&amp;amp;1 1&amp;gt;/dev/null | grep bash&lt;br /&gt;
 # To redirect stdout to stderr and stderr to stdout we need a third stream&lt;br /&gt;
 { echo &amp;quot;text&amp;quot;;xyz; } 3&amp;gt;&amp;amp;1 1&amp;gt;&amp;amp;2 2&amp;gt;&amp;amp;3 &lt;br /&gt;
&lt;br /&gt;
===NAMED PIPES===&lt;br /&gt;
A special sort of pipes are named pipes. They are used to exchange data between several processes.&lt;br /&gt;
 # Create a named pipe&lt;br /&gt;
 mkfifo testpipe&lt;br /&gt;
 #They can be recognized by the p:&lt;br /&gt;
 ls -lha &lt;br /&gt;
 prw-r--r--  1 root     root         0 Dec  2 04:09 testpipe&lt;br /&gt;
 #Read from the named pipe&lt;br /&gt;
 read testvar &amp;lt; testpipe&lt;br /&gt;
 #Write to the named pipe&lt;br /&gt;
 echo &amp;quot;sometext&amp;quot; &amp;gt; testpipe&lt;br /&gt;
&lt;br /&gt;
===FILE DESCRIPTORS===&lt;br /&gt;
&lt;br /&gt;
Redirect stdout to stderr:&lt;br /&gt;
 exec 1&amp;gt;&amp;amp;2&lt;br /&gt;
&lt;br /&gt;
It is possible to create additional streams to access files. These streams are called file descriptors.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Create a new file descriptor for reading from file test.txt&lt;br /&gt;
exec 3&amp;lt; test.txt&lt;br /&gt;
&lt;br /&gt;
#Create a new file descriptor for writing into file test.txt.&lt;br /&gt;
#WARNING: Just the creation of the descriptor will empty the file!&lt;br /&gt;
exec 4&amp;gt; test.txt&lt;br /&gt;
&lt;br /&gt;
#Create a new file descriptor for appending data to file test.txt.&lt;br /&gt;
exec 5&amp;gt;&amp;gt; test.txt&lt;br /&gt;
&lt;br /&gt;
#Read one line from test.txt and save it in testvar&lt;br /&gt;
read testvar &amp;lt;&amp;amp;3&lt;br /&gt;
&lt;br /&gt;
#Write one line into test.txt&lt;br /&gt;
echo &amp;quot;sometext&amp;quot; &amp;gt;&amp;amp;4&lt;br /&gt;
&lt;br /&gt;
#The creation of the file descriptor for writing already deleted the content of the file. The first&lt;br /&gt;
#writing to this descriptor will put the text into line 1. The second writing into line 2 and so on.&lt;br /&gt;
#Appending text to test.txt&lt;br /&gt;
echo &amp;quot;sometext&amp;quot; &amp;gt;&amp;amp;5&lt;br /&gt;
&lt;br /&gt;
#All file descriptors should be closed at last&lt;br /&gt;
exec 3&amp;gt;&amp;amp;-&lt;br /&gt;
exec 4&amp;gt;&amp;amp;-&lt;br /&gt;
exec 5&amp;gt;&amp;amp;-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Additional STDIN/STDOUT/STDERR Resources===&lt;br /&gt;
*[http://www.acodedb.com/115/how-to-redirect-stdin-stdout-stderr-and-use-simple-interprocess-communication/ How to redirect stdin, stdout, stderr and use simple interprocess communication]&lt;br /&gt;
*[http://www.linuxdevcenter.com/pub/a/linux/lpt/13_01.html Using Standard Input and Output]&lt;br /&gt;
*[http://www.cpqlinux.com/redirect.html Linux I/O Redirection]&lt;br /&gt;
&lt;br /&gt;
=== Redirect stdout, stderr after process is running ===&lt;br /&gt;
&lt;br /&gt;
linux - Redirect STDERR / STDOUT of a process AFTER it&amp;#039;s been started, using command line? - Stack Overflow - http://stackoverflow.com/questions/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-line&lt;br /&gt;
&lt;br /&gt;
attach to the process in question using gdb, and run:&lt;br /&gt;
    p dup2(open(&amp;quot;/dev/null&amp;quot;, 0), 1)&lt;br /&gt;
    p dup2(open(&amp;quot;/dev/null&amp;quot;, 0), 2)&lt;br /&gt;
    detach&lt;br /&gt;
    quit&lt;br /&gt;
&lt;br /&gt;
== daemonize ==&lt;br /&gt;
&lt;br /&gt;
Background a task by appending &amp;#039;&amp;amp;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 ./task &amp;amp;&lt;br /&gt;
&lt;br /&gt;
== sed ==&lt;br /&gt;
&lt;br /&gt;
 echo hi | sed &amp;quot;s/hi/bye/g&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 sed &amp;#039;s/to_be_replaced/replaced/g&amp;#039; /tmp/dummy&lt;br /&gt;
&lt;br /&gt;
 $awk &amp;#039;/test/ {print}&amp;#039; /tmp/dummy&lt;br /&gt;
&lt;br /&gt;
 $awk &amp;#039;/test/ {i=i+1} END {print i}&amp;#039; /tmp/dummy&lt;br /&gt;
&lt;br /&gt;
See also [[sed]]&lt;br /&gt;
&lt;br /&gt;
== cut ==&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;hello world&amp;quot; | cut -f 1 -d &amp;#039; &amp;#039;&lt;br /&gt;
 echo &amp;quot;hello world&amp;quot; | cut -f 1-2 -d &amp;#039; &amp;#039;&lt;br /&gt;
&lt;br /&gt;
== tput ==&lt;br /&gt;
&lt;br /&gt;
Hide cursor: [http://www.garayed.com/linux/220141-possible-hide-cursor-console-mode.html]&lt;br /&gt;
 tput civis&lt;br /&gt;
&lt;br /&gt;
Show cursor:&lt;br /&gt;
 tput cnorm&lt;br /&gt;
&lt;br /&gt;
More information: [http://www.garayed.com/linux/220141-possible-hide-cursor-console-mode.html]&lt;br /&gt;
 man terminfo&lt;br /&gt;
 man tput&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use tput to move cursor to Y-X coordinates (reversed)&lt;br /&gt;
&lt;br /&gt;
The prompt appears at (y10,x4):&lt;br /&gt;
 tput cup 10 4&lt;br /&gt;
&lt;br /&gt;
Clears screen and prompt appears at (y1,x1). Note that (y0,x0) is the upper left corner.&lt;br /&gt;
 tput reset&lt;br /&gt;
&lt;br /&gt;
Print columns           &lt;br /&gt;
 tput cols&lt;br /&gt;
&lt;br /&gt;
Print lines (rows)&lt;br /&gt;
 tput lines&lt;br /&gt;
&lt;br /&gt;
==File renamer (simple)==&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # renames.sh&lt;br /&gt;
 # basic file renamer&lt;br /&gt;
 &lt;br /&gt;
 criteria=$1&lt;br /&gt;
 re_match=$2&lt;br /&gt;
 replace=$3&lt;br /&gt;
 &lt;br /&gt;
 for i in $( ls *$criteria* ); &lt;br /&gt;
 do&lt;br /&gt;
   src=$i&lt;br /&gt;
   tgt=$(echo $i | sed -e &amp;quot;s/$re_match/$replace/&amp;quot;)&lt;br /&gt;
   mv $src $tgt&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
== Get MAC and IP Address ==&lt;br /&gt;
&lt;br /&gt;
To get your IP address:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sbin/ifconfig \&lt;br /&gt;
   | grep &amp;#039;\&amp;lt;inet\&amp;gt;&amp;#039; \&lt;br /&gt;
   | sed -n &amp;#039;1p&amp;#039; \&lt;br /&gt;
   | tr -s &amp;#039; &amp;#039; \&lt;br /&gt;
   | cut -d &amp;#039; &amp;#039; -f3 \&lt;br /&gt;
   | cut -d &amp;#039;:&amp;#039; -f2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get your MAC address (Hardware address):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sbin/ifconfig \&lt;br /&gt;
   | grep &amp;#039;eth0&amp;#039; \&lt;br /&gt;
   | tr -s &amp;#039; &amp;#039; \&lt;br /&gt;
   | cut -d &amp;#039; &amp;#039; -f5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this retrieves the address of the eth0 interface by default. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source: [http://www.linuxjournal.com/content/tech-tip-getting-your-mac-and-ip-address-script Tech Tip: Getting Your MAC and IP Address In a Script | Linux Journal]&lt;br /&gt;
&lt;br /&gt;
== Here Document ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   Here Documents&lt;br /&gt;
       This type of redirection instructs the shell to read input from the current source until a line  con-&lt;br /&gt;
       taining only word (with no trailing blanks) is seen.  All of the lines read up to that point are then&lt;br /&gt;
       used as the standard input for a command.&lt;br /&gt;
&lt;br /&gt;
       The format of here-documents is:&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;&amp;lt;[-]word&lt;br /&gt;
                      here-document&lt;br /&gt;
              delimiter&lt;br /&gt;
&lt;br /&gt;
       No parameter expansion, command substitution, arithmetic expansion, or  pathname  expansion  is  per-&lt;br /&gt;
       formed  on  word.  If any characters in word are quoted, the delimiter is the result of quote removal&lt;br /&gt;
       on word, and the lines in the here-document are not expanded.  If word is unquoted, all lines of  the&lt;br /&gt;
       here-document  are  subjected to parameter expansion, command substitution, and arithmetic expansion.&lt;br /&gt;
       In the latter case, the character sequence \&amp;lt;newline&amp;gt; is ignored, and \ must be  used  to  quote  the&lt;br /&gt;
       characters \, $, and ‘.&lt;br /&gt;
&lt;br /&gt;
       If the redirection operator is &amp;lt;&amp;lt;-, then all leading tab characters are stripped from input lines and&lt;br /&gt;
       the line containing delimiter.  This allows here-documents within shell scripts to be indented  in  a&lt;br /&gt;
       natural fashion.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Here String ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   Here Strings&lt;br /&gt;
       A variant of here documents, the format is:&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;&amp;lt;&amp;lt;word&lt;br /&gt;
&lt;br /&gt;
       The word is expanded and supplied to the command on its standard input.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== color ==&lt;br /&gt;
&lt;br /&gt;
 COLOR=&amp;quot;1;35&amp;quot;&lt;br /&gt;
 COLOR=35&lt;br /&gt;
 echo -e -n &amp;quot;\e[${COLOR}m&amp;quot; ; echo -n &amp;quot;colored text&amp;quot; ; echo -e &amp;quot;\e[0m&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Colors:&lt;br /&gt;
 Black       0;30     Dark Gray     1;30&lt;br /&gt;
 Blue        0;34     Light Blue    1;34&lt;br /&gt;
 Green       0;32     Light Green   1;32&lt;br /&gt;
 Cyan        0;36     Light Cyan    1;36&lt;br /&gt;
 Red         0;31     Light Red     1;31&lt;br /&gt;
 Purple      0;35     Light Purple  1;35&lt;br /&gt;
 Brown       0;33     Yellow        1;33&lt;br /&gt;
 Light Gray  0;37     White         1;37&lt;br /&gt;
&lt;br /&gt;
Source: http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
txtblk=&amp;#039;\e[0;30m&amp;#039; # Black - Regular&lt;br /&gt;
txtred=&amp;#039;\e[0;31m&amp;#039; # Red&lt;br /&gt;
txtgrn=&amp;#039;\e[0;32m&amp;#039; # Green&lt;br /&gt;
txtylw=&amp;#039;\e[0;33m&amp;#039; # Yellow&lt;br /&gt;
txtblu=&amp;#039;\e[0;34m&amp;#039; # Blue&lt;br /&gt;
txtpur=&amp;#039;\e[0;35m&amp;#039; # Purple&lt;br /&gt;
txtcyn=&amp;#039;\e[0;36m&amp;#039; # Cyan&lt;br /&gt;
txtwht=&amp;#039;\e[0;37m&amp;#039; # White&lt;br /&gt;
bldblk=&amp;#039;\e[1;30m&amp;#039; # Black - Bold&lt;br /&gt;
bldred=&amp;#039;\e[1;31m&amp;#039; # Red&lt;br /&gt;
bldgrn=&amp;#039;\e[1;32m&amp;#039; # Green&lt;br /&gt;
bldylw=&amp;#039;\e[1;33m&amp;#039; # Yellow&lt;br /&gt;
bldblu=&amp;#039;\e[1;34m&amp;#039; # Blue&lt;br /&gt;
bldpur=&amp;#039;\e[1;35m&amp;#039; # Purple&lt;br /&gt;
bldcyn=&amp;#039;\e[1;36m&amp;#039; # Cyan&lt;br /&gt;
bldwht=&amp;#039;\e[1;37m&amp;#039; # White&lt;br /&gt;
unkblk=&amp;#039;\e[4;30m&amp;#039; # Black - Underline&lt;br /&gt;
undred=&amp;#039;\e[4;31m&amp;#039; # Red&lt;br /&gt;
undgrn=&amp;#039;\e[4;32m&amp;#039; # Green&lt;br /&gt;
undylw=&amp;#039;\e[4;33m&amp;#039; # Yellow&lt;br /&gt;
undblu=&amp;#039;\e[4;34m&amp;#039; # Blue&lt;br /&gt;
undpur=&amp;#039;\e[4;35m&amp;#039; # Purple&lt;br /&gt;
undcyn=&amp;#039;\e[4;36m&amp;#039; # Cyan&lt;br /&gt;
undwht=&amp;#039;\e[4;37m&amp;#039; # White&lt;br /&gt;
bakblk=&amp;#039;\e[40m&amp;#039;   # Black - Background&lt;br /&gt;
bakred=&amp;#039;\e[41m&amp;#039;   # Red&lt;br /&gt;
badgrn=&amp;#039;\e[42m&amp;#039;   # Green&lt;br /&gt;
bakylw=&amp;#039;\e[43m&amp;#039;   # Yellow&lt;br /&gt;
bakblu=&amp;#039;\e[44m&amp;#039;   # Blue&lt;br /&gt;
bakpur=&amp;#039;\e[45m&amp;#039;   # Purple&lt;br /&gt;
bakcyn=&amp;#039;\e[46m&amp;#039;   # Cyan&lt;br /&gt;
bakwht=&amp;#039;\e[47m&amp;#039;   # White&lt;br /&gt;
txtrst=&amp;#039;\e[0m&amp;#039;    # Text Reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Source: https://wiki.archlinux.org/index.php/Color_Bash_Prompt&lt;br /&gt;
&lt;br /&gt;
== fork ==&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 sleepreboot() {&lt;br /&gt;
   sleep 60&lt;br /&gt;
   reboot&lt;br /&gt;
 }&lt;br /&gt;
 sleepreboot &amp;amp;&amp;gt;/dev/null &amp;amp;&lt;br /&gt;
&lt;br /&gt;
=== fork bomb ===&lt;br /&gt;
&lt;br /&gt;
 :(){ :|:&amp;amp; };:&lt;br /&gt;
&lt;br /&gt;
 :(){&lt;br /&gt;
  :|:&amp;amp;&lt;br /&gt;
 };:&lt;br /&gt;
&lt;br /&gt;
== Catch Signals ==&lt;br /&gt;
&lt;br /&gt;
Trap signals with &amp;#039;trap&amp;#039; command: [http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html]&lt;br /&gt;
 # trap [COMMANDS] [SIGNALS]&lt;br /&gt;
 trap &amp;quot;echo Booh!&amp;quot; SIGINT SIGTERM&lt;br /&gt;
 trap &amp;quot;{ rm -f $LOCKFILE ; exit 255 ; }&amp;quot; EXIT    # note last ;&lt;br /&gt;
&lt;br /&gt;
== Full Path to File ==&lt;br /&gt;
&lt;br /&gt;
 readlink -f file.ext&lt;br /&gt;
&lt;br /&gt;
== Trim Tailing White Space ==&lt;br /&gt;
&lt;br /&gt;
 sed -e &amp;#039;s/[[:space:]]*$//&amp;#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 find . -name &amp;quot;*.py&amp;quot; -exec sed -i -e &amp;#039;s/[[:space:]]*$//&amp;#039;)&amp;quot; {} \;&lt;br /&gt;
&lt;br /&gt;
ref: [https://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-a-bash-variable]&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
&lt;br /&gt;
*http://www.die.net/doc/linux/abs-guide/randomvar.html&lt;br /&gt;
*http://www.linux.com/guides/abs-guide/bashver2.shtml&lt;br /&gt;
&lt;br /&gt;
==Bash Cookbook==&lt;br /&gt;
[http://www.bashcookbook.com/ Bash Cookbook]&lt;br /&gt;
&lt;br /&gt;
[http://tldp.org/guides.html Linux Documentation Project Guides]&lt;br /&gt;
&lt;br /&gt;
*http://bashscripts.org/&lt;br /&gt;
*http://examples.oreilly.com/bashckbk/&lt;br /&gt;
*http://www.amazon.com/bash-Cookbook-Solutions-Examples-Cookbooks/dp/0596526784&lt;br /&gt;
&lt;br /&gt;
== Fedora Classroom ==&lt;br /&gt;
&lt;br /&gt;
[https://fedoraproject.org/wiki/Introduction_to_bash_shell_scripting_Classroom_(20090307) Introduction to bash shell scripting (20090307 classroom) - FedoraProject]&lt;br /&gt;
&lt;br /&gt;
== Bash History ==&lt;br /&gt;
&lt;br /&gt;
Bash History File&lt;br /&gt;
 ~/.bash_history&lt;br /&gt;
&lt;br /&gt;
Disable bash history file: [https://www.guyrutenberg.com/2011/05/10/temporary-disabling-bash-history/]&lt;br /&gt;
 unset HISTFILE&lt;br /&gt;
&lt;br /&gt;
Clear history:&lt;br /&gt;
 history -c&lt;br /&gt;
&lt;br /&gt;
For permanence, add to your .profile or .bash_profile&lt;br /&gt;
&lt;br /&gt;
== keywords ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:Bash Programming]]&lt;/div&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
</feed>