Здесь прибывает мой сценарий, я знаю, что делаю что-то не так, поэтому помогите мне!
#!/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
Почему использование cmp? Вы уже используете условное выражение удара позже в Вашем сценарии, таким образом, Вы могли выгрузить cmp. Условное выражение в качестве примера:
if [ "$test1" != "$test2" ]; then
# not equal
else
# equal
fi
В дополнение к ошибке использования 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)
Если Вы не должны использовать 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