• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Breadcrumb

  • Hjem
  • forums
  • Bashscript problemer[SOLVED]

Snak med

Opret dig!

Af peque | 24.03.2011 09:13

Bashscript problemer[SOLVED]

Hjælp generelt
Hey Linuxin.

Jeg er ved at lave et script der kan håndtere SMS afsendelse via en SMS gateway.

Men jeg ville gerne kunne have valget imellem 2 eller 3 parametre ved kald af script - som foregår således:
ved 2 parametre:
./smsgateway.sh $MODTAGER $BESKED
ved 3 parametre:
./smsgateway.sh $MODTAGER $AFSENDER $BESKED

Dermed skal jeg have en del i mit script der tester om der er 2 eller 3 parametre - så hvis der er 2 parametre - så indsætter den en standard afsender - og hvis der er 3parametre - så bruger den medsendte parametre:
Som jeg troede jeg kunne lave dette:

#********************************************************#
# Testing for Parameters or setting the sender
#********************************************************#
if [ test $# -eq 2 ]
then
SENDER="FIRMAnavn"
MESSAGE="$2"
else
exit 1
fi

if [ test $# -eq 3 ]
then
SENDER="$2"
MESSAGE="$3"
else
exit 1
fi

ELLER SOM HER:

if [ $? -eq 2 ]
then
SENDER="Firmanavn"
MESSAGE="$2"
else
exit 1
fi

if [ $? -eq 3 ]
then
SENDER="$2"
MESSAGE="$3"
else
exit 1
fi



Men jeg kan ikke få det til at fungere - det er som om dette er forkert - eller jeg opnår ikke det jeg ønsker!
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer10

# 1

14 år 2 måneder siden

Permalink

Indsendt af dusted den 24. marts 2011 kl. 12:32

Permalink

Husk at argument 0 er

Husk at argument 0 er bashscriptets navn. Derfor er
./script = 1 argument
./script test = 2 argumenter
./script test test = 3 argumenter

for at gøre din kode mere generisk kan du i stedet sige:
lade den være ./script MODTAGER BESKED [AFSENDER]

og skrive
if [ $# -qt 2 ] && [ $# -lt 5 ]
then
MODTAGER=$2
BESKED=$3
AFSENDER="noget standard.. ?"
if [ #$ -eq 4 ]
then
AFSENDER=$4
fi
else
echo "Forkert antal argumenter."
exit 1
fi
Nu skal resten af scriptet ikke tage hensyn til at scriptet kan kaldes med en afsender eller uden.
  • Log ind eller opret dig for at tilføje kommentarer

# 2

14 år 2 måneder siden

Permalink

Indsendt af peque den 24. marts 2011 kl. 13:40

Permalink

Vi er enige om dette. Men da

Vi er enige om dette. Men da parameterne komme fra en andet Windowsprogram
(MERA) - så er det ikke muligt at lave en ombytning af dette - uden at skulle lave hele deres modul omkring Notessedler/sms/mails om "bare for det" .

Vi er fuldt ud enige om det ville være 25 nemmere,smartere og mere logisk den anden vej rundt, men det er bare ikke en mulighed jeg har i dette tilfælde...... så der må jeg desværre melde pas. Men vil da lige kigge på den anden ting . så det kommer til at passe ind.
  • Log ind eller opret dig for at tilføje kommentarer

# 3

14 år 2 måneder siden

Permalink

Indsendt af mich den 24. marts 2011 kl. 14:32

Permalink

Prøv med
if [ $# -gt 1 ]

Prøv med

if [ $# -gt 1 ] && [ $# -lt 4 ]
then
MODTAGER=$1
if [ $# -eq 2 ]
then
SENDER="Firmanavn"
BESKED="$2"
fi

if [ $# -eq 3 ]
then
SENDER="$2"
BESKED="$3"
fi
else
echo "Forkert antal argumenter."
exit 1
fi

  • Log ind eller opret dig for at tilføje kommentarer

# 4

14 år 2 måneder siden

Permalink

Indsendt af peque den 24. marts 2011 kl. 14:57

Permalink

Hey Mich.
Takker for input -

Hey Mich.
Takker for input - men det virker desværre ikke....
Der kommer slet ikke noget igennem ud på den anden side og afsender SMS - så desværre er dette heller ikke løsningen!

Per
  • Log ind eller opret dig for at tilføje kommentarer

# 5

14 år 2 måneder siden

Permalink

Indsendt af mich den 24. marts 2011 kl. 15:10

Permalink

Så må du have et andet

Så må du have et andet problem.
Det virker hos mig, når jeg tester med

#!/bin/bash

echo ---------------
echo $# # Print number of arguments
echo ---------------


før min forrige code-blok og

echo "Afsender = "$SENDER
echo "Modtager = "$MODTAGER
echo "Besked = "$BESKED

efter.
  • Log ind eller opret dig for at tilføje kommentarer

# 6

14 år 2 måneder siden

Permalink

Indsendt af divineant den 24. marts 2011 kl. 16:15

Permalink

jeg plejer at teste om der

jeg plejer at teste om der er indhold i positionsvariablerne, og sætte min state derefter.


MODTAGER=$1
AFSENDER=default
if [ ! -z "$3" ]; then
AFSENDER=$2
BESKED=$3
elif [ ! -z "$2" ]; then
BESKED=$2
else
raise_argument_error
fi
  • Log ind eller opret dig for at tilføje kommentarer

# 7

14 år 2 måneder siden

Permalink

Indsendt af divineant den 24. marts 2011 kl. 16:31

Permalink

forøvrigt, dit eksempel i

forøvrigt, dit eksempel i #0 indeholder en udbredt misforståelse omkring firkantede paranteser, de er nemlig ikke påkrævet i en if statement, og de har ikke samme betydning som paranteser i f.eks. C , hvor man ville skrive if ( expr ) { ... }
[ 1 -lt 2 ] er det samme som test 1 -lt 2
idet [ ] er et alias for kommandoen test
Derfor er udtrykket:
if [ test 1 -lt 2 ]; then ... fi
det samme som at skrive
if test test 1 -lt 2; then ... fi
  • Log ind eller opret dig for at tilføje kommentarer

# 8

14 år 2 måneder siden

Permalink

Indsendt af dudsen den 24. marts 2011 kl. 16:31

Permalink

array

#!/bin/bash
args=("$@");
if [ ${#args[*]} -lt 3 ] ;
then echo "theres less then 3 arguments";
else
echo "theres more then 2 variables";
fi;

tester for antallet af paserede argumenter men det er lidt det samme mich gør bare med en lidt mere "ren" syntaks.
  • Log ind eller opret dig for at tilføje kommentarer

# 9

14 år 2 måneder siden

Permalink

Indsendt af peque den 24. marts 2011 kl. 17:20

Permalink

Det var da en dum smutter.
I

Det var da en dum smutter.
I min kopi stod der MESSAGE, men i MICH står der BESKED - som er det jeg bruger efter at have lavet spaces om til plusser. (hehehe) så ergo var min variabel BESKED tom - da den ligesom tog outputtet af MESSAGE og løb igennem.

Sorry misforståelsen
  • Log ind eller opret dig for at tilføje kommentarer

# 10

14 år 2 måneder siden

Permalink

Indsendt af marlar den 24. marts 2011 kl. 21:56

Permalink

#8: Jeg troede også at der

#8: Jeg troede også at der skulle kantede paranteser omkring. Alle guider, eksempler og bøger mm. jeg har set, bruger dem!
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

Privatbeskeder 0
llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0

Seneste aktivitet

BigLinux 4
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Backup/synkronisering? 2
Pepsi Challenge 4
"Intet realistisk alternativ" - mig i r*ven 10
Linuxin er nu migreret til Drupal 11 13
Et Dansk alternativ til Facebook 18
Ingen Mint 3
Ekstern Blu-ray-brænder, der fungerer med PCLinuxOS 3
Københavns og Aarhus Kommune dropper MS 9
Open Source-eksperimentet 1
Microsoft og Google ud af de danske skoler 2
Udfordringer med lydin på Debian 12 1
ExplainingComputers? 2
Nextcloud på mobilen 1
Vil du have et sikrere og mere privat internet? Du skal blot installere Vivaldi-browseren med Proton VPN understøttelse! 1
Ny Linuxin på vej :) 43
5G 9

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !