2017-12-18 498 views
0

我有一个test.txt文件看起来像这样:BASH - 从一个文件中获取数,并用它

flask=1.0.1 
control=1.0.1 
device=1.0.1 

现在,我想创建一个if语句,如果瓶= 1.0.1,做如果flash = 1.0.1_hotfix做了别的事情。

我试过grep -iFq,但没有运气,我是新手,也是编程。

任何人都可以告诉我一个文档,解释如何做到这一点?这真的很简单。

谢谢大家!

回答

1

grep很好,只是注意到flask=1.0.1flask=1.0.1_hotfix的一个子串,所以你需要做全字符串比较或者检查字符串结束。

flask=$(grep ^flask= test.txt) 
if [ "$flask" == flask=1.0.1 ] ; then 
    ... 
elif [ "$flask" == flask=1.0.1_hotfix ] ; then 
    .... 
fi 
0

我已经理解正确吗?

[[email protected] Build]# cat 1 
flask=1.0.1 
control=1.0.1 
device=1.0.1 
[[email protected] Build]# cat ez.sh 
#!/bin/bash 
a=($(cat 1)) 
for ver in "${a[@]}" 
do 
    if [ $(echo "${ver}" | awk -F= '{print $NF}') == "1.0.1" ] 
    then 
     echo "Do something virh $ver" 
    else 
     echo "Do anything else with $ver" 
    fi 
done 
+0

填充'了'由于[分词](https://www.gnu.org/software/bash/manual/bash.html#Word-Splitting)和[文件名扩展],这样的数组是有风险的, (https://www.gnu.org/software/bash/manual/bash.html#Filename-Expansion)。这是更安全的:'mapfile -t a

4

随着bashif

source test.txt 

if [[ $flask == 1.0.1 ]]; then 
    echo "do something" 
fi 

if [[ $flask == 1.0.1_hotfix ]]; then 
    echo "do something else" 
fi 

或用bashcase

source test.txt 

case $flask in 
1.0.1) 
    echo "do something" 
    ;; 
1.0.1_hotfix) 
    echo "do something else" 
    ;; 
esac 

或者在更密集的演讲:

source test.txt 

case $flask in 
     1.0.1) echo "do something" ;; 
    1.0.1_hotfix) echo "do something else" ;; 
esac 
+3

注意不谨慎的(或新手):这将执行'test.txt'中的任何命令。为此,'test.txt'必须是有效的shell代码,并且不包含任何带有不良副作用的命令。 –

+0

@WilliamPursell:谢谢你的有用评论! – Cyrus

0

其他几个选项:

  1. 使用grep来获取值

    flask_value=$(grep -oP '^flask=\K.*' test.txt) 
    case $flask_value in 
        1.0.1) ... ;; 
        # etc 
    esac 
    
  2. 迭代只bash的文件了:

    while IFS="=" read var value; do 
        if [[ $var == "flask" ]]; then 
         case $value in 
          1.0.1) ... ;; 
          # etc 
         esac 
        fi 
    done < test.txt 
    
相关问题