Сравнение строк не работает в сценарии оболочки - PullRequest
1 голос
/ 17 апреля 2011

Я написал простой сценарий оболочки для автоматизации работы. По сути, скрипт ищет все файлы в текущем пути, и если файл является указанным, он выполняет некоторые действия. Ниже приведены соответствующие строки ---

#!/bin/bash
for i in `ls *`
do
if [$i =="ls.sh"] 
then .... //do something
fi
done

Однако сравнение строк в строке 3 не работает, и я получаю это при запуске сценария -

./ls.sh: line 3: [scripth.sh: command not found
./ls.sh: line 3: [scripth.sh~: command not found
./ls.sh: line 3: [test.sh: command not found

Какую коррекцию нужно сделать?

Ответы [ 5 ]

3 голосов
/ 17 апреля 2011

Прежде всего, не используйте ls, как это.Это сойдет с ума, если в ваших файлах есть пробелы!Используйте расширение оболочки.Затем вы можете использовать case/esac для сравнения строк.(или если / еще)

for file in *
do
  case "$file" in
    "ls.sh" ) echo "do something"
     ;;
  esac
done
2 голосов
/ 17 апреля 2011

Есть несколько проблем.

В строке 1 вы не делаете то, что думаете. Вы должны поставить кавычку вокруг ls *:

for i in `ls *`

Это будет проходить через все файлы, которые перечислены в текущем каталоге. Ваша строка не будет запускать никаких команд, но вместо этого она будет использовать *, чтобы получить все файлы, а ваш список будет содержать слово "ls" в начале.

попробуйте это из командной строки:

echo ls *
echo `ls *`

Вы можете просто захотеть сделать:

for i in *

Вторая проблема. Поставьте пробелы в квадратных скобках:

[ $i == "ls.sh" ]

Пробелы необходимы.

Третья проблема. Используйте один = для сравнения строк

[ $i = "ls.sh" ]
1 голос
/ 17 апреля 2011

Использование: if [ "$i" = "ls.sh" ] - обратите внимание на пробелы.

0 голосов
/ 18 апреля 2011

Если вы хотите проверить только существующий файл, вы можете сделать это прямо в оболочке.

if [ -e ls.sh ]
then 
  # ... do something
fi
0 голосов
/ 17 апреля 2011

Вы не включили пробел после ==, поэтому ваш код должен быть:

#!/bin/bash
for i in `ls *`
do
    if [ $i == "ls.sh" ] 
    then 
        //do something
    fi
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...