---
title: "test av argument med wildcard"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/169848-test-av-argument-med-wildcard"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "noratx"
published: "2008-03-12T12:13:17.000Z"
updated: "2008-03-16T20:15:17.000Z"
replies: 5
views: 689
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/169848-test-av-argument-med-wildcard"
---

# test av argument med wildcard

## #1 — noratx, 2008-03-12T12:13Z

Jag försöker få till ett test av ett argument.
Vid körande av mitt script, vill jag kontrollera om andra argumentet innehåller \*.gz, där \* är ett wildcard.
(Exempel på input:  "mybackup.sh -send backup.sql.gz")
Det finns andra argument, som tex: "mybackup.sh -dump -send"

I det senare fallet sätts en variabel (dumpfile) till full_dump\_(datum).sql.gz, när -dump har gjort sitt, tar -send vid och skickar iväg dumpfilen.
Men låt oss säga att FTP servern som tar emot dumpfilen för tillfället inte svarar, då vill jag kunna köra -send ensamt. I det fallet vet ju scriptet inte om vad dumpfilen heter, och därfor vill jag testa om andra argumentet innehåller "\*.gz", så variabeln dumpfile får ett värde.

Den lösningen jag kommit på för detta är följande:

```
if [ $2 = *.gz ] ;
then
        dumpfile="$2"
fi
```

Problemet är ju bara att 

```
if [ $2 = *.gz ] :
```

tycker att andra argumentet skall vara just "\*.gz" annars blir det fel. Hur löser jag detta på bästa sätt?

Permalänk: https://www.webforum.nu/p/169848

## #2 — spango, 2008-03-12T14:44Z

Om man skickar -q till grep, så är den "tyst" och svarar bara på om insträngen matchade eller inte. Så du skulle kunna kombinera det med regexp-switchen -P:

```
if echo "$2" | grep -q -P '\.gz$'; then dumpfile="$2"; fi
```

Typ. Kan inte svära på att regexpen funkar; om den inte gör det, testa lite utan -q.

Permalänk: https://www.webforum.nu/p/2087742

## #3 — noratx, 2008-03-14T14:07Z

Hej!

Det dar gav mig lite olika fel som jag inte riktigt forstar mig pa.

```
if echo "$2" | grep -q -P '\.gz$';
then
        echo "The file is a .gzip file"
else
        echo "Error!"
fi
```

Bara for att testa scriptet sa gor jag echoes.
Har ar felen jag far:

```
itsak# ./test.sh arg1 arg2.gz
if: Expression Syntax.
grep: The -P option is not supported
then: Command not found.
The file is a .gzip file
else: endif not found.
```

Permalänk: https://www.webforum.nu/p/2088135

## #4 — spango, 2008-03-14T14:20Z

Prova med -E istället för -P. Och så måste antagligen grep-grejen ligga i ett subshell, så

```
if (echo "$2" | grep -q -E '\.gz$') ;
then
        echo "The file is a .gzip file"
else
        echo "Error!"
fi
```

Permalänk: https://www.webforum.nu/p/2088138

## #5 — noratx, 2008-03-14T14:39Z

Hmm.. nu fungerade det lite battre.
Felen reducerade till enbart ett enda.

```
itsak# ./test.sh arg1 arg2.gz
if: Expression Syntax.
```

Provade att byta ut parenteserna mot hakklammrar, men det gav samma resultat.

Permalänk: https://www.webforum.nu/p/2088142

## #6 — spango, 2008-03-16T20:15Z

Mysko, det funkar för mig i bash. Vad kör du för skal?

Hakparanteserna ska du inte använda, de är bara en sockrad version av kommandot *test* (så *\[ -eq $a $b \]* är samma lika som *test -eq $a $b*). Vanliga paranteser gör ett subskal av flera kommandon, och det subskalet får samma avslutningskod som det sista kommandot i subskalet. Stor skillnad :)

Permalänk: https://www.webforum.nu/p/2091823

---

Tråden på webben: https://www.webforum.nu/amne/programmering/169848-test-av-argument-med-wildcard
