BASH - 从文件中获取数字并使用它

时间:2017-12-18 13:32:06

标签: bash shell sh

我有一个看起来像这样的test.txt文件:

flask=1.0.1
control=1.0.1
device=1.0.1

现在,我想创建一个if语句,如果flask = 1.0.1,则执行某些操作,如果flash = 1.0.1_hotfix则执行其他操作。

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

有人能告诉我一个解释如何操作的文档吗?这真的很简单。

谢谢大家!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

我理解你了吗?

[root@212-24-57-104 Build]# cat 1
flask=1.0.1
control=1.0.1
device=1.0.1
[root@212-24-57-104 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

答案 3 :(得分: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