template - linux terminal set title bash




Überprüfen Sie das Vorhandensein des Eingabearguments in einem Bash-Shell-Skript (6)

Eine weitere Möglichkeit festzustellen, ob Argumente an das Skript übergeben wurden:

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

Beachten Sie, dass (( expr )) bewirkt, dass der Ausdruck gemäß den Regeln von Shell Arithmetic ausgewertet wird.

Um ohne Argumente auszusteigen, kann man sagen:

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

Eine andere (analoge) Art, das obige zu sagen, wäre:

let $# || echo No arguments supplied

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

help let sagt:

let: let arg [arg ...]

  Evaluate arithmetic expressions.

  ...

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

Ich muss die Existenz eines Eingabearguments überprüfen. Ich habe folgendes Skript:

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

Ich bekomme

[: : integer expression expected

Wie überprüfe ich zuerst das Eingabeargument1, um zu sehen, ob es existiert?


Es ist besser, dies zu demonstrieren

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

Sie müssen normalerweise beenden, wenn Sie zu wenige Argumente haben.


Ich verwende dieses Snippet oft für einfache Skripte:

#!/bin/bash

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

Versuchen:

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

Wenn Sie nur herausfinden möchten, ob ein bestimmtes Argument fehlt, ist die Parametersubstitution groß:

#!/bin/bash
# usage-message.sh

: ${1?"Usage: $0 ARGUMENT"}
#  Script exits here if command-line parameter absent,
#+ with following error message.
#    usage-message.sh: 1: Usage: usage-message.sh ARGUMENT

In einigen Fällen müssen Sie überprüfen, ob der Benutzer ein Argument an das Skript übergeben hat, und wenn nicht, auf einen Standardwert zurückgreifen. Wie im folgenden Skript:

scale=${2:-1}
emulator @$1 -scale $scale

Wenn der Benutzer die scale als zweiten Parameter übergeben hat, -scale 1 ich den Android-Emulator standardmäßig mit der -scale 1 . ${varname:-word} ist ein Erweiterungsoperator. Es gibt auch andere Expansionsoperatoren:

  • ${varname:=word} das den undefinierten varname anstatt den varname ;
  • ${varname:?message} die entweder varname wenn sie definiert ist und nicht null ist oder die message varname und das Skript abbricht (wie im ersten Beispiel);
  • ${varname:+word} gibt nur ein word , wenn varname definiert ist und nicht null ist; gibt ansonsten null zurück.

Zur Erinnerung: Die numerischen Testoperatoren in Bash arbeiten nur mit Ganzzahlen ( -eq , -lt , -ge usw.).

Ich möchte sicherstellen, dass meine $ vars ints sind

var=$(( var + 0 ))

bevor ich sie teste, nur um mich gegen den Fehler "[: integer arg required" zu verteidigen.





shell