Bash 从文件中提取值以输入IF语句

Bash 从文件中提取值以输入IF语句,bash,shell,Bash,Shell,我有一个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

我有一个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

我还在顶部尝试了“declare-I config”,但也没有成功。花了一天的时间,但到目前为止运气不好

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

进行人工测试,了解有关if条件的更多详细信息

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

因为你的第一行有空格或制表符(我想)

所以如果你用

echo $config
它将正确打印1,但当您在if条件下使用它时,它可能无法按您的意愿工作

所以我建议你应该试着在你的剧本中

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

所有的if条件都可能有效。

所有这些检查都应该有效。请创建一个演示此问题的。很可能
$config
包含不可见的空格,如
\r
回车符。尝试
cat-A假设您正在使用bash,首先要做的是将set-xv放在脚本的开头,并检查实际设置和测试的值。您正在将变量设置为整行,因此任何额外的空白也将分配给变量,因此它将不等于“1”。我建议使用read获取变量中的值,然后使用(())对数字1:-((config==1))进行测试,因为数字是通过这种方式进行测试的,这表明您正在执行算术测试。嗨,John,感谢您提供的信息,是空白导致了我所有的问题。没错,但是字符串检查在这里也同样有效。嗨,Prem,非常感谢,你的技巧非常有效,所有的语句都成功了。