2007-11-26, 20:08
  #1
Medlem
Rizados avatar
S hr har jag tnkt ut det:
$@ r s vitt jag frstr det man skriver in efter scriptet (typ: ./script -help, -help r $@)

Nu vill jag att mitt script ska f variabel VICTIM att bli "$@" om det str nt dr annars en default ip. Ni frstr nog av kodstycken:

Kod:
if [ -n "$@" ]
then
	VICTIM="$@"
	echo "if?"
else
	VICTIM="127.0.0.1"
	echo "else?"
fi

Nr jag sedan kr: "./mittScript 192.168.0.1" s anvnder den s glatt rtt adress, men nr jag kr "./mittScript" s vill den inte alls anvnda else satsen! r inte $@ tom?

Hoppas ni frstr, jag blir tokig p detta! Jag tycker det borde vara helt sjlvklart men det tycker inte min dator
Citera
2007-11-26, 21:08
  #2
Medlem
Rizados avatar
Nu funkar det, bytte ut $@ mot $1.
Citera
2007-11-26, 21:09
  #3
Medlem
gadzooxs avatar
-n och $@ verkar inte lira s bra ihop, nej.... -z gr det dremot, vilket r lite mysko med tanke p att -z r motsatsen till -n (length is zero vs. length is non-zero). Kan man bash bttre n vad jag kan s r det kanske inte s mysko, men i mina gon r det iaf skumt...

Kod:
if [ ! -z "$@" ]    # "if not length is zero"
then
        VICTIM="$@"
        echo "if?"
else
        VICTIM="127.0.0.1"
        echo "else?"
fi

Scriptet ovan funkar bra med ett argument, If-satsen ovan verkar dock inte tycka om flera argument:
Citat:
# ./test.sh a b
./test.sh: line 3: [: a: binary operator expected

# ./test.sh a b c
./test.sh: line 3: [: too many arguments


$@ r dock en strng innehllandes alla argument. Kr du ./script -help apa 123 s blir $@ == "-help apa 123".
Du kan istllet anvnda $1, $2, $3 etc, som refererar till respektive argument ($1 == "-help", $2 == "apa", $3 == "123")
Kod:
if [ -n "$1" ]
then
        VICTIM="$1"
        echo "if?"
else
        VICTIM="127.0.0.1"
        echo "else?"
fi


Lista ver expressions: http://tldp.org/LDP/Bash-Beginners-G...ect_07_01.html

Fr exempel p lite mer avancerad argument-parsing hittade jag denna lnk, rtt smidigt.


Edit: ack.. en minut fr sent
Citera
2007-11-26, 21:34
  #4
Medlem
Rizados avatar
Haha det gr inget, lrde mig en hel del bra saker av ditt inlgg med

Testade att anvnda -z men det fungerade inte fr mig. Vilket r vldigt konstigt eftersom $@ inte borde vara bde non zero och zero p samma gng...

Det r nstan s att man knner sig lite skyldig nr man gr s hr
Citera
2007-11-26, 22:18
  #5
Medlem
Rizados avatar
Hoho, nu har jag faktiskt ftt reda p varfr $@ inte fungerar.

http://ubuntuforums.org/showpost.php...56&postcount=7

Kort sagt, nr man inte har ngra argument frsvinner $@ och "$@" s istllet blir det:
if [ -n ]; then Vilket r TRUE av nn anledning
Citera
2007-11-26, 22:40
  #6
Medlem
....

r detta Bash? Jag fr associationer till perl.
Citera
2007-11-26, 23:42
  #7
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av Rizado
Hoho, nu har jag faktiskt ftt reda p varfr $@ inte fungerar.

http://ubuntuforums.org/showpost.php...56&postcount=7

Kort sagt, nr man inte har ngra argument frsvinner $@ och "$@" s istllet blir det:
if [ -n ]; then Vilket r TRUE av nn anledning
Oh ok... Skumt att det evaluerar till true, men ok, det r allts drfr ! -z funkar

Citat:
Ursprungligen postat av disident
r detta Bash? Jag fr associationer till perl.
Japp, bash.
Citera
2007-12-26, 02:06
  #8
Medlem
Cofis avatar
Annars kan du ju skriva en sats i brjan av scriptet som gr att det mste startas med minst ett argument.

if [ $# -eq 0 ]; then
echo "Usage: $0 <adress?>"
exit 1
fi
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in