Πώς να κάνετε μια λογική πράξη OR σε shell scripting

Προσπαθώ να κάνω έναν απλό έλεγχο κατάστασης, αλλά δεν φαίνεται να λειτουργεί.

Αν $# είναι ίσο με 0 ή είναι μεγαλύτερο από 1 τότε πείτε γεια.

Δοκίμασα την ακόλουθη σύνταξη χωρίς επιτυχία:

if [ "$#" == 0 -o "$#" > 1 ] ; then
 echo "hello"
fi

if [ "$#" == 0 ] || [ "$#" > 1 ] ; then
 echo "hello"
fi
Λύση

Αυτό θα πρέπει να λειτουργήσει:

#!/bin/bash

if [ "$#" -eq 0 ] || [ "$#" -gt 1 ] ; then
    echo "hello"
fi

Δεν είμαι σίγουρος αν αυτό είναι διαφορετικό σε άλλα κελύφη, αλλά αν θέλετε να χρησιμοποιήσετε τα , πρέπει να τα βάλετε μέσα σε διπλή παρένθεση όπως παρακάτω:

if (("$#" > 1))
 ...
Σχόλια (4)

Αυτός ο κώδικας λειτουργεί για μένα:

#!/bin/sh

argc=$#
echo $argc
if [ $argc -eq 0 -o $argc -eq 1 ]; then
  echo "foo"
else
  echo "bar"
fi

Δεν νομίζω ότι η sh υποστηρίζει το "==". Χρησιμοποιήστε το "=" για να συγκρίνετε συμβολοσειρές και το -eq για να συγκρίνετε ints.

man test

για περισσότερες λεπτομέρειες.

Σχόλια (4)

έχετε δοκιμάσει κάτι τέτοιο:

if [ $# -eq 0 ] || [ $# -gt 1 ] 
then
 echo "$#"
fi
Σχόλια (2)