bash - shell script شرح




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

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

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

انا حصلت

[: : integer expression expected

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


أنه:

if [ $# -eq 0 ]
  then
    echo "No arguments supplied"
fi

سوف يخبرك المتغير $# عدد وسائط الإدخال التي تم تمرير النص البرمجي منها.

أو يمكنك معرفة ما إذا كانت الوسيطة عبارة عن سلسلة فارغة أم لا:

if [ -z "$1" ]
  then
    echo "No argument supplied"
fi

سوف اختبار -z اختبار إذا كان توسيع "$ 1" سلسلة فارغة أم لا. إذا كانت سلسلة فارغة ، فسيتم تنفيذ النص.


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

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

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

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

((!$#)) && 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.

غالبًا ما أستخدم هذا المقتطف للنصوص البسيطة:

#!/bin/bash

if [ -z "$1" ]; then
    echo -e "\nPlease call '$0 <argument>' to run this command!\n"
    exit 1
fi

محاولة:

 #!/bin/bash
 if [ "$#" -eq  "0" ]
   then
     echo "No arguments supplied"
 else
     echo "Hello world"
 fi

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

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

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





shell