2017-12-18 411 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 
    
相關問題