Как решить синтаксическую ошибку оператора Linux If-Else? - PullRequest
1 голос
/ 21 марта 2020

Я пытаюсь проверить, существует ли каталог внутри оператора case-control или нет. Но он выдает ошибку в выражении 'then' .

case $choice in
1)echo "Enter directory name: "
  read dname
  mkdir $dname
  if[-d "$dname"]
  then
     echo "$dname directory already exists."
  else
     echo "$dname directory successfully created."
  fi
  read
  ;;

сообщение об ошибке:

uan.sh: line 13: syntax error near unexpected token `then'
uan.sh: line 13: `  then'

1 Ответ

2 голосов
/ 21 марта 2020

Анализатор видит then вне оператора if, потому что у вас нет ключевого слова if в командной позиции. У вас есть слово if[-d, которое анализатор принимает как обычное имя команды; синтаксический анализатор не знает или не заботится о том, существует ли команда на самом деле.

Пробелы важны:

if [ -d "$dname" ]

Скобки должны напоминать вам синтаксис, но, вероятно, вызвали больше беда, чем они когда-либо спасли. [ - это команда, и она требует ] в качестве последнего аргумента. Использование имени test намного проще и не дает вам повода думать, что скобки как-то особенные для синтаксического анализатора:

if test -d "$dname"
...