Похожие вопросы

Терминал, начинающийся с сообщения" no such file or directory: "в OS X
Как копировать файлы с помощью ditto с обратными косыми чертами в именах файлов
grep: выводить конкретную строку после матча
Как переименовать несколько файлов в bash (не по шаблону, а с запросом на каждое новое имя)?
Как поставить в очередь несколько файлов для копирования на Mac?
Как скопировать несколько файлов и переместить их в несколько папок с помощью терминала для Mac
Комментарии в многострочной команде bash
- bash: ls: команда не найдена в терминале Mac OS X
Удаленная команда PuTTY, содержащая цикл while
Где хранить скрипты bash, которые все пользователи могут выполнять в Debian?
запуск "crontab-e" отказано в разрешении?
Убийство всех экземпляров Chrome в командной строке?
номер команды bash (#) эквивалентен в zsh
Одна история SSH для нескольких сеансов?
Сочетания клавиш Bash, использующие Alt, не работают на Mac

Сценарий Bash завершается ошибкой " синтаксическая ошибка в условном выражении"

Я новичок в bash сценариев, и я просто хочу сделать простую вещь, но все, что я читаю в интернете, кажется, не работает для меня!

Итак, у меня есть вот этот скрипт:

  #!/bin/bash
  if [[  = "32"]]
  then
      mv config.h config64.h
      mv config32.h config.h
      mv Makefile Makefile64
      mv Makefile32 Makefile
      echo "READY FOR 32 BITS!"
  elif [[  = "64" ]]
  then
      mv config.h config32.h
      mv config64.h config.h
      mv Makefile Makefile32
      mv Makefile64 Makefile
      echo "READY FOR 64 BITS!"
  fi

и я получаю ошибку:

./switch-bits.sh: line 3: syntax error in conditional expression
./switch-bits.sh: line 4: syntax error near `then'
./switch-bits.sh: line 4: `then'

Так что мои руки брошены в воздух здесь... что случилось?

5
задан slhck
источник

2 ответов

чтобы немного подробнее прокомментировать мой комментарий, Я бы предложил изменить ваш сценарий следующим образом:

#!/bin/bash
if [[  = "32" ]]
then
  rm config.h
  ln -s config32.h config.h
  rm Makefile
  ln -s Makefile32 Makefile
  echo "READY FOR 32 BITS!"
elif [[  = "64" ]]
then
  rm config.h
  ln -s config64.h config.h
  rm Makefile
  ln -s Makefile64 Makefile
  echo "READY FOR 64 BITS!"
fi

и короче (?умнее) версия:

#!/bin/bash
rm config.h
ln -s config.h config.h
rm Makefile
ln -s Makefile Makefile
echo "READY FOR  BITS!"

Примечание - было бы неплохо, если бы вы сделали более короткую версию, включить некоторую проверку ошибок-т. е. убедитесь, что вход либо "32", либо "64", а не что-то еще. Я оставлю это на ваше усмотрение...

8
отвечен Floris 2013-04-23 14:16:47
источник

нужен пробел между "32" и ]]

7
отвечен Uwe 2013-04-23 05:43:34
источник

Другие вопросы bash linux script