2017-03-10 42 views
0

我有一个config.txt的文件,其中所述第一线具有编号1,我需要阅读本以及基于所述数目是否是1或2或3等等提取值

做某些任务

问题是我无法测试该配置值,下面的if语句都没有工作,我尝试了更多的差异。

config=$(head -n 1 /mnt/writable/config.txt) #grabs vale from file 
echo $config  #prints 1 

但是,下面的if语句不回显任何内容。

if [[ "$config" = "1" ]]; 
then 
    echo "is a 1"; 
fi 

if [[ "$config" == "1" ]]; 
then 
    echo "is a 1"; 
fi 

if [[ "$config" = 1 ]]; 
then 
    echo "is a 1"; 
fi 

if [ $config = 1 ]; 
then 
    echo "is a 1"; 
fi 

我也尝试过“声明-i配置”在顶部,但也没有工作。花了一天,没有运气到目前为止。

+0

所有这些检查应该工作。请创建一个演示问题的[mcve]。 –

+0

'$ config'很可能包含不可见的空白,就像'\ r'回车一样。试试'cat -A <<<“$ config”'来检查。 'file/mnt/writable/config.txt'是否报告该文件具有DOS行结束符? –

+0

假设你正在使用bash,首先要做的事情是在脚本开始处设置-xv并检查实际设置和测试的值。您将变量设置为整行,因此任何其他空白也将被分配给变量,因此它不会等于“1”。我建议使用read来获取变量中的值,然后使用(())对数字1进行测试: - ((config == 1)),因为数字以这种方式进行测试,并明确表示您是进行算术测试。 – grail

回答

0

因为你有你的第一线空间或选项卡(我认为)

因此,如果您打印使用

echo $config 

它将正确打印1,但是当你使用它,如果条件,它可能无法正常工作,你的愿望......

所以我建议你应该尝试在你的脚本之后,

config=$(head -n 1 /mnt/writable/config.txt | tr -d '[:space:]') 

和你所有的条件都可以。

+0

嗨Prem,非常感谢,你的诀窍非常出色,所有的陈述结束了工作。 – Peter

+0

我很高兴!保持脚本@Peter –

+0

接受这个答案,如果它是正确的! –

-1

可以使用-eq选项测试整数相等。

做男人测试关于是否条件的更多细节。

if [ $config -eq 1 ]; then echo "config is 1"; else echo "config is not 1"; fi 
+0

的确如此,但字符串检查在这里也可以正常工作。 –