At line:1 char:30
You don't have any new line characters to separate the lines. Everything is on one line, so you need to separate cmdlets with a semicolon.
while ($true) {$shell = Read-Host -Prompt "<"; Write-Host "You entered $shell"}
Personally, I like to put commands on separate lines to make it easier to read.
while ($true) {
$shell = Read-Host -Prompt "<"
Write-Host "You entered $shell"
}