باش

  • إضافة ثوانٍ للوقت في سكريبت باش

    باستخدام سكريبت باش في نظام لينكس، يمكنك إضافة عدد من الثواني إلى الوقت القديم الذي تحتويه المتغيرات. في سياق المثال الذي ذكرته، حيث لديك متغير tt يحتوي على الوقت القديم “Thu 09/22/2016 11:03:55 AM”، وتريد إضافة عدد معين من الثواني، يمكنك استخدام أدوات لينكس المدمجة لتنفيذ ذلك.

    فيما يلي سكريبت يمكنك استخدامه لإضافة عدد معين من الثواني إلى الوقت:

    bash
    #!/bin/bash # الوقت القديم tt="Thu 09/22/2016 11:03:55 AM" # عدد الثواني التي تريد إضافتها seconds_to_add=7 # تحويل الوقت إلى ثواني منذ بداية التسعينات old_time=$(date -d "$tt" +%s) # إضافة الثواني المطلوبة new_time=$((old_time + seconds_to_add)) # تحويل الوقت الجديد من ثواني إلى تنسيق الوقت القياسي formatted_new_time=$(date -d "@$new_time" "+%a %m/%d/%Y %I:%M:%S %p") # طباعة الوقت الجديد مع الثواني المضافة echo "الوقت الجديد: $formatted_new_time + $seconds_to_add ثانية"

    هذا السكريبت يحوّل الوقت القديم إلى عدد من الثواني منذ بداية التسعينات (Epoch time) باستخدام أداة date في لينكس، ثم يضيف عدد الثواني التي تريد إضافتها. بعد ذلك، يقوم بتحويل الوقت الجديد إلى تنسيق الوقت القياسي مرة أخرى باستخدام date، ويطبع الوقت الجديد مع الثواني المضافة.

    يمكنك تشغيل هذا السكريبت في نافذة الطرفية في لينكس، وسيظهر لك الوقت الجديد بعد إضافة الثواني المطلوبة.

    المزيد من المعلومات

    باستخدام سكريبت باش في نظام لينكس، يمكنك إضافة عدد من الثواني إلى الوقت القديم الذي تحتويه المتغيرات. في سياق المثال الذي ذكرته، حيث لديك متغير tt يحتوي على الوقت القديم “Thu 09/22/2016 11:03:55 AM”، وتريد إضافة عدد معين من الثواني، يمكنك استخدام أدوات لينكس المدمجة لتنفيذ ذلك.

    فيما يلي سكريبت يمكنك استخدامه لإضافة عدد معين من الثواني إلى الوقت:

    bash
    #!/bin/bash # الوقت القديم tt="Thu 09/22/2016 11:03:55 AM" # عدد الثواني التي تريد إضافتها seconds_to_add=7 # تحويل الوقت إلى ثواني منذ بداية التسعينات old_time=$(date -d "$tt" +%s) # إضافة الثواني المطلوبة new_time=$((old_time + seconds_to_add)) # تحويل الوقت الجديد من ثواني إلى تنسيق الوقت القياسي formatted_new_time=$(date -d "@$new_time" "+%a %m/%d/%Y %I:%M:%S %p") # طباعة الوقت الجديد مع الثواني المضافة echo "الوقت الجديد: $formatted_new_time + $seconds_to_add ثانية"

    هذا السكريبت يحوّل الوقت القديم إلى عدد من الثواني منذ بداية التسعينات (Epoch time) باستخدام أداة date في لينكس، ثم يضيف عدد الثواني التي تريد إضافتها. بعد ذلك، يقوم بتحويل الوقت الجديد إلى تنسيق الوقت القياسي مرة أخرى باستخدام date، ويطبع الوقت الجديد مع الثواني المضافة.

    يمكنك تشغيل هذا السكريبت في نافذة الطرفية في لينكس، وسيظهر لك الوقت الجديد بعد إضافة الثواني المطلوبة. تذكر أنه يمكنك تعديل قيمة متغير seconds_to_add لتلبية احتياجاتك، سواء كانت زيادة أو نقصان في الوقت.

  • كيف يعمل الباقي في باش؟

    في لغة البرمجة باش (Bash)، تعتمد عملية الباقي أو القسمة العددية على العملية الرياضية لتقسيم عدد على عدد آخر واستخراج الباقي المتبقي من القسمة. على سبيل المثال، عند كتابة التعبير:

    bash
    expr 5 % 3

    سيتم تقسيم الرقم 5 على الرقم 3، وسيتم استخراج الباقي الناتج عن هذه العملية. في هذه الحالة، القسمة ستعطي ناتجاً يساوي 1 مع باقي يساوي 2. فعند قسم 5 على 3، يمكن أن نقول أن الناتج يساوي 1 بقية 2.

    بالنسبة للتعبير:

    bash
    expr 5 % 4

    سيتم تقسيم الرقم 5 على الرقم 4، وسيتم استخراج الباقي الناتج عن هذه العملية. في هذه الحالة، القسمة ستعطي ناتجاً يساوي 1 مع باقي يساوي 1. فعند قسم 5 على 4، يمكن أن نقول أن الناتج يساوي 1 بقية 1.

    يتم تطبيق هذه العملية باستخدام عامل النسبة في البرمجة، والذي يُمثل برمز النسبة (٪). وهذه العملية مهمة في البرمجة لأنها تسمح بالتحقق من الأعداد الفردية أو الزوجية، أو حساب تواليات الأرقام، والكثير من الاستخدامات الأخرى في البرمجة والحسابات الرياضية.

    المزيد من المعلومات

    عند النظر إلى كيفية عمل الباقي في لغة البرمجة باش، يمكننا التفكير فيه على أنه الباقي الناتج عن قسمة عدد على عدد آخر.

    لنلقي نظرة أعمق على كيفية عمل هذه العملية في باش:

    1. القسمة العددية (Division): في البداية، يتم تقسيم العدد الأول على العدد الثاني.

    2. الباقي (Remainder): بمجرد القيام بالقسمة، يتم استخراج الباقي المتبقي من العملية. هذا الباقي يكون العدد الذي لا يمكن قسمه بالكامل على العدد الثاني. فمثلاً، إذا قمت بقسم 5 على 3، فالناتج سيكون 1 والباقي سيكون 2، لأنه بعد قسم 5 على 3، لا يمكن أن تقسم 3 بالكامل على 5، فالباقي هو 2.

    3. الاستخدامات في البرمجة: يعتبر الباقي أداة مهمة في البرمجة، حيث يتم استخدامه في العديد من السيناريوهات. على سبيل المثال، يمكن استخدامه للتحقق مما إذا كان عدد معين فرديًا أو زوجيًا، أو للتحقق مما إذا كانت تواليات الأرقام متسلسلة، أو حتى في عمليات اللفات والتكرار في البرمجة.

    4. التعبيرات في باش: يمكن استخدام العملية في باش باستخدام التعبيرات الرياضية. في المثال الذي أعطيته، “expr 5 % 3” تعني تقسيم 5 على 3 واستخراج الباقي، بينما “expr 5 % 4” تعني تقسيم 5 على 4 واستخراج الباقي.

    باختصار، فإن فهم كيفية عمل الباقي في لغة البرمجة باش يمكن أن يساعد في فهم كيفية استخدام هذه العملية في البرمجة والحسابات الرياضية بشكل عام.

  • كشف بيئة Ubuntu on Windows باستخدام سكريبت الباش

    الكثير يعتمد على الاختلافات الدقيقة بين بيئتي التشغيل، وهناك طرق متعددة يمكن استخدامها لكشف إذا كان السكربت يعمل في “Ubuntu on Windows” أم Ubuntu الأصلي. يمكن أن يتضمن هذا الكشف فحص البيئة والملفات الموجودة والمسارات المخصصة وغيرها. هنا بعض الطرق التي يمكن استخدامها:

    1. فحص البيئة:
      يمكنك فحص المتغيرات البيئية للنظام باستخدام سكريبت الباش. في بعض الأحيان، قد توجد اختلافات في المتغيرات البيئية بين البيئتين. على سبيل المثال، قد يكون هناك متغير يحتوي على معلومات حول الإصدار أو النوعية الدقيقة للنظام.

    2. فحص المسارات:
      يمكن أن تختلف المسارات بين البيئتين. مثلاً، يمكن أن يحتوي Ubuntu على مسارات معينة للملفات النظامية تختلف عن تلك الموجودة في “Ubuntu on Windows”. يمكنك استخدام الأمر which للتحقق من وجود تطبيقات معينة.

    3. فحص الملفات النظامية:
      يمكن أيضًا فحص وجود ملفات نظامية معينة تختلف بين البيئتين. على سبيل المثال، يمكن أن تحتوي Ubuntu على ملفات مختلفة في مسارات معينة مقارنة بـ “Ubuntu on Windows”.

    4. التحقق من متغيرات النظام:
      يمكن أيضا التحقق من متغيرات النظام مباشرة باستخدام الأوامر مثل lsb_release -a للتحقق من معلومات نظام التشغيل.

    5. فحص ملفات التكوين:
      يمكن أن تختلف ملفات التكوين بين البيئتين. يمكنك فحص وجود ملفات تكوين معينة تختلف بين البيئتين.

    مع كل هذه الطرق، يمكنك إعداد سكريبت يقوم بفحص هذه الاختلافات وفقًا لاحتياجاتك الخاصة. بمجرد أن تحدد الاختلافات المناسبة بين البيئتين، يمكنك بناء مراجع للكشف عن الفروق وتحديد البيئة التي يعمل فيها السكريبت.

    المزيد من المعلومات

    بالطبع، إليك المزيد من المعلومات والأفكار التي يمكن أن تساعدك في تحديد إذا كان السكريبت يعمل في “Ubuntu on Windows” أم Ubuntu الأصلي:

    1. فحص إصدار النظام:
      يمكنك استخدام الأمر uname -a لعرض معلومات حول إصدار النواة والنظام. قد تختلف تلك المعلومات بين “Ubuntu on Windows” و Ubuntu الأصلي.

    2. التحقق من الخدمات المشغلة:
      يمكن أن تختلف الخدمات المشغلة بين البيئتين. يمكنك استخدام أوامر مثل service --status-all للتحقق من الخدمات المشغلة ومقارنتها بين البيئتين.

    3. فحص معلومات الملفات:
      يمكن أن يكون للملفات المختلفة معلومات ميتاداتا مختلفة. يمكنك استخدام أوامر مثل stat للحصول على معلومات حول ملفات معينة ومقارنتها بين البيئتين.

    4. اختبار المميزات الفريدة لـ “Ubuntu on Windows”:
      قد تكون هناك ميزات فريدة لـ “Ubuntu on Windows” تميزها عن Ubuntu الأصلي، مثل دعم نظام الملفات NTFS بشكل أفضل أو دعم تطبيقات Windows المحددة. يمكنك اختبار هذه الميزات بشكل خاص لتحديد البيئة.

    5. فحص معلومات المعالج:
      قد تختلف معلومات المعالج بين البيئتين. يمكنك استخدام أوامر مثل lscpu للحصول على معلومات حول المعالج ومقارنتها بين البيئتين.

    6. الاختلافات في مسارات التخزين:
      قد تكون هناك اختلافات في مسارات التخزين بين البيئتين. يمكنك استخدام أوامر مثل df -h لعرض مساحة التخزين المتاحة ومقارنتها بين البيئتين.

    7. فحص معلومات الذاكرة:
      يمكن أن تختلف معلومات الذاكرة بين البيئتين. يمكنك استخدام أوامر مثل free -h لعرض معلومات الذاكرة ومقارنتها بين البيئتين.

    باستخدام هذه الأفكار والأوامر، يمكنك تطوير سكريبت يقوم بتحليل الاختلافات بين “Ubuntu on Windows” و Ubuntu الأصلي، وبالتالي تحديد البيئة التي يعمل فيها السكريبت بنجاح.

  • استخراج تاريخ ملف بلغة الباش

    لحل هذه المشكلة في البرمجة بلغة الباش (Bash script)، يمكنك استخدام أدوات السلسلة النصية المدمجة في Bash لتحليل اسم الملف واستخراج الجزء المطلوب. يمكن القيام بذلك باستخدام الأمر cut أو awk أو حتى bash نفسه.

    لنقم بكتابة نص البرنامج في سكريبت باش:

    bash
    #!/bin/bash # تعريف اسم الملف filename="Master.csv.2016-07-06.txt" # استخراج الجزء المهم من اسم الملف substring=$(echo "$filename" | cut -d'.' -f3) # استخراج الجزء المطلوب YY-MM result=$(echo "$substring" | cut -d'-' -f1,2) # طباعة النتيجة echo "$result"

    يتم استخدام الأمر cut لفصل النص بناءً على النقاط (.) واستخراج الجزء الثالث، الذي يحتوي على التاريخ، ثم يتم استخدام cut مرة أخرى لفصل التاريخ باستخدام الشرطة (-) كفاصل واستخراج الجزء المطلوب.

    هذا السكريبت يمكن تشغيله باستخدام أمر bash في الطرفية، وسيعطيك النتيجة المطلوبة “YY-MM”.

    يمكنك استخدام هذا السكريبت في بيئة Bash الخاصة بك، ويمكنك أيضًا تعديله ليأخذ اسم الملف كمتغير إذا كنت ترغب في استخدامه لملفات أخرى.

    المزيد من المعلومات

    بالطبع، هناك المزيد من المعلومات يمكن إضافتها لتوضيح العملية وتحسين السكريبت. دعني أقدم لك بعض النقاط التي يمكن إضافتها:

    1. التعامل مع متغير الملفات: يمكنك جعل السكريبت أكثر قابلية للاستخدام عن طريق جعل اسم الملف متغيرًا قابلًا للتغيير. يمكنك فعل ذلك عن طريق قبول مدخل المستخدم كمعامل أو استخدام متغير تعريفه مسبقًا.

    2. التحقق من وجود الملف: يمكن إضافة خطوة للتحقق مما إذا كان الملف المطلوب موجودًا أم لا قبل محاولة استخراج البيانات منه.

    3. التحقق من صيغة اسم الملف: يمكن إضافة تحقق إضافي للتأكد من أن اسم الملف يتبع الصيغة المتوقعة، مثل التأكد من وجود النقاط (.) والشرطات (-) في الأماكن المتوقعة.

    4. التعامل مع أخطاء التنفيذ: يمكن إضافة مزيد من الكود للتعامل مع الأخطاء المحتملة أثناء تنفيذ السكريبت، مثل عدم وجود الملف المطلوب أو عدم تطابق صيغة اسم الملف المتوقعة.

    5. إخراج النتيجة بشكل مرتب وواضح: يمكن تنسيق إخراج النتيجة بشكل أفضل، مثل طباعة “YY-MM” بدون أي نص إضافي.

    6. توثيق السكريبت: يمكنك إضافة توثيق داخل السكريبت يشرح كيفية استخدامه وما يفعله بالتفصيل، مما يجعله أكثر فهمًا للمستخدمين الآخرين أو حتى لنفسك في المستقبل.

    تلك النقاط تساعد في جعل السكريبت أكثر قوة ومرونة وسهولة في الاستخدام وصيانته على المدى الطويل.

  • كيفية التحقق من قيمة متغير في سكربت الباش

    عند استخدام الشرط (( "$continue" == "yes" )) في سكربت الباش، تحاول تقييم متغير $continue كعبارة رياضية، وليس كسلسلة نصية. لذلك، حتى لو كتبت الجواب بالصيغة الصحيحة “yes”، فإنه سيعتبر الشرط خطأ، مما يؤدي إلى تنفيذ الفرع الأخير من الشرطية (else) دائمًا.

    لحل هذه المشكلة، يمكنك استخدام العملية المقارنة == داخل سلسلة نصية عادية، كما يلي:

    bash
    #!/bin/bash echo "You are about to deploy the site from STAGING to PRODUCTION, Are you sure? yes/no "; read continue if [ "$continue" == "yes" ] ; then echo "Yes" else echo "No" fi

    بهذه الطريقة، يتم مقارنة قيمة المتغير $continue كسلسلة نصية مع القيمة “yes”، وسيتم تنفيذ الفرع الصحيح من الشرطية بشكل صحيح.

    المزيد من المعلومات

    تأكد أولاً من أن ملف السكربت لديك له صلاحية التنفيذ. يمكنك إعطاء الصلاحية باستخدام الأمر التالي:

    bash
    chmod +x script.sh

    ثم، تأكد من أن الإدخال الذي تقوم بإدخاله بعد السؤال هو “yes” أو “no” بالضبط، بدون أي أحرف إضافية أو فراغات. إذا كنت تقوم بإدخال “yes” بالضبط ولا يتم دخول فرع الـ else، فقد يكون هناك مشكلة أخرى.

    يمكنك تشغيل السكربت باستخدام bash -x script.sh لعرض نتائج التنفيذ بالتفصيل، وربما يساعد ذلك في تحديد المشكلة.

  • سكريبت باش لاستبدال علامات التنصيص في ملفات الوسوم

    في سياق تطوير البرمجيات وإدارة الملفات، يمكن أن يكون إنشاء سكريبت باش (Bash) لتحقيق مثل هذه المهمة تحدًا مثيرًا ومفيدًا. يهدف هذا السكريبت إلى استبدال علامات التنصيص الفردية بعلامات التنصيص المزدوجة في ملفات الوسوم لديك. للقيام بذلك، يمكنك استخدام أداة البحث والاستبدال المتوفرة في باش. السيناريو التالي يقدم سكريبت باش لهذه الغاية:

    bash
    #!/bin/bash # تعيين المسار إلى مجلد ملفات الوسوم directory_path="/path/to/your/label/files" # الانتقال إلى المجلد cd "$directory_path" || exit # البداية في عملية البحث والاستبدال for file in *.label; do # التحقق مما إذا كان الملف موجودًا if [ -e "$file" ]; then # استخدام sed للبحث واستبدال العلامات sed -i "s/' \([^']*[^ ]\)'/\1/g" "$file" echo "تم استبدال العلامات في الملف: $file" else echo "الملف غير موجود: $file" fi done echo "انتهت عملية استبدال العلامات بنجاح."

    يرجى تحديد المسار الصحيح لمجلد ملفات الوسوم في المتغير directory_path. يقوم السكريبت بالانتقال إلى المجلد المحدد ويستخدم حلقة تكرار لتنفيذ أمر البحث والاستبدال باستخدام أداة sed. يتم استدعاء sed بشكل مباشر من داخل السكريبت لتحقيق البحث والاستبدال في الملفات.

    من الجدير بالذكر أنه يفضل تجربة السكريبت على نسخة احتياطية من ملفات الوسوم لتجنب فقدان البيانات في حال حدوث أي خطأ غير متوقع.

    المزيد من المعلومات

    تفضل، لنوسّع على السياق الذي قد يكون مفيدًا لك في فهم كيفية عمل السكريبت وكيف يمكن تخصيصه وتحسينه:

    1. بيئة التشغيل:

      • يعتمد السكريبت على بيئة تشغيل باش، لذا يجب التأكد من أن باش مثبتة على النظام.
      • يمكن تحقيق ذلك عبر التحقق من وجود باش بالأمر bash --version.
    2. التخصيص:

      • يمكن تخصيص المتغير directory_path ليحدد المسار الذي تريد فيه البحث عن ملفات الوسوم.
      • يمكنك أيضًا تعديل امتداد الملفات (*.label) إذا كانت ملفات الوسوم لديك تحمل امتدادًا مختلفًا.
    3. التحقق من وجود الملف:

      • يقوم السكريبت بالتحقق مما إذا كان الملف موجودًا قبل القيام بعملية البحث والاستبدال.
      • إذا كان الملف غير موجود، سيظهر رسالة تنبيه.
    4. نسخ احتياطي:

      • يوصى بإجراء نسخ احتياطية لملفات الوسوم قبل تشغيل السكريبت لتجنب فقدان البيانات في حال حدوث خطأ غير متوقع.
    5. توسيع السكريبت:

      • يمكنك توسيع السكريبت ليقوم بمهام إضافية حسب احتياجاتك، مثل تحديد ملفات الوسوم باستخدام أنماط معينة أو تحسين تقارير الإخراج.
    6. توثيق:

      • يمكن إضافة توثيق إضافي في السكريبت لشرح الوظائف وكيفية استخدامه.

    باستخدام هذه المعلومات، يمكنك تكييف وتحسين السكريبت حسب احتياجاتك الخاصة وضمان فعاليته في سياق عملك.

  • سكريبت باش لطباعة تسلسل من الأرقام الفردية والزوجية بشكل تكراري

    في برمجة لغة باش (Bash)، يمكنك تحقيق هذا الهدف باستخدام حلقات التكرار والتحكم في التدفق. سنقوم بإنشاء سكريبت باش يقوم بطباعة 10 أرقام فردية، ثم 10 أرقام زوجية، ويكرر هذا النمط. إليك مثال على كيفية تحقيق ذلك:

    bash
    #!/bin/bash # تعريف المتغيرات odd_count=1 even_count=2 iterations=10 # حلقة رئيسية لتكرار العملية for ((i = 1; i <= iterations; i++)); do # طباعة 10 أرقام فردية for ((j = 1; j <= iterations; j++)); do echo $odd_count ((odd_count += 2)) done # إعادة تهيئة العداد odd_count=1 # طباعة 10 أرقام زوجية for ((k = 1; k <= iterations; k++)); do echo $even_count ((even_count += 2)) done # إعادة تهيئة العداد even_count=2 done

    هذا السكريبت يستخدم حلقتين رئييستين، الأولى لطباعة الأرقام الفردية، والثانية لطباعة الأرقام الزوجية. يتم تكرار هذه العملية عدة مرات وفقًا للقيمة المحددة في المتغير iterations.

    قم بحفظ هذا السكريبت في ملف باسم مثلاً print_numbers.sh، ثم قم بإعطاء التصريح لتنفيذه باستخدام الأمر:

    bash
    chmod +x print_numbers.sh

    ثم يمكنك تشغيله باستخدام:

    bash
    ./print_numbers.sh

    ستلاحظ الناتج الذي يطابق النمط الذي وضعته في السؤال، مع فصل بين الأرقام الفردية والزوجية.

    المزيد من المعلومات

    في هذا السياق، يجدر بنا أن نتعمق أكثر في كيفية فهم وتحليل السكريبت. يعتمد السكريبت على استخدام لغة البرمجة باش (Bash)، والتي تُستخدم عادة في نظم التشغيل Linux وUnix.

    السكريبت يستخدم حلقتين داخل بعضهما البعض لتحقيق التسلسل المطلوب في طباعة الأرقام الفردية والزوجية. يتم تكرار هذه العملية باستخدام حلقة رئيسية مضمنة.

    لفهم السكريبت بشكل أفضل، إليك شرح تفصيلي:

    1. تعريف المتغيرات:

      • odd_count: يُستخدم لتتبع الأرقام الفردية.
      • even_count: يُستخدم لتتبع الأرقام الزوجية.
      • iterations: يحدد عدد المرات التي يتم فيها تكرار العملية.
    2. الحلقة الرئيسية:

      • تبدأ بـ for ((i = 1; i <= iterations; i++))، حيث يتم تكرار العملية مرة بعد أخرى وفقًا للقيمة المحددة في iterations.
    3. حلقة الأرقام الفردية:

      • for ((j = 1; j <= iterations; j++)): تُستخدم لطباعة 10 أرقام فردية بزيادة 2 في كل تكرار.
      • echo $odd_count: يقوم بطباعة قيمة odd_count الحالية.
    4. إعادة تهيئة العداد:

      • odd_count=1: يُعيد تهيئة العداد ليبدأ من جديد في الدورة التالية.
    5. حلقة الأرقام الزوجية:

      • for ((k = 1; k <= iterations; k++)): تُستخدم لطباعة 10 أرقام زوجية بزيادة 2 في كل تكرار.
      • echo $even_count: يقوم بطباعة قيمة even_count الحالية.
    6. إعادة تهيئة العداد:

      • even_count=2: يُعيد تهيئة العداد ليبدأ من جديد في الدورة التالية.
    7. تشغيل السكريبت:

      • يتم تشغيل السكريبت باستخدام الأمر ./print_numbers.sh بعد إعطائه التصريح للتنفيذ.

    باستخدام هذا النهج، يتم إنشاء نمط من الأرقام الفردية والزوجية وفقًا للمتطلبات المحددة في السؤال. يمكنك تخصيص عدد التكرارات عن طريق تعديل قيمة iterations في السكريبت.

  • سكريبت باش لبحث وتصفية ملفات معينة في مجلد

    في محاولة لكتابة سكريبت باش يقوم بالبحث في مجلد معين عن ملفات بامتدادات محددة، يجب أولاً علينا فهم بنية السكريبت وخطوات تنفيذه. يبدأ السكريبت بفحص جميع الملفات في المجلد المحدد، ثم يتحقق مما إذا كانت الملفات تحمل إمتدادات .txt و .csv فقط.

    لتحقيق ذلك، يمكنك استخدام لوب (حلقة) لتحليل كل ملف في المجلد. يجب أيضاً تتبع الإمتدادات المسموح بها والتحقق مما إذا كان هناك إمتدادات أخرى غير المسموح بها. في حال وجود إمتدادات غير مسموح بها، يتم نقل المجلد إلى “حاوية الانتظار” ويتم كتابة سجل في ملف يحتوي على التفاصيل اللازمة.

    إليك نسخة مبسطة من السكريبت:

    bash
    #!/bin/bash # المجلد المستهدف target_folder="/path/to/target/folder" # المجلد الذي يتم نقله في حالة وجود إمتدادات غير مسموح بها holding_bucket="/path/to/holding/bucket" # ملف السجل log_file="/path/to/log/file.log" # قائمة الإمتدادات المسموح بها allowed_extensions=("txt" "csv") # التأكد من عدم وجود مجلد فرعي if [ "$(ls -A $target_folder)" ]; then echo "Error: Subfolders are not allowed." exit 1 fi # تحقق من وجود ملفات بإمتدادات غير مسموح بها for file in "$target_folder"/*; do extension="${file##*.}" if [[ ! " ${allowed_extensions[@]} " =~ " $extension " ]]; then echo "Error: Folder contains invalid extension $extension." mv "$target_folder" "$holding_bucket" echo "$(date) - Folder $target_folder moved to $holding_bucket" >> "$log_file" exit 1 fi done # في حالة وجود فقط إمتدادات مسموح بها echo "Success: Folder $target_folder meets the criteria."

    يرجى تخصيص المسارات المناسبة للمجلد المستهدف، والمجلد الذي يتم نقله في حالة الفشل، وملف السجل. يمكنك أيضاً توسيع قائمة الإمتدادات المسموح بها حسب احتياجاتك.

    المزيد من المعلومات

    بالطبع، سنوسع على الفكرة ونقدم مزيد من المعلومات حول السكريبت. الهدف الأساسي هو تحقيق فحص دقيق للمجلد المستهدف، مع التأكد من أن الملفات داخله تحمل إمتدادات معينة وتلبي الشروط المطلوبة.

    1. تخصيص المسارات:

      • يجب عليك تعيين المسار الكامل للمجلد المستهدف target_folder والذي سيتم البحث فيه عن الملفات.
      • كذلك، قم بتعيين المسار الكامل لمجلد الانتظار holding_bucket الذي سيتم نقل المجلد إليه في حالة وجود إمتدادات غير صالحة.
      • يُفضل أيضاً تحديد المسار الكامل لملف السجل log_file الذي سيحتوي على سجل الأحداث.
    2. قائمة الإمتدادات المسموح بها:

      • يمكنك توسيع قائمة allowed_extensions بإضافة المزيد من الإمتدادات المسموح بها، مثلاً: ("txt" "csv" "xlsx" "json").
    3. التحقق من عدم وجود مجلد فرعي:

      • تم إضافة فحص يتأكد من عدم وجود مجلد فرعي داخل المجلد المستهدف. يستخدم الأمر ls -A لفحص ما إذا كان المجلد غير فارغ.
    4. التحقق من الإمتدادات:

      • يتم استخدام لوب (حلقة) لتحليل كل ملف في المجلد وفحص الإمتدادات.
      • يُستخدم الشرط [[ ! " ${allowed_extensions[@]} " =~ " $extension " ]] للتحقق من أن الإمتداد ليس ضمن الإمتدادات المسموح بها.
    5. السجل:

      • تم إضافة كود لتسجيل الأحداث في ملف السجل log_file في حالة نقل المجلد إلى مجلد الانتظار.
    6. الإخراج:

      • تم إضافة إخراج بسيط يشير إلى نجاح أو فشل العملية ويظهر في حالة تحقيق الشروط.

    تذكير: يرجى استخدام الأوامر والمسارات الصحيحة وتخصيص السكريبت حسب احتياجاتك وبيئتك.

  • سكريبت باش لتحديث ومراقبة صفحات الويب

    بعد تحليل الطلب، يتضح أنك بحاجة إلى سكريبت باش لتحديث صفحات الويب وفحص ما إذا كانت هناك تغييرات منذ آخر تحديث. لتحقيق ذلك، يمكنك استخدام أدوات مثل wget لاسترجاع صفحة الويب ومقارنتها مع الإصدار السابق باستخدام diff. اليك سكريبت باش يقوم بتحقيق ذلك:

    bash
    #!/bin/bash # تحديد عنوان الصفحة وملف لتخزين النسخة السابقة url="عنوان_الصفحة" previous_version_file="الملف_السابق.html" # استرجاع صفحة الويب الحالية wget -O current_version.html $url # فحص التغييرات باستخدام diff changes=$(diff $previous_version_file current_version.html) # التحقق من وجود تغييرات if [ -n "$changes" ]; then echo "تم العثور على تغييرات على الصفحة!" # قم بتنفيذ الإجراءات الإضافية هنا (على سبيل المثال، إرسال إشعار أو تحديث ملفات إضافية) else echo "لا تغييرات على الصفحة." fi # حفظ النسخة الحالية للاستخدام في المرة القادمة cp current_version.html $previous_version_file # حذف الملف المؤقت rm current_version.html

    يمكنك تعديل السكريبت وفقًا لاحتياجاتك، مثل تحديد عنوان الصفحة واسم الملف المؤقت وتحديد الإجراءات الإضافية التي ترغب في تنفيذها عند اكتشاف تغييرات. يمكنك أيضًا إضافة سجلات تسجيل لتسجيل تاريخ ووقت كل تحديث.

    المزيد من المعلومات

    لتوفير فهم أعمق حول كيفية عمل السكريبت وكيف يمكن تحسينه، يمكننا النظر في تفاصيل إضافية.

    أولاً وقبل كل شيء، يتم استخدام wget في هذا السياق لاسترجاع صفحة الويب. هذه الأداة تسمح بجلب محتوى الصفحة وحفظه في ملف محلي. في هذا السياق، نقوم بتخزين النسخة الحالية للصفحة في ملف مؤقت يسمى current_version.html.

    ثم، نستخدم أداة diff لمقارنة الملف السابق (previous_version.html) بالنسخة الحالية (current_version.html). إذا كانت هناك أي تغييرات، يتم تخزينها في المتغير changes.

    بعد ذلك، يتم التحقق مما إذا كان هناك تغييرات (if [ -n "$changes" ]). إذا تم العثور على تغييرات، يتم إخطار المستخدم برسالة تظهر أنه تم العثور على تغييرات على الصفحة، ويمكنك تخصيص إجراءات إضافية لتنفيذها في هذا السياق.

    أما إذا لم يكن هناك تغييرات، سيظهر رسالة تشير إلى أنه لا توجد تغييرات على الصفحة.

    في النهاية، يتم نسخ الملف current_version.html إلى previous_version.html ليتم استخدامه كنسخة سابقة في المرة القادمة. وأخيرًا، يتم حذف الملف المؤقت current_version.html.

    يمكن تحسين السكريبت بمزيد من الميزات، مثل إضافة إشعارات آلية عبر البريد الإلكتروني أو الرسائل النصية عند اكتشاف تغييرات، وتحسين الطريقة التي يتم بها تخزين النسخ السابقة لتتناسب مع احتياجاتك.

  • إدارة تصدير المتغيرات في باش: أساليب وتقنيات

    في بيئة تطوير البرمجة باش (Bash)، هل يمكن تصدير متغير ثم إلغاء تصديره دون حذفه بشكل كامل؟ هل هناك طريقة للاحتفاظ بإمكانية الوصول إلى هذا المتغير في القشرة الحالية دون أن يكون متاحًا للعمليات الفرعية؟ هذا هو السؤال الذي يطرحه العديد من مطوري البرمجيات، والإجابة تعتمد على بعض الأفكار والتقنيات في عالم باش.

    في الواقع، يمكن دائماً تصدير متغير في باش باستخدام الأمر export. ولكن هل يمكن إلغاء تصديره ليظل متاحًا في القشرة الحالية دون أن يتمكن العمليات الفرعية من الوصول إليه؟ هذا ما يثير فضول الكثيرين، خاصةً مع الوعد بالحفاظ على الكود بشكل أنيق.

    يمكن دائماً تحقيق هذا الهدف، ولكن الأسلوب المستخدم قد يبدو غير جمالي، كما هو موضح في الشيفرة أدناه:

    bash
    export FOO # ... _FOO=$FOO unset FOO FOO=$_FOO

    في هذا المثال، يتم حفظ قيمة المتغير في متغير مؤقت _FOO، ثم يتم حذف المتغير الأصلي باستخدام unset، وأخيراً يتم استعادة القيمة من المتغير المؤقت إلى المتغير الأصلي. هذا النهج يحقق الهدف المطلوب، ولكنه يظهر بشكل غير جمالي وربما يثير استغراب المطورين.

    هناك أفكار أخرى يمكن أن تكون ذات فائدة. يمكن استخدام تقنية الدوال (functions) لإنشاء نطاق محلي للمتغير، مما يقيّد إمكانية الوصول إليه في النطاقات الفرعية. وبهذا يمكن تحقيق هدف عدم إتاحة المتغير للعمليات الفرعية بشكل أكثر أناقة.

    هذا يظهر كمثال:

    bash
    export_variable() { local FOO="value" # يمكن الوصول إلى FOO هنا export FOO } export_variable # لا يمكن الوصول إلى FOO هنا

    في هذا المثال، يتم تصدير المتغير FOO داخل الدالة export_variable، ولكن بما أن الدالة تحتوي على متغير محلي FOO، فإنه لا يمكن الوصول إليه في النطاق الخارجي للدالة.

    إذا كنت تبحث عن أسلوب يتناسب مع معايير الأناقة والفعالية في كتابة السيناريوهات في باش، فيمكن أن تكون هذه الطرق هي الخيارات المثلى لتحقيق هدفك.

    المزيد من المعلومات

    باش (Bash)، كواحدة من القوالب الشهيرة في عالم الشل (Shell)، تقدم العديد من الأدوات والتقنيات التي يمكن استخدامها بشكل فعّال لتحقيق الأهداف المطلوبة في البرمجة النصية وتنظيم البيئة البرمجية. دعنا نعزز الموضوع ببعض المعلومات الإضافية.

    في سياق الحفاظ على قيمة المتغير دون توفيره للعمليات الفرعية، يمكن أيضاً استخدام ميزة باش المعروفة باسم “العمليات الفرعية” (subshells). يمكن تحقيق هذا عبر إنشاء تحقيق نطاق للمتغير باستخدام فرضية فرعية. على سبيل المثال:

    bash
    (export FOO="value"; your_command_here) # يمكن الوصول إلى FOO داخل your_command_here، ولكن لا يتم تصديره على المستوى العلوي

    في هذا المثال، يتم إنشاء فرضية فرعية باستخدام القوسين ( )، ويتم فيها تصدير المتغير FOO قبل تنفيذ الأمر your_command_here. بمجرد انتهاء الفرضية، لا يتم الاحتفاظ بالتغييرات على المتغير في النطاق العلوي للبرنامج.

    كما يُشير السائل إلى رغبته في الحصول على إجابات تستهدف اللغة باش فقط، وهو أمر مفهوم. ومع ذلك، يُشير أيضاً إلى أن الإجابات حول قضايا القلوب البرمجية الأخرى مثل الأوامر المتقدمة في لغات أخرى مثل الشل الزيش (Zsh) أو الأش (Ash) يمكن أن تكون قيمة أيضاً، وقد تسهم في توسيع الفهم حول السياق العام لموضوع النقاش.

    إذا كان لديك أي استفسار إضافي أو تحديد لنقاط معينة، يرجى إبداء ذلك لتلبية احتياجات المعلومات بشكل أكبر.

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر