Я создаю программу и выполняюсь в в терминале 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: унарный оператор ожидается
может кто-то помогать проверить это. Цените свою справку.Заранее спасибо.
Использовать 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)$
Содержание $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
Что я сделал:
k
от $a
и $b
Важный: $a
, $b
и $size
должен все содержать только цифры, чтобы заставить сравнение работать правильно.