Hvad er forskellen på (( )) og [[ ]] i bash?

Dette forum bruges på EGET ANSVAR til at lege med scripts og andre ting med risiko for at beskadige sit eget og andres systemer.
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Hvad er forskellen på (( )) og [[ ]] i bash?

Indlæg af NickyThomassen »

Jeg sidder og konstruerer en if, som skal opnå true på to parametre før koden må køres.

I manualen til bash (http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_02.html) nævnes 2 måder det kan gøres på:

Kode: Vælg alt

[ EXPR1 -a EXPR2 ]  og  (( EXPR1 )) || (( EXPR2 ))


EDIT, jeg har lige rettet linien til noget som virker efter hensigten.
For mig er det kun

Kode: Vælg alt

if (( cat /proc/mounts | grep '/media/dc-do' > /dev/null )) && (( test -e /media/dc-do/testfile ));
som virker, dvs at jeg kan ikke bruge [ ] i linien, og så vidt jeg kan se, så forklarer manualen ikke forskellen.

Jeg få en fejl fra grep, som siger

Kode: Vælg alt

grep: ]: Ingen sådan fil eller filkatalog
hvis jeg bruger [ ].

Hvad er forskellen?
Er det den 'rigtige' måde som jeg gør det på, eller er der en bedre måde at evaluere flere parametre på?
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Hvad er forskellen på (( )) og [[ ]] i bash?

Indlæg af NickyThomassen »

For helhedens skyld, kan jeg lige inkludere hvad jeg forstiller mig det endelige resultat bliver:

Kode: Vælg alt

if (( cat /proc/mounts | grep '/media/dc-do' > /dev/null )) && (( test -e /media/dc-do/testfile ));
   then
   echo "Backup-drev fundet i mounts og testfile tilstede"
   (køre backup her)
   elif (( sudo mount /media/dc-ba))  || (( test -e /media/dc-do/testfile ));
   (køre backup her)
   then
   echo "Backup-drev og / eller testfile ikke tilstede, afslutter."
   exit 1
fi

exit 0
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: Hvad er forskellen på (( )) og [[ ]] i bash?

Indlæg af NickyThomassen »

TitanusEramius skrev:EDIT, jeg har lige rettet linien til noget som virker efter hensigten.
For mig er det kun

Kode: Vælg alt

if (( cat /proc/mounts | grep '/media/dc-do' > /dev/null )) && (( test -e /media/dc-do/testfile ));
som virker, dvs at jeg kan ikke bruge [ ] i linien, og så vidt jeg kan se, så forklarer manualen ikke forskellen.

Eller ikke. Efter at jeg kørte nogle flere tests idag, får jeg stadig fejl på den linie. Så ligemeget hvad jeg gør, eller hvilket et af rådene fra manualen som jeg følger, så kan jeg ikke få 'if' til at evaluere to parametre...

Nu har jeg oprettet en tråd hos Ars Technica, og så håber jeg at mysteriet om bash'es modvilje kan blive løst