سؤال

أنا اختبار مع shell script أدناه:

#!/bin/ksh -x


instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi

إنه يعطي هذا الخطأ في حالة:

: ==: unknown test operator

يكون == حقا ليس بناء الجملة الصحيح لاستخدامها؟ أنا أركض في سطر الأوامر على النحو التالي

test_lsn_2 INSTANCE=ALL

يمكن لأي شخص أن يقترح حلا. شكرا.

هل كانت مفيدة؟

المحلول

أرى أنك تستخدم KSH، لكنك أضفت باش كعلامة، هل تقبل إجابة مرتبطة باش؟ باستخدام Bash يمكنك القيام بذلك بهذه الطرق:

if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]

يرى هنا لمزيد من ذلك.

نصائح أخرى

لمقارنة السلاسل التي تحتاجها واحدة =، وليس مزدوجا. ويجب أن تضعه في اقتباسات مزدوجة في حالة وجود السلسلة فارغة:

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi

يحاول

if [ "$instance" = "ALL" ]; then

كان هناك العديد من الأخطاء:

  1. تحتاج إلى اقتباسات مزدوجة حول المتغير للحماية من الحالة (من غير المرجح) أنها فارغة. في هذه الحالة، سترى شل if [ = "ALL" ]; then التي ليست صالحة.

  2. يساوي القشرة تستخدم واحدة = (لا توجد طريقة لتعيين قيمة في if في قذيفة).

totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac

أجاب بالفعل على سؤال مماثل. أساسا المشغل الذي تحتاجه هو = (ليس ==) وكسر بناء الجملة إذا كان المتغير الخاص بك فارغا (أي يصبح if [ = ALL]). القي نظرة على الجواب الآخر للتفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top