They have the same meaning "only". "だけ" can be used in both negative and affirmative sentences, but "しか" can be only used in negative sentences. ("しか" is always related to "ない".) When you want to emphasize "しか", you can say "だけしか".
- Ken: Only Amy has a knife and fork. Could you get some cutlery for Leo and me, please.
[OK]エイミだけ、フォークとナイフがあります。リオと僕にもお願いします。
[NG]エイミしか、フォークとナイフがあります。リオと僕にもお願いします。
-->You can’t use “しか” in an affirmative sentence.
[OK]エイミしか、フォークとナイフがありません。リオと僕にもお願いします。 - Waiter: Sure. Is there anything else I can do for you?
かしこまりました。他に何かございますか? - Leo: I’m the only one who can’t eat carrots. Could you serve my dish without them?
[OK]僕だけ、人参が食べられません。人参抜きで、お願いします。
[NG]僕しか、人参が食べられません。人参抜きで、お願いします。
-->”僕しか、人参が食べられません” is grammatically correct, but it means that Ken and Amy can’t eat carrots in this context.
- Ken: I don’t have much money because I thought we came out just for a workout. But I’m so hungry so I wonder if I should order a cheeseburger. How much does it cost?
運動する為だけに来たから、そんなにお金を持ってこなかった。でも、お腹が空いたから、チーズバーガーを頼もうかな?いくらだろう? - Leo: That’ll be two dollars and fifty cents.
2ドル50セントだって。 - Ken:Okay. I’m lucky! I only have three dollars, so I can buy it. Are you ready to order?
オッケー。ラッキー!3ドルだけあるから買えるな。決まった?
-->Ken is satisfied because even though he doesn't have much money, at least he has enough to buy the cheeseburger. Thus, he can only use “だけ”. - Leo:Hmm, I only have two dollars, so I can’t even afford it. I’ll have a classic hamburger. It’ll be two dollars.
2ドルしかないから、買えないな。普通のハンバーガーにしよう。2ドルだから。
-->Leo is disappointed because he doesn't have enough money to buy the cheeseburger. Thus, he can only use “しか” or “だけしか”.
- Leo : One page completed! I've done it! So, guys, since I've made this amazing progress what do you say we take a break and grab some coffee?
1ページ、終わった!やった!ねぇ、皆、順調だから休憩しない?コーヒーでも飲みに行かない? - Amy :Hey, just one page? Isn't it too early for the break? Since you've finished only one page, it'll take at least another two hours to complete the rest of your homework.
えっ、1ページだけ?休むには早すぎない?1ページしか終わっていないんだから、宿題全部(or残り)を終わらすのに少なくとも2時間はかかるよ。 - Leo: Could be, but there’s no need to rush. We have plenty of time.
(そう)かもね。でも、急ぐ必要ないよ。時間はたっぷりあるんだから。 - Amy: Anyway, I've just finished all my homework and the only thing I have left is to go through each page. So I can take a break in 15 minutes, if you want. How about Ken?
私は、ちょうど全部終わったし、あとは(もう一度各ページを)見直すだけ。だから、15分後には休憩できる。ケンは? - Ken : Well, I'm not finished yet, I've only completed 3 pages so far, so why don't we take a break in 20 minutes?
んー、まだ終わっていない。3ページだけしか終わっていないから、20分後に休憩でいい?