تحقق من وجود وسيطة الإدخال في برنامج نصي Bash shell



Answers

من الأفضل أن تظهر هذه الطريقة

if [[ $# -eq 0 ]] ; then
    echo 'some message'
    exit 1
fi

تحتاج عادةً للخروج إذا كان لديك عدد قليل جدًا من الحجج.

Question

أحتاج إلى التحقق من وجود وسيطة إدخال. لدي البرنامج النصي التالي:

if [ "$1" -gt "-1" ]
  then echo hi
fi

انا حصلت

[: : integer expression expected

كيف يمكنني التحقق من الوسيطة input أولاً لمعرفة ما إذا كانت موجودة؟




طريقة أخرى للكشف عن ما إذا تم تمرير الحجج إلى البرنامج النصي:

((!$#)) && echo No arguments supplied!

لاحظ أن (( expr )) يؤدي إلى تقييم التعبير وفقًا لقواعد حساب Shell .

من أجل الخروج في غياب أي حجج ، يمكن للمرء أن يقول:

((!$#)) && echo No arguments supplied! && exit 1

طريقة أخرى (مماثلة) لتوضيح ما ورد أعلاه:

let $# || echo No arguments supplied

let $# || { echo No arguments supplied; exit 1; }  # Exit if no arguments!

help let يقول:

let: let arg [arg ...]

  Evaluate arithmetic expressions.

  ...

  Exit Status:
  If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.



إذا كنت ترغب في التحقق مما إذا كانت الوسيطة موجودة أم لا ، يمكنك التحقق مما إذا كانت # من الوسيطات أكبر من أو تساوي رقم الوسيطة المستهدفة.

يوضح البرنامج النصي التالي كيف يعمل هذا

test.sh

#!/usr/bin/env bash

if [ $# -ge 3 ]
then
  echo script has at least 3 arguments
fi

ينتج الإخراج التالي

$ ./test.sh
~
$ ./test.sh 1
~
$ ./test.sh 1 2
~
$ ./test.sh 1 2 3
script has at least 3 arguments
$ ./test.sh 1 2 3 4
script has at least 3 arguments



كتذكير صغير ، تعمل عوامل الاختبار الرقمية في Bash فقط على الأعداد الصحيحة ( -lt ، -ge ، -ge ، إلخ.)

أحب التأكد من أن النوتات $ mys الخاصة بنا

var=$(( var + 0 ))

قبل اختبارهم ، فقط للدفاع ضد الخطأ "[: integer arg المطلوبة".




Links



Tags

bash bash   shell