Bashscript problemer[SOLVED]
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:
Men jeg kan ikke få det til at fungere - det er som om dette er forkert - eller jeg opnår ikke det jeg ønsker!
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!
Kommentarer10
Husk at argument 0 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.
Vi er enige om dette. Men da
(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.
Prøv med
if [ $# -gt 1 ]
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
Hey Mich.
Takker for input -
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
Så må du have et andet
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.
jeg plejer at teste om der
MODTAGER=$1
AFSENDER=default
if [ ! -z "$3" ]; then
AFSENDER=$2
BESKED=$3
elif [ ! -z "$2" ]; then
BESKED=$2
else
raise_argument_error
fi
forøvrigt, dit eksempel i
[ 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
array
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.
Det var da en dum smutter.
I
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
#8: Jeg troede også at der