{"id":405,"date":"2026-02-10T03:47:26","date_gmt":"2026-02-10T03:47:26","guid":{"rendered":"https:\/\/mitalgoswami.in\/?p=405"},"modified":"2026-02-17T04:37:20","modified_gmt":"2026-02-17T04:37:20","slug":"condition","status":"publish","type":"post","link":"https:\/\/mitalgoswami.in\/?p=405","title":{"rendered":"condition"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">What is <code>test<\/code> command?<\/h2>\n\n\n\n<p>The <strong><code>test<\/code> command<\/strong> is used to <strong>check conditions<\/strong> and return <strong>true or false<\/strong>.<br>It\u2019s mainly used in <strong>shell scripts<\/strong> and <strong><code>if<\/code> statements<\/strong>.<\/p>\n\n\n\n<p>&#x1f449; It <strong>does not print output<\/strong><br>&#x1f449; It sets an <strong>exit status<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>0<\/code> \u2192 condition is <strong>true<\/strong><\/li>\n\n\n\n<li><code>1<\/code> \u2192 condition is <strong>false<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f539; Syntax<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>test condition\n<\/code><\/pre>\n\n\n\n<p>OR (more commonly)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91; condition ]\n<\/code><\/pre>\n\n\n\n<p>&#x26a0;&#xfe0f; Important:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>There <strong>must be spaces<\/strong> after <code>[<\/code> and before <code>]<\/code><\/li>\n<\/ul>\n\n\n\n<p>&#x2705; Correct:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91; -f file.txt ]\n<\/code><\/pre>\n\n\n\n<p>&#x274c; Wrong:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;-f file.txt]<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Option<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>-f file<\/code><\/td><td>File exists and is a <strong>regular file<\/strong><\/td><\/tr><tr><td><code>-d dir<\/code><\/td><td>Directory exists<\/td><\/tr><tr><td><code>-e file<\/code><\/td><td>File exists (any type)<\/td><\/tr><tr><td><code>-r file<\/code><\/td><td>File has <strong>read<\/strong> permission<\/td><\/tr><tr><td><code>-w file<\/code><\/td><td>File has <strong>write<\/strong> permission<\/td><\/tr><tr><td><code>-x file<\/code><\/td><td>File has <strong>execute<\/strong> permission<\/td><\/tr><tr><td><code>-s file<\/code><\/td><td>File exists and <strong>not empty<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Example<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>if &#91; -f a.sh ]; then\n    echo \"File exists\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f522; Integer (number) tests<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Option<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>-eq<\/code><\/td><td>equal<\/td><\/tr><tr><td><code>-ne<\/code><\/td><td>not equal<\/td><\/tr><tr><td><code>-gt<\/code><\/td><td>greater than<\/td><\/tr><tr><td><code>-lt<\/code><\/td><td>less than<\/td><\/tr><tr><td><code>-ge<\/code><\/td><td>greater or equal<\/td><\/tr><tr><td><code>-le<\/code><\/td><td>less or equal<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Example<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>a=10\nb=20\n\nif &#91; $a -lt $b ]; then\n    echo \"a is smaller\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f524; String tests<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Option<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>=<\/code><\/td><td>strings are equal<\/td><\/tr><tr><td><code>!=<\/code><\/td><td>strings not equal<\/td><\/tr><tr><td><code>-z str<\/code><\/td><td>string is empty<\/td><\/tr><tr><td><code>-n str<\/code><\/td><td>string is not empty<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Example<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>name=\"Linux\"\n\nif &#91; \"$name\" = \"Linux\" ]; then\n    echo \"Correct OS\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f517; Logical operators<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operator<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>-a<\/code><\/td><td>AND<\/td><\/tr><tr><td><code>-o<\/code><\/td><td>OR<\/td><\/tr><tr><td><code>!<\/code><\/td><td>NOT<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Example<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>if &#91; -f a.sh -a -r a.sh ]; then\n    echo \"Readable file\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f19a; <code>test<\/code> vs <code>[ ]<\/code> vs <code>[[ ]]<\/code><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Form<\/th><th>Usage<\/th><\/tr><\/thead><tbody><tr><td><code>test<\/code><\/td><td>Old, POSIX standard<\/td><\/tr><tr><td><code>[ ]<\/code><\/td><td>Same as <code>test<\/code>, most common<\/td><\/tr><tr><td><code>[[ ]]<\/code><\/td><td>Bash advanced (recommended)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Example<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;&#91; $a -gt 5 &amp;&amp; $b -lt 50 ]]\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f4a1; Quick real-life example<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n\nif &#91; -d \/home ]; then\n    echo \"Home directory exists\"\nelse\n    echo \"No home directory\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x26a0;&#xfe0f; Common mistakes<\/h2>\n\n\n\n<p>&#x274c; Missing spaces<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91; $a -eq 10]\n<\/code><\/pre>\n\n\n\n<p>&#x274c; Using <code>=<\/code> for numbers<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91; $a = 10 ]   # wrong for integers<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">&#x2705; 1. Check whether a file exists<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>if &#91; -e file.txt ]; then\n    echo \"File exists\"\nelse\n    echo \"File not found\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x2705; 2. Check whether a file is a directory<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>if &#91; -d \/home ]; then\n    echo \"It is a directory\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x2705; 3. Check whether a file is empty<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>if &#91; -s data.txt ]; then\n    echo \"File is not empty\"\nelse\n    echo \"File is empty\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x2705; 4. Check read permission of a file<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>if &#91; -r a.sh ]; then\n    echo \"Read permission granted\"\nelse\n    echo \"Read permission denied\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x2705; 5. Compare two numbers<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>a=15\nb=10\n\nif &#91; $a -gt $b ]; then\n    echo \"a is greater than b\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x2705; 6. Check whether a number is zero or not<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>num=0\n\nif &#91; $num -eq 0 ]; then\n    echo \"Number is zero\"\nelse\n    echo \"Number is not zero\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x2705; 7. Check whether a string is empty<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>name=\"\"\n\nif &#91; -z \"$name\" ]; then\n    echo \"String is empty\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x2705; 8. Compare two strings<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>os=\"Linux\"\n\nif &#91; \"$os\" = \"Linux\" ]; then\n    echo \"Correct OS\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x2705; 9. Check file existence AND execute permission<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>if &#91; -f run.sh -a -x run.sh ]; then\n    echo \"Executable file exists\"\nfi\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x2705; 10. Check whether a user entered argument<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>if &#91; -n \"$1\" ]; then\n    echo \"Argument provided\"\nelse\n    echo \"No argument given\"\nfi<\/code><\/pre>\n\n\n\n<p>test command<\/p>\n\n\n\n<p>[ -f a.txt ] &amp;&amp; echo &#8220;File exists&#8221;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is test command? The test command is used to check conditions and return true or false.It\u2019s mainly used in shell scripts and if statements. &#x1f449; It does not print output&#x1f449; It sets an exit status &#x1f539; Syntax OR (more commonly) &#x26a0;&#xfe0f; Important: &#x2705; Correct: &#x274c; Wrong: Option Meaning -f file File exists and is [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-405","post","type-post","status-publish","format-standard","hentry","category-unix"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/mitalgoswami.in\/index.php?rest_route=\/wp\/v2\/posts\/405","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mitalgoswami.in\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mitalgoswami.in\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mitalgoswami.in\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mitalgoswami.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=405"}],"version-history":[{"count":1,"href":"https:\/\/mitalgoswami.in\/index.php?rest_route=\/wp\/v2\/posts\/405\/revisions"}],"predecessor-version":[{"id":406,"href":"https:\/\/mitalgoswami.in\/index.php?rest_route=\/wp\/v2\/posts\/405\/revisions\/406"}],"wp:attachment":[{"href":"https:\/\/mitalgoswami.in\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mitalgoswami.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mitalgoswami.in\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}