عند استخدام الشرط (( "$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”، وسيتم تنفيذ الفرع الصحيح من الشرطية بشكل صحيح.
المزيد من المعلومات
تأكد أولاً من أن ملف السكربت لديك له صلاحية التنفيذ. يمكنك إعطاء الصلاحية باستخدام الأمر التالي:
bashchmod +x script.sh
ثم، تأكد من أن الإدخال الذي تقوم بإدخاله بعد السؤال هو “yes” أو “no” بالضبط، بدون أي أحرف إضافية أو فراغات. إذا كنت تقوم بإدخال “yes” بالضبط ولا يتم دخول فرع الـ else، فقد يكون هناك مشكلة أخرى.
يمكنك تشغيل السكربت باستخدام bash -x script.sh
لعرض نتائج التنفيذ بالتفصيل، وربما يساعد ذلك في تحديد المشكلة.