Dubbla innanför enkla tolkas inte; just enkla citattecken "dödar" det mesta av tolkning.
Din nuvarande lösning kommer åka på problem ifall någon av variablerna innehåller mellanslag. Bättre vore att använda enkla citattecken innanför dina dubbla, vilket inte "dödar" tolkningen, typ:
mysql --user=user --password=lösen --execute "INSERT INTO stats.loadavg VALUES(NOW(), NOW(), '$1', '$2', '$3', 6, 413);"
Notera dock att sådan här "naiv" sammanslagning av strängar kommer med en del finter; om indata här innehåller egna enkla citationstecken här så ligger man risigt till igen. Det är en av anledningarna till att man gärna använder ett mer uttrycksfullt API för databaskommunikation.
Hur löser man detta "ordentligt" i shell script så att det kan hantera snarast godtycklig indata? Man kan manuellt leta efter "dumma" tecken med exempelvis `tr` eller `sed`, eller kanske vara snillrik med `printf` (`%q` ger en "shell escaped" sträng via `printf`, som kanske snarare quotar för mycket) på något sätt, men ska man återuppfinna ordentlig indatakontroll så är det troligen mindre jobb (och bättre) att skriva om skriptet i Python/Perl/PHP/någonting som redan har vettiga bibliotek som sköter sådant.