为什么不起作用?如果bash中的指令

时间:2019-11-26 22:32:39

标签: linux bash

我的脚本有问题。我不知道该如何解决。

location=$(locate wpa_supplicant | sed -n '2p')
x=$(ls -l /etc | grep "su" | sort | head -n1 | cut -d " " -f13)
y=$(du -h $location)

a=$(test -f $location)
b=$(test -b $location)

if [ $a = 0 ] || [ $b = 0 ]; then
    echo "This is file"
else
    echo "This is not file"
fi

我启动了此脚本,但出现错误:

  

./ ko.ssh:第18行:[:=:期望一元运算符

     

./ ko.ssh:第18行:[:=:期望一元运算符

怎么了?

1 个答案:

答案 0 :(得分:2)

$a$b均为空。因此,外壳得到的是

if [ = 0 ] || [ = 0 ]

会产生您遇到的错误。用双引号将变量

[ "$a" = 0 ]

使外壳可见

if [ "" = 0 ]

两个变量均为空的原因是赋值

a=$(test -f $location)

$(...)是命令替换,它返回附带命令的输出。但是test不会输出任何内容,您会对它的返回值感兴趣。

test -f $location
a=$?
test -b $location
b=$?

或直接使用条件

if [ -f "$location" ] || [ -b "$location" ] ; then

请注意双引号!

如果您使用的是bash并且不关心可移植到其他shell的问题,则可以切换到不需要引号的双方括号,并且可以自己处理逻辑运算符:

if [[ -f $location || -b $location ]] ; then