Я отредактировал ваш вопрос, чтобы сделать отступ для кода. Гораздо проще читать, когда вы делаете отступы в операторах while и if.
Строка, на которую вы жалуетесь, -
if [$pid == $tmp]
Это неверно по нескольким причинам, уже указанным. В отличие от других языков программирования, BASH использует один знак равенства, и вы должны оставить пробел в квадратных скобках. Квадратная скобка является командой и должна быть отделена пробелами. Это псевдоним для команды test
. Эта строка должна выглядеть так:
if [ $pid = $tmp ]
Теперь =
- это сравнение строк, если вы проводите числовое сравнение, вы должны использовать -eq
вместо:
if [ $pid -eq $tmp ]
И, поскольку [
является псевдонимом команды test
, его можно записать так (но редко бывает):
if test $pid -eq $tmp
Тем не менее, он показывает, почему вам нужно пространство вокруг квадратных скобок.