Это:
test.sh: line 22: syntax error: unexpected "(" (expecting "fi")
не является сообщением об ошибке, о котором сообщает bash
. Это то, о чем сообщает оболочка Almquist и ее производные, такие как dash
или busybox sh
:
$ grep -z '(expecting' /bin/dash
%s unexpected (expecting %s)
Оболочки на основеash
-не поддерживают массивы, этот скрипт предназначен дляbash
(3.2 или выше ), на что указывает #!/bin/bash
she -bang, хотя он больше похож на смесь между bash
, zsh
и ksh93
, если он предназначен для проверки четырехзначных -адресов IPv4, где части ограничены 3 десятичными цифрами (в bash
, это приведет к некоторым ошибкам о 008.008.008.008
, например ).
Со стандартным синтаксисом POSIX sh
, который распознается как dash
, так и bash
, вы могли бы сделать вместо этого:
valid_ip() (
IFS=.
set -o noglob
set -- $1''
[ "$#" -eq 4 ] || exit
for i do
case $i in
("" | *[!0-9]*) exit 1;;
esac
[ "$i" -le 255 ] || exit
done
)
Когда вы запускали sysbench
запуск в фоновом режиме, вы немедленно получали новое приглашение.Это видно из вашего скриншота.
Процесс sysbench
, запущенный в фоновом режиме, перед завершением производил вывод в терминале, в результате чего ваше приглашение было перезаписано.
Чтобы получить новое приглашение, просто нажмите Enter один раз.
То же самое происходит с ls -la &
, т. е. вы запускаете утилиту в фоновом режиме, и эта утилита перезаписывает приглашение, которое вы получили сразу после ее запуска. Опять же, просто нажав Enter , вы снова отобразите подсказку.
Если это повторяющаяся проблема для вас, и если вам не нужен терминал ни для чего другого во время работы sysbench
, то просто не запускайте sysbench
в фоновом режиме (удалите &
в конце команды ).