Argument Sjekker Problem i Bash Script

stemmer
5

Så i utgangspunktet jeg prøver å sjekke argumentene som sendes inn i manuset. Hvis den har tre argumenter og den tredje argumentet er en en, så jeg vil at det skal fortsette. Jeg ønsker også å fortsette hvis den har fire argumenter og det tredje argumentet er ikke en en.

Så i utgangspunktet tenkte jeg at jeg bare kunne gjøre ...

if ([ $# -ne 3 ] and [ $3 -ne 2 ])
then
exit 0
fi

Men det virker som Bash ikke har og er til bruk for dersom tallet, så da jeg skjønte at jeg bare kunne bruke nestede hvis tallet, men nå er det klager likevel. Så dette er hva jeg har for tiden ...

if [ $# -ne 3 ]
then
if [ $3 -ne 1 ]
then

echo Improper number of arguments.
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT>

Select can be left off if you want all data (Mode=1)

exit 0

fi
fi
if [ $# -ne 4 ]
then
if [ $3 -ne 2 ]
then

echo Improper number of arguments.
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT>

Select can be left off if you want all data (Mode=1)

exit 0

fi
fi

Så hvor skal jeg galt? Kan jeg ikke reir hvis uttalelser i Bash? Er det en super-zen måte å gjøre dette at jeg mangler helt?

Takk for all hjelp du kan gi meg.


New problemet ...

Nå, for en eller annen grunn, koden fungerer ikke i det hele tatt. Det er ingen feil eller noe, det bare virker ikke. Det trenger ikke sjekke antall argumenter. Jeg har kjørt skriptet uten argumenter i det hele tatt, og det bare hopper det som det er ikke engang der.

Rare er at jeg var sikker på at koden jobbet i går. Kom tilbake i dag, ikke så mye. Noen ideer om hva problemet er? (Beklager, men jeg måtte fjerne den aksepterte svaret på dette.)

if [[ $# = 3 && $3 != 1 ]]
then

echo Improper number of arguments.
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT>

Select can be omitted if all data is required (Mode=1)

exit 0

fi

if [[ $# > 4 ]]
then

echo Improper number of arguments.
FORMAT make-csv-data <STUDY> <TAG> <MODE> <SELECT>

Select can be omitted if all data is required (Mode=1)

exit 0

fi

EDIT II:

Det er et par ting som bash shell ikke er fornøyd med dette manuset som jeg prøver å gjøre. Jeg vil trolig ende opp skrive det på et annet skriptspråk og gjøre noen flere ting som jeg har i tankene for prosjektet. Takk for hjelpen i alle fall.

Publisert på 26/05/2009 klokken 15:38
kilden bruker
På andre språk...                            


2 svar

stemmer
19

if [ $# -ne 3 -a "$3" -ne "1" ]; then
  exit 0
fi

For referanse

-a = and
-o = or

Eller, kan du bare bruke bruk:

if [[ $# != 3 && "$3" != "1" ]]; then
Svarte 26/05/2009 kl. 15:48
kilden bruker

stemmer
2

Vær snill å se:

http://bash-hackers.org/wiki/doku.php/commands/classictest#and_and_or og http://bash-hackers.org/wiki/doku.php/syntax/ccmd/conditional_expression

Siden du bare sjekke avkjørsel / returverdier med "hvis", må du gi noe, for eksempel en kommando, som gir meningsfulle som er basert på tester. [Er en slik kommando, er en annen mulighet til [[søkeord.

Den faktiske riktige eksempler allerede ble nevnt av scragar ovenfor, jeg ønsker ikke å bare gjenta dem :)

Svarte 26/05/2009 kl. 16:57
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more