Ошибка на целом выражении и унарном операторе

Я создаю программу и выполняюсь в в терминале Ubuntu. Ниже код:

#!/bin/sh
#!/bin/bash

echo "File size you want to archive"
read size

echo "File name to archive"
read name

echo "Path to archive"
read path

echo "Size is: $size filename is: $name path is: $path"

a=99k
b=100k

if [ $size -lt $a] #line 19
then
echo "Refused to archive"
elif [ $size -lt $b] #line 22
then 
find $path -type f -size +$size | tar cvzf ~/$name.tar.gz
else
echo "Wrong input"
fi

когда я выполняю и вставляю вход, существует некоторая ошибка на строке 19 и 22 который высказывание

./filesize.sh: строка 19: [: 100k: целое выражение ожидается

./filesize.sh: строка 22: [: 100k: целое выражение ожидается

и когда я пытаюсь использовать "=" и"> =", знак также это не работало с ошибкой

./filesize.sh: строка 19: [: 100k: унарный оператор ожидается

./filesize.sh: строка 22: [: 100k: унарный оператор ожидается

может кто-то помогать проверить это. Цените свою справку.Заранее спасибо.

0
задан 7 February 2020 в 06:02

2 ответа

Использовать shellcheck: (Читайте man shellcheck)

walt@bat:~(0)$ cat >foo.sh
#!/bin/sh
#!/bin/bash

echo "File size you want to archive"
read size

echo "File name to archive"
read name

echo "Path to archive"
read path

echo "Size is: $size filename is: $name path is: $path"

a=99k
b=100k

if [ $size -lt $a] #line 19
then
echo "Refused to archive"
elif [ $size -lt $b] #line 22
then 
find $path -type f -size +$size | tar cvzf ~/$name.tar.gz
else
echo "Wrong input"
fi
walt@bat:~(0)$ shellcheck foo.sh

In foo.sh line 18:
if [ $size -lt $a] #line 19
^-- SC1009: The mentioned parser error was in this if expression.
   ^-- SC1073: Couldn't parse this test expression.
                  ^-- SC1020: You need a space before the ].
                  ^-- SC1072: Missing space before ]. Fix any mentioned problems and try again.

walt@bat:~(1)$ 
1
ответ дан 20 February 2020 в 22:58

Содержание $a и $b содержите строки, как определено на строке 15 соответственно 16. Можно только сравнить целочисленные значения с -lt оператор.

Попробуйте это вместо этого:

#!/bin/bash

# only enter digits here
echo "File size (in kb) you want to archive" 
read size

echo "File name to archive"
read name

echo "Path to archive"
read path

echo "Size is: $size filename is: $name path is: $path"

a=99
b=100

if [ $size -lt $a ]; then
  echo "Refused to archive"
elif [ $size -lt $b ]; then
  find $path -type f -size +$size | tar cvzf ~/$name.tar.gz
else
  echo "Wrong input"
fi

Что я сделал:

  1. удаленная дублированная хижина в строке один
  2. удаленная нецифра k от $a и $b
  3. зафиксированный оператор "if". Вам нужно пространство прежде, чем закрыть квадратные скобки.

Важный: $a, $b и $size должен все содержать только цифры, чтобы заставить сравнение работать правильно.

0
ответ дан 20 February 2020 в 22:58

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

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