{"id":3508,"date":"2026-10-01T18:15:01","date_gmt":"2026-10-01T18:15:01","guid":{"rendered":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/"},"modified":"2026-10-01T18:15:11","modified_gmt":"2026-10-01T18:15:11","slug":"bash-for-loop","status":"publish","type":"post","link":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/","title":{"rendered":"Bash for Loop: Syntax and Examples for Server Admins"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Short answer:<\/strong> a Bash <code>for<\/code> loop runs the same commands once for each item in a list: <code>for item in one two three; do echo \"$item\"; done<\/code>. Use <code>{1..10}<\/code> for a fixed range of numbers, <code>for (( i = 1; i &lt;= n; i++ ))<\/code> when you need a counter, and <code>for f in *.log<\/code> to work through files. Every example below was run in Bash 5.2 on Debian 13, and the output shown is what we got.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"562\" src=\"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop-screenshot-1024x562.png\" alt=\"Terminal showing Bash for loops over a word list, a number range, a C-style counter and files on a Debian 13 server\" class=\"wp-image-3510\" srcset=\"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop-screenshot-1024x562.png 1024w, https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop-screenshot-300x165.png 300w, https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop-screenshot-768x422.png 768w, https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop-screenshot.png 1100w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Bash for loops run on a Debian 13 server: a word list, {1..5}, a C-style counter and a loop over files.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">The basic syntax<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The list form is the one you will use most. Bash expands the words after <code>in<\/code>, sets the variable to each word in turn, and runs everything between <code>do<\/code> and <code>done<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for name in alpha beta gamma; do\n  echo \"Hello, $name\"\ndone<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Hello, alpha\nHello, beta\nHello, gamma<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can write the same loop on one line. The semicolons stand in for the line breaks:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for i in 1 2 3; do echo \"Line $i\"; done<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Two details from the <a href=\"https:\/\/man7.org\/linux\/man-pages\/man1\/bash.1.html\" target=\"_blank\" rel=\"noopener noreferrer\">Bash manual<\/a> are worth knowing. If you leave out <code>in ...<\/code> completely, the loop runs over the script&#8217;s arguments (<code>\"$@\"<\/code>). And if the list expands to nothing, the body never runs and the loop returns status 0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Loop over a range of numbers<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Brace expansion builds the list for you. You can add a step, pad with zeros or count through letters:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for i in {1..5}; do echo \"Number $i\"; done      # 1 to 5\nfor i in {0..20..5}; do echo -n \"$i \"; done     # 0 5 10 15 20\nfor i in {01..10}; do echo -n \"$i \"; done       # 01 02 ... 10\nfor c in {a..e}; do echo -n \"$c \"; done         # a b c d e<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">There is one trap here. Brace expansion happens <em>before<\/em> variable expansion, so a variable inside the braces does not work:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>n=5\nfor i in {1..$n}; do echo \"$i\"; done<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>{1..5}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The loop ran once with the literal text <code>{1..5}<\/code>. When the end of the range comes from a variable, use <code>seq<\/code> or the C-style loop below:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for i in $(seq 1 \"$n\"); do echo -n \"$i \"; done   # 1 2 3 4 5<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">The C-style for loop<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bash also has an arithmetic form with a start, a test and a step, like C or JavaScript. It reads variables directly, so it is the cleanest choice for counters:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>n=5\nfor (( i = 1; i &lt;= n; i++ )); do\n  echo -n \"$i \"\ndone\n# 1 2 3 4 5\n\nfor (( i = 10; i &gt; 0; i -= 3 )); do echo -n \"$i \"; done\n# 10 7 4 1<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Loop over files<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Put a wildcard pattern in the list and Bash replaces it with the matching file names, sorted. Always quote the variable, because file names can contain spaces:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for f in *.log; do\n  echo \"Found: $f\"\ndone<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Found: access.log\nFound: error.log\nFound: my site.log<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Do not loop over the output of <code>ls<\/code>. In the same folder, <code>for f in $(ls *.log)<\/code> printed <code>my<\/code> and <code>site.log<\/code> as two separate files, because the output is split on spaces.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Also watch what happens when nothing matches. Without extra options, the pattern stays as plain text, so this loop runs once with a file name that does not exist:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for f in *.gz; do echo \"Found: $f\"; done\n# Found: *.gz<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Turn on <code>nullglob<\/code> and a pattern with no matches expands to nothing, so the loop simply does not run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shopt -s nullglob\nfor f in *.gz; do echo \"Found: $f\"; done\n# (no output)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Loop over an array<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use <code>\"${array[@]}\"<\/code> with the quotes, so an item with a space stays one item. To get the index as well, loop over <code>\"${!array[@]}\"<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>servers=(\"web1\" \"web2\" \"db 1\")\n\nfor s in \"${servers[@]}\"; do\n  echo \"Server: $s\"\ndone\n\nfor i in \"${!servers[@]}\"; do\n  echo \"$i: ${servers[$i]}\"\ndone<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Server: web1\nServer: web2\nServer: db 1\n0: web1\n1: web2\n2: db 1<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Reading a file line by line: use while, not for<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A common mistake is <code>for line in $(cat file)<\/code>. It splits on every space, not on line breaks. With a file containing <code>example.com<\/code>, <code>example.org<\/code> and <code>my site.test<\/code>, it gave four items instead of three. A <code>while read<\/code> loop keeps each line whole:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while IFS= read -r domain; do\n  echo \"[$domain]\"\ndone &lt; domains.txt<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>[example.com]\n[example.org]\n[my site.test]<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Skip or stop: continue and break<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>continue<\/code> jumps to the next item and <code>break<\/code> leaves the loop. This prints odd numbers and stops after 7:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for i in {1..10}; do\n  if (( i % 2 == 0 )); then continue; fi\n  if (( i &gt; 7 )); then break; fi\n  echo -n \"$i \"\ndone\n# 1 3 5 7<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For more on the <code>if<\/code> tests used here, see <a href=\"https:\/\/www.ucartz.com\/blog\/understanding-bash-ifelse-statements\/\">Understanding Bash if&#8230;else statements<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Practical examples for servers<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Check the HTTP status of several URLs<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>for url in https:\/\/example.com\/ https:\/\/example.com\/missing-page; do\n  code=$(curl -s -o \/dev\/null -w \"%{http_code}\" \"$url\")\n  echo \"$code  $url\"\ndone<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>200  https:\/\/example.com\/\n404  https:\/\/example.com\/missing-page<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Look up the IP address of several domains<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>for d in example.com example.org; do\n  echo \"$d: $(dig +short A \"$d\" | head -n1)\"\ndone<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This prints each domain with its first IPv4 address. See <a href=\"https:\/\/www.ucartz.com\/clients\/knowledgebase\/9279\/DNS-Lookup-Commands-How-to-Use-dig-nslookup-and-host.html\">DNS lookup commands<\/a> for more <code>dig<\/code> options.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compress log files and rename extensions<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>for f in *.log; do gzip -- \"$f\"; done\n\nfor f in *.jpeg; do mv -- \"$f\" \"${f%.jpeg}.jpg\"; done<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>--<\/code> stops a file name that starts with a dash from being read as an option. <code>${f%.jpeg}<\/code> removes <code>.jpeg<\/code> from the end of the name. In our test, <code>c d.jpeg<\/code> became <code>c d.jpg<\/code> without trouble because the variables are quoted.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Run jobs in parallel and wait for all of them<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>for i in {1..3}; do\n  sleep 1 &amp;\ndone\nwait\necho \"all done\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>&amp;<\/code> starts each command in the background and <code>wait<\/code> pauses until they have all finished. Keep the number of parallel jobs small on a busy server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quick reference<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>You want to loop over<\/th><th>Use<\/th><th>Watch out for<\/th><\/tr><\/thead><tbody><tr><td>A few fixed words<\/td><td><code>for x in a b c<\/code><\/td><td>Quote <code>\"$x\"<\/code> when you use it<\/td><\/tr><tr><td>A fixed range<\/td><td><code>for i in {1..10}<\/code><\/td><td>No variables inside the braces<\/td><\/tr><tr><td>A range from a variable<\/td><td><code>for (( i = 1; i &lt;= n; i++ ))<\/code><\/td><td>Or <code>$(seq 1 \"$n\")<\/code><\/td><\/tr><tr><td>Files<\/td><td><code>for f in *.log<\/code><\/td><td>Never <code>$(ls)<\/code>; consider <code>shopt -s nullglob<\/code><\/td><\/tr><tr><td>An array<\/td><td><code>for s in \"${arr[@]}\"<\/code><\/td><td>Keep the quotes and the <code>[@]<\/code><\/td><\/tr><tr><td>Lines of a file<\/td><td><code>while IFS= read -r line<\/code><\/td><td><code>for<\/code> splits on spaces<\/td><\/tr><tr><td>Script arguments<\/td><td><code>for arg<\/code> (no <code>in<\/code>)<\/td><td>Same as <code>for arg in \"$@\"<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Before you run a loop on a live server<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Do a dry run first: put <code>echo<\/code> in front of the real command (<code>echo rm -- \"$f\"<\/code>) and read what it would do.<\/li>\n\n\n\n<li>Quote every variable: <code>\"$f\"<\/code>, not <code>$f<\/code>.<\/li>\n\n\n\n<li>Use full paths in scripts that run from cron, because the working directory may not be what you expect. See <a href=\"https:\/\/www.ucartz.com\/clients\/knowledgebase\/9260\/How-to-List-Cron-Jobs-in-Linux-and-Read-Crontab-Syntax.html\">how to list cron jobs and read crontab syntax<\/a>.<\/li>\n\n\n\n<li>Test on a copy of the data, not the only copy.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">New to shell scripts? Start with <a href=\"https:\/\/www.ucartz.com\/clients\/knowledgebase\/894\/Create-a-script---Hello-World.html\">creating a Hello World script<\/a>, then keep the <a href=\"https:\/\/www.ucartz.com\/blog\/linux-commands-cheat-sheet\/\">Linux commands cheat sheet<\/a> nearby. If you want a place to practise with full root access, a <a href=\"https:\/\/www.ucartz.com\/vps-hosting\">KVM VPS<\/a> gives you your own Linux server to script against.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>How the Bash for loop works: lists, ranges, C-style counters, files, arrays and break\/continue, with tested examples and the mistakes to avoid.<\/p>\n","protected":false},"author":16,"featured_media":3509,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[222,400],"tags":[501,933,931,394,934,932],"class_list":["post-3508","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux-tutorials-guides","category-tutorials","tag-bash","tag-bash-scripting","tag-for-loop","tag-linux","tag-loops","tag-shell-scripting"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Bash for Loop: Syntax and Examples for Server Admins - Ucartz Blog<\/title>\n<meta name=\"description\" content=\"How the Bash for loop works: lists, ranges, C-style counters, files, arrays and break\/continue, with tested examples and the mistakes to avoid.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bash for Loop: Syntax and Examples for Server Admins - Ucartz Blog\" \/>\n<meta property=\"og:description\" content=\"How the Bash for loop works: lists, ranges, C-style counters, files, arrays and break\/continue, with tested examples and the mistakes to avoid.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/\" \/>\n<meta property=\"og:site_name\" content=\"Ucartz Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/UcartzOnline\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-01T18:15:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-01T18:15:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ithal P R\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ucartz\" \/>\n<meta name=\"twitter:site\" content=\"@ucartz\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ithal P R\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/\"},\"author\":{\"name\":\"Ithal P R\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#\\\/schema\\\/person\\\/5dd81ab7f25e4f1b46b3ab7519cd0f77\"},\"headline\":\"Bash for Loop: Syntax and Examples for Server Admins\",\"datePublished\":\"2026-10-01T18:15:01+00:00\",\"dateModified\":\"2026-10-01T18:15:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/\"},\"wordCount\":748,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/bash-for-loop.jpg\",\"keywords\":[\"bash\",\"bash scripting\",\"for loop\",\"Linux\",\"loops\",\"shell scripting\"],\"articleSection\":[\"Linux Tutorials\",\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/\",\"name\":\"Bash for Loop: Syntax and Examples for Server Admins - Ucartz Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/bash-for-loop.jpg\",\"datePublished\":\"2026-10-01T18:15:01+00:00\",\"dateModified\":\"2026-10-01T18:15:11+00:00\",\"description\":\"How the Bash for loop works: lists, ranges, C-style counters, files, arrays and break\\\/continue, with tested examples and the mistakes to avoid.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/bash-for-loop.jpg\",\"contentUrl\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/bash-for-loop.jpg\",\"width\":1200,\"height\":630,\"caption\":\"Bash for Loop: Syntax and Examples for Server Admins\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/bash-for-loop\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bash for Loop: Syntax and Examples for Server Admins\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/\",\"name\":\"Ucartz Blog\",\"description\":\"Guides on hosting, servers, streaming and automation\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#organization\"},\"alternateName\":\"Ucartz\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#organization\",\"name\":\"Ucartz Online Pvt Ltd\",\"alternateName\":\"Ucartz\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ucartz-logo-888x240-1.png\",\"contentUrl\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ucartz-logo-888x240-1.png\",\"width\":888,\"height\":240,\"caption\":\"Ucartz Online Pvt Ltd\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/UcartzOnline\",\"https:\\\/\\\/x.com\\\/ucartz\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/ucartzonline\",\"https:\\\/\\\/www.instagram.com\\\/ucartz_com\",\"https:\\\/\\\/www.trustpilot.com\\\/review\\\/ucartz.com\",\"https:\\\/\\\/n8n.io\\\/creators\\\/ucartz\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#\\\/schema\\\/person\\\/5dd81ab7f25e4f1b46b3ab7519cd0f77\",\"name\":\"Ithal P R\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f5a33c9e7f5df42637baf72daddd91b43a7a9d4d054cce0ba7920726f35cc91e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f5a33c9e7f5df42637baf72daddd91b43a7a9d4d054cce0ba7920726f35cc91e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f5a33c9e7f5df42637baf72daddd91b43a7a9d4d054cce0ba7920726f35cc91e?s=96&d=mm&r=g\",\"caption\":\"Ithal P R\"},\"description\":\"Hi, I'm Ithal! I write tech and hosting blogs at Ucartz.com, where I share insights, tips, and the latest updates from the world of web hosting and technology. Whether it's about server setups, control panels, or tools to power your online presence, I break things down in a way that's easy to understand, even if you're just starting out.\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/author\\\/ithal\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Bash for Loop: Syntax and Examples for Server Admins - Ucartz Blog","description":"How the Bash for loop works: lists, ranges, C-style counters, files, arrays and break\/continue, with tested examples and the mistakes to avoid.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/","og_locale":"en_US","og_type":"article","og_title":"Bash for Loop: Syntax and Examples for Server Admins - Ucartz Blog","og_description":"How the Bash for loop works: lists, ranges, C-style counters, files, arrays and break\/continue, with tested examples and the mistakes to avoid.","og_url":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/","og_site_name":"Ucartz Blog","article_publisher":"https:\/\/www.facebook.com\/UcartzOnline","article_published_time":"2026-10-01T18:15:01+00:00","article_modified_time":"2026-10-01T18:15:11+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop.jpg","type":"image\/jpeg"}],"author":"Ithal P R","twitter_card":"summary_large_image","twitter_creator":"@ucartz","twitter_site":"@ucartz","twitter_misc":{"Written by":"Ithal P R","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/#article","isPartOf":{"@id":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/"},"author":{"name":"Ithal P R","@id":"https:\/\/www.ucartz.com\/blog\/#\/schema\/person\/5dd81ab7f25e4f1b46b3ab7519cd0f77"},"headline":"Bash for Loop: Syntax and Examples for Server Admins","datePublished":"2026-10-01T18:15:01+00:00","dateModified":"2026-10-01T18:15:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/"},"wordCount":748,"commentCount":0,"publisher":{"@id":"https:\/\/www.ucartz.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop.jpg","keywords":["bash","bash scripting","for loop","Linux","loops","shell scripting"],"articleSection":["Linux Tutorials","Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.ucartz.com\/blog\/bash-for-loop\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/","url":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/","name":"Bash for Loop: Syntax and Examples for Server Admins - Ucartz Blog","isPartOf":{"@id":"https:\/\/www.ucartz.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/#primaryimage"},"image":{"@id":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop.jpg","datePublished":"2026-10-01T18:15:01+00:00","dateModified":"2026-10-01T18:15:11+00:00","description":"How the Bash for loop works: lists, ranges, C-style counters, files, arrays and break\/continue, with tested examples and the mistakes to avoid.","breadcrumb":{"@id":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.ucartz.com\/blog\/bash-for-loop\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/#primaryimage","url":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop.jpg","contentUrl":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/10\/bash-for-loop.jpg","width":1200,"height":630,"caption":"Bash for Loop: Syntax and Examples for Server Admins"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ucartz.com\/blog\/bash-for-loop\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.ucartz.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Bash for Loop: Syntax and Examples for Server Admins"}]},{"@type":"WebSite","@id":"https:\/\/www.ucartz.com\/blog\/#website","url":"https:\/\/www.ucartz.com\/blog\/","name":"Ucartz Blog","description":"Guides on hosting, servers, streaming and automation","publisher":{"@id":"https:\/\/www.ucartz.com\/blog\/#organization"},"alternateName":"Ucartz","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.ucartz.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.ucartz.com\/blog\/#organization","name":"Ucartz Online Pvt Ltd","alternateName":"Ucartz","url":"https:\/\/www.ucartz.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.ucartz.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/ucartz-logo-888x240-1.png","contentUrl":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/ucartz-logo-888x240-1.png","width":888,"height":240,"caption":"Ucartz Online Pvt Ltd"},"image":{"@id":"https:\/\/www.ucartz.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/UcartzOnline","https:\/\/x.com\/ucartz","https:\/\/www.linkedin.com\/company\/ucartzonline","https:\/\/www.instagram.com\/ucartz_com","https:\/\/www.trustpilot.com\/review\/ucartz.com","https:\/\/n8n.io\/creators\/ucartz\/"]},{"@type":"Person","@id":"https:\/\/www.ucartz.com\/blog\/#\/schema\/person\/5dd81ab7f25e4f1b46b3ab7519cd0f77","name":"Ithal P R","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f5a33c9e7f5df42637baf72daddd91b43a7a9d4d054cce0ba7920726f35cc91e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f5a33c9e7f5df42637baf72daddd91b43a7a9d4d054cce0ba7920726f35cc91e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f5a33c9e7f5df42637baf72daddd91b43a7a9d4d054cce0ba7920726f35cc91e?s=96&d=mm&r=g","caption":"Ithal P R"},"description":"Hi, I'm Ithal! I write tech and hosting blogs at Ucartz.com, where I share insights, tips, and the latest updates from the world of web hosting and technology. Whether it's about server setups, control panels, or tools to power your online presence, I break things down in a way that's easy to understand, even if you're just starting out.","url":"https:\/\/www.ucartz.com\/blog\/author\/ithal\/"}]}},"_links":{"self":[{"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/posts\/3508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/comments?post=3508"}],"version-history":[{"count":1,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/posts\/3508\/revisions"}],"predecessor-version":[{"id":3511,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/posts\/3508\/revisions\/3511"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/media\/3509"}],"wp:attachment":[{"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/media?parent=3508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/categories?post=3508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/tags?post=3508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}