我有一个简单的bash脚本。
# Which display is HDMI ?
for i in `seq 0 $displayLoopCounter`
do
name=$(adb shell cat /sys/devices/platform/omapdss/display$i/name)
if [ "$name"=="hdmi" ] ; then
echo "$name"
hdmiDisplay="display$i"
fi
done
我的scipt的输出:
dvi
hdmi
我正在使用 bash myscript.sh
运行脚本display0是dvi
display1是hdmi
答案 0 :(得分:2)
这是问题:[ "$name"=="hdmi" ]
- 条件表达式根据它看到的参数数量进行某些测试。如果只有一个参数,就像你在这里一样,[
如果字符串非空则返回true - 这里,无论$ name的值如何,表达式"$name"=="hdmi"
将始终为非空。
你需要
if [ "$name" == hdmi ]; then ...
空白在shell语言中非常重要。
答案 1 :(得分:0)
您的问题在于==
行中的if
周围没有空格。这使得它成为单个参数表达式,bash
联机帮助页指出:
1参数:当且仅当参数不为null时,表达式才为真。
如果您运行以下脚本(==
周围没有空格):
#!/bin/bash
echo Hello >myfile0
echo fileData >myfile1
counter=1
for i in `seq 0 $counter`
do
name=$(cat myfile$i)
if [ "$name"=="fileData" ]; then
echo $name
fi
done
rm myfile[01]
您会看到输出包含Hello
和fileData
两行。将空格放入,您将只获得fileData
,因为相同的联机帮助页指出:
3个参数:如果第二个参数是上面在CONDITIONAL EXPRESSIONS下列出的二元条件运算符之一,则表达式的结果是使用第一个和第三个参数作为操作数的二进制测试的结果。