我建立一个程序并在 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
我做了什么:
- 删除了第一行重复的 shebang
k
从$a
和中删除非数字$b
- 修复了 if 语句。在关闭方括号之前需要一个空格。
重要的:$a
和$b
必须$size
全部只包含数字才能使比较正常进行。