توسعه دهنده؛ متمرکز بر برنامهنویسی سمت وب و هوش مصنوعی. linktr.ee/mh_sattarian
چای ۵: اسکریپت نویسی Shell، بازهها در حلقه for
به عنوان آدمی که ذرهای علاقه به طراحی و گرافیک داره، هیچوقت مخالف رابطهای گرافیکی (GUI) نبوده و نیستم، اما انجام خیلی از کارها با استفاده از CLI به دلیل قابل برنامهنویسی بودن، به میزان بسیار زیادی راحتتر و سریعتره بهخصوص کارهایی که قاعدهمند و قابل تکرار هستند، مثل استفاده از GIT، ایجاد دایکتوریهای تودرتو، تبدیل فایلها و تحت تاثیر قرار دادن افراد!
در این قسمت از چای، خیلی کوتاه با استفاده از چند مثال، با عملگر بازه (range operator) در اسکریپت نویسی shell آشنا میشیم.
حلقه for
در حالت عادی نوشتن یک حلقه for در shell script بهصورت زیر است:
#!/bin/bash
# Basic for loop
for (( c=1; c<=5; c++ ))
do
echo $c
done
که میتوان آن را در یک خط بهصورت زیر نوشت:
❯ for ((c=1;c<=5;c++)); do echo $c; done
با اجرای این حلقه اعداد ۱ تا ۵ بهصورت زیر چاپ میشوند:
1
2
3
4
5
عملگر بازه (range)
عملگر بازهها نوشتن حلقههای for را سادهتر کرده و حتی این اجازه را میدهند که بدون نوشتن حلقه for، دستورات را تکرار کرده و نوشتن برنامههای تک-خطی (One-liner program) رو بسیار سادهتر میکنه.
فرمت و نحوه استفاده بازهها بهصورت زیر است:
# range operator (pseudo code)
{start..end..step}
به مثالهای زیر توجه کنید:
چاپ اعداد بین ۱ تا ۱۰
# print numbers from 1 to 10
❯ for i in {1..10}; do echo $i; done
1
2
3
4
5
6
7
8
9
10
چاپ اعداد فرد بین ۱ تا ۱۰
# print odd numbers from 1 to 10
❯ for i in {1..10..2}; do echo $i; done
1
3
5
7
9
استفاده از بازهها بدون حلقه for
همانطور که گفته شد، از عملگر بازهها میتوان خارج از حلقه for نیز استفاده کرد؛ اینکار انعطافپذیری زیادی به دستورات میده و اجازه میده بدون نوشتن حلقه for دستورات را تکرار کنیم. به مثال زیر دقت کنین:
چاپ اعداد بین ۱ تا ۱۰۰
❯ echo {1..100}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
ساختن دایرکتوریهایی با حروف الفبا
❯ mkdir {a..z}
تبدیل تصاویر با نامهای ترکیبی حروف و اعداد
❯ convert {a..b}{1..2}.png output%0d.jpg
در این مثال با استفاده از imagemagick تصاویر زیر رو از png به jpg تبدیل میکنیم:
با کنارهم گذاشتن چند بازه (range) میتوان تمام جایگشتهای ترکیب آنها را تولید کرد.
در مثال فوق: a1, a2, b1, b2
برای آشنایی بیشتر و بهتر با اسکریپتنویسی shell این آموزش رو مطالعه کنید.
این پست، قسمت پنجم از چای، مجموعهای در باب «چیزی که امروز یادگرفتم» است. باقی چایها رو میتونید از اینجا مشاهده کنید و در مورد فلسفهی این کار بخونید.
مطلبی دیگر از این انتشارات
طراحی - داستان رنگ: بخش اول - چگونه رنگ مناسب پیدا کنیم؟ و یکم بیشتر
مطلبی دیگر از این انتشارات
چای ۴: خودکارسازی تلگرام، دانلود مدیاهای یک کانال/گروه
مطلبی دیگر از این انتشارات
چای ۶: پنهانکردن عمدی فایلها در لینوکس