我的脚本有问题。我不知道该如何解决。
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行:[:=:期望一元运算符
怎么了?
答案 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