🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ mohammad dadkhah
مشکل در فیچر آخر
جامعه لینوکس و دواپس ایجاد شده در ۰۸ فروردین ۱۴۰۲

سلام عرض ادب و احترام

مشابه فیلم آموزشی دقیقه 10.46 که می‌خواهد فیچر حذف کارکتر و space را به کد اضافه کند مشکل دارم

این هم کد‌های بنده

#!/bin/bash
while [ -z $VAR1 ]
do
    read -p "please enter var1:" VAR1
    VAR1 =`echo $VAR1 | tr -d [:alpha:] | tr -d [:blank:]`
done
while [ -z $VAR2 ]
do
    read -p "please enter var2:" VAR2
done
VAR3=`expr $VAR1 \\* $VAR2`
if [ $VAR1 -gt $VAR2 ]
then
VAR4=`expr $VAR1 / $VAR2`
else
VAR4=`expr $VAR2 / $VAR1`
fi
echo "Multiply is: $VAR3"
echo "Dividing is: $VAR4"

ارور می‌دهد

please enter var1: 3 er
./bash1.sh: line 6: VAR1: command not found
./bash1.sh: line 3: [: 3: binary operator expected

سلام محمد عزیز

این ارور‌ها نشان می‌دهند که مشکلی در سینتکس کد شما وجود دارد.

مشکل اول در خط ششم و مشکل دوم در خط سوم است.

  1. در خط ششم، علامت مساوی بین VAR1 و echo باعث می‌شود که Bash این دستور را به عنوان یک دستور نامعتبر تشخیص دهد. برای حل این مشکل، علامت مساوی را حذف کنید تا کد به شکل زیر باشد:
VAR1=`echo $VAR1 | tr -d [:alpha:] | tr -d [:blank:]`
  1. در خط سوم، باید با [ آغاز کنید و عبارت شرطی را بنویسید. برای اینکه Bash بداند که [ یک دستور است، پسوند ] را نیز باید بنویسید. این خط باید به صورت زیر باشد:
while [ -z $VAR1 ]

پس از این تغییرات، کد شما به شکل زیر خواهد بود:

#!/bin/bash
while [ -z $VAR1 ]
do
    read -p "please enter var1:" VAR1
    VAR1=`echo $VAR1 | tr -d [:alpha:] | tr -d [:blank:]`
done
while [ -z $VAR2 ]
do
    read -p "please enter var2:" VAR2
done
VAR3=`expr $VAR1 \\* $VAR2`
if [ $VAR1 -gt $VAR2 ]
then
VAR4=`expr $VAR1 / $VAR2`
else
VAR4=`expr $VAR2 / $VAR1`
fi
echo "Multiply is: $VAR3"
echo "Dividing is: $VAR4"

با این تغییرات، مشکل اول بهبود پیدا می‌کند، اما مشکل دوم همچنان وجود دارد. این مشکل به این دلیل است که Bash در خط سوم عدد 3 را به عنوان نام یک متغیر تشخیص داده است. برای حل این مشکل، وارد کردن یک فاصله بین [ و $VAR1 کافی است. خط سوم باید به صورت زیر باشد:

while [ -z "$VAR1" ]

پس از این تغییرات، کد شما باید بدون مشکل اجرا شود.

بهترین پاسخ
احمدرضا فاطمی کیا ۰۸ فروردین ۱۴۰۲، ۰۹:۱۵

سلام

سپاس از راهنمایی تان

بله فاصله بین VAR1 و مساوی باعث این دو خطا شده بود که با حذف این فاصله

مشکل ام حل شد

mohammad dadkhah ۰۸ فروردین ۱۴۰۲، ۰۹:۲۴