整数表达式和一元运算符错误

整数表达式和一元运算符错误

我建立一个程序并在 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: 预期为一元运算符

有人能帮忙检查一下吗?非常感谢你的帮助。提前谢谢。

答案1

使用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)$ 

答案2

$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. 删除了第一行重复的 shebang
  2. k$a和中删除非数字$b
  3. 修复了 if 语句。在关闭方括号之前需要一个空格。

重要的:$a$b必须$size全部只包含数字才能使比较正常进行。

相关内容