Как сравнить две строки (от ввода данных пользователем) в сценарии удара

Здесь прибывает мой сценарий, я знаю, что делаю что-то не так, поэтому помогите мне!

#!/bin/bash
# Description of the script

echo "Enter first word "
read test1
echo "Enter second word "
read test2

cmp $test1 $test2 > error

total=`wc -c error | cut -f 7 -d " "`
echo $total

if [ $total -eq 0 ]
then
        echo "Both words contents are same"else
        echo "Both words contents are not same"
fi
0
задан 30 November 2015 в 02:46

3 ответа

Почему использование cmp? Вы уже используете условное выражение удара позже в Вашем сценарии, таким образом, Вы могли выгрузить cmp. Условное выражение в качестве примера:

if [ "$test1" != "$test2" ]; then
     # not equal
else
     # equal
fi

Другие операторы сравнения в ударе.

1
ответ дан 30 September 2019 в 02:28

В дополнение к ошибке использования cmp для сравнения строк, где это только сравнивает файлы, у Вас есть проблемы, что Вы на самом деле вычисляете длину сообщения об ошибке от cmp и извлекаете имя файла, не счетчик символов, от вывода от wc. Все вычисление было бы намного более изящным без временного файла; при использовании временного файла необходимо вычистить его после использования его.

, Если Вы действительно хотели видеть количество различия между двумя строками, возможно, передайте их wdiff вместо этого.

Вот пересмотренная версия:

#!/bin/bash
# Note absence of boilerplate comment

read -p "Enter first word: " test1   # Note use of read -p
read -p "Enter second word: " test2

# Note use of wdiff
# Note proper quoting of strings!  This is important
if report=$(wdiff -s123 <(echo "$test1") <(echo "$test2")); then
    echo "Strings are equal"
else
    echo "Strings differ"
    echo "$report"
fi

Как в стороне, основная идиома с wc должна перенаправить вход в него; тогда, это не печатает имя файла, таким образом, Вы не должны постобрабатывать его. И lo, это также устраняет необходимость временного файла.

total=$(cmp one two | wc -c)
1
ответ дан 30 September 2019 в 02:28

Если Вы не должны использовать cmp, можно использовать [ ] для сравнения:

if [ "$test1" = "$test2" ]
then
        echo "Both words contents are same"
else
        echo "Both words contents are not same"
fi

cmp сравнивает файлы. Если, скажем, Вы вошли foo для test1 и bar для test2, затем это сравнит два названные файла foo и bar, который является, вероятно, не, что Вы предназначили.

Кроме этого, этой строки:

echo "Both words contents are same"else

совпадает с:

echo "Both words contents are sameelse"

Необходимо или поместить else на другой строке или помещенном a ; перед ним:

echo "Both words contents are same"
else
# or
echo "Both words contents are same"; else
2
ответ дан 30 September 2019 в 02:28

Другие вопросы по тегам:

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