“[: s: целое выражение ожидало” ошибку в сценарии Bash

Этот сценарий Bash производит, несколько "целое выражение ожидали" ошибки, когда выполнено:

echo "Enter string"
read str
len=`echo $str|wc -c`
len=`expr $len - 1`
i=0
j=1
l=`expr $len / 2`
while [ $i -le $l ]
do
start=`echo $str|cut -c $j`
end=`echo $str|cut -c $len`
echo $start
echo $end
if [ $start -ne $end ]
then 
echo "not palindrome"
exit 0
fi
len=`expr $len - 1`
i=`expr $i + 1`
j=`expr $j + 1`
done
echo "string is palindrome"

Это - вывод, включая ошибки:

Enter string                                                                                                                  

saurabh                                                                                                                       
s                                                                                                                             
h                                                                                                                             
main.bash: line 18: [: s: integer expression expected                                                                         
a                
b                                                                                                                             
main.bash: line 18: [: a: integer expression expected                                                                         
u                                                                                                                             
a                                                                                                                             
main.bash: line 18: [: u: integer expression expected                                                                         
r
r                                                                                                                             
main.bash: line 18: [: r: integer expression expected                                                                         
string is palindrome 

Что не так в сценарии?

-4
задан 18 December 2019 в 20:50

1 ответ

Вместо того, чтобы использовать внешние команды как wc, expr, cut, Вы можете и должны использовать , колотят внутреннюю обработку строк команды. Кроме того, Ваш сценарий подходит использовать арифметические операции удара .

Так, я пересмотрел Ваш сценарий как показано ниже. См. также мои комментарии в сценарии.

#!/bin/bash

echo -n "Enter a string > "
read str
#len=`echo $str|wc -c`
#len=`expr $len - 1`
# You could use just `echo -n ...` and skipped the subtraction.
# But, for a better alternative use this:
let len=${#str}
let i=0
let j=1
#l=`expr $len / 2`
let l=len/2
while (( i < l )) ; do
  #start=`echo $str|cut -c $j`
  start=${str:j-1:1}
  #end=`echo $str|cut -c $len`
  end=${str:len-1:1}
  echo "$start" '=?' "$end"
  if [[ "$start" != "$end" ]] ; then 
    echo "Not a palindrome"
    exit 0
  fi
  #len=`expr $len - 1`
  let len=len-1
  #i=`expr $i + 1`
  let i++
  #j=`expr $j + 1`
  let j++
done
echo "String is a palindrome"

Этот сценарий может все еще быть оптимизирован немного далее. Это оставляют как осуществление для Вас! ☺

, обратите внимание, что при использовании символов неASCII в тестовой строке соответствующая локаль должна быть установлена. Например:

$ LANG=C.UTF-8 ./pal.sh 
Enter string > ΝΙΨΟΝΑΝΟΜΗΜΑΤΑΜΗΜΟΝΑΝΟΨΙΝ
Ν =? Ν
Ι =? Ι
Ψ =? Ψ
Ο =? Ο
Ν =? Ν
Α =? Α
Ν =? Ν
Ο =? Ο
Μ =? Μ
Η =? Η
Μ =? Μ
Α =? Α
String is a palindrome
$ LANG=C ./pal.sh 
Enter string > ΝΙΨΟΝΑΝΟΜΗΜΑΤΑΜΗΜΟΝΑΝΟΨΙΝ
� =? �
Not a palindrome
0
ответ дан 21 December 2019 в 23:31

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

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