我有一個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
,但沒有運氣,我是新手,也是編程。
任何人都可以告訴我一個文檔,解釋如何做到這一點?這真的很簡單。
謝謝大家!
我有一個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
,但沒有運氣,我是新手,也是編程。
任何人都可以告訴我一個文檔,解釋如何做到這一點?這真的很簡單。
謝謝大家!
grep很好,只是注意到flask=1.0.1
是flask=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
我已經理解正確嗎?
[[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
隨着bash
和if
:
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
或用bash
和case
:
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
注意不謹慎的(或新手):這將執行'test.txt'中的任何命令。爲此,'test.txt'必須是有效的shell代碼,並且不包含任何帶有不良副作用的命令。 –
@WilliamPursell:謝謝你的有用評論! – Cyrus
其他幾個選項:
使用grep
來獲取值
flask_value=$(grep -oP '^flask=\K.*' test.txt)
case $flask_value in
1.0.1) ... ;;
# etc
esac
迭代只bash的文件了:
while IFS="=" read var value; do
if [[ $var == "flask" ]]; then
case $value in
1.0.1) ... ;;
# etc
esac
fi
done < test.txt
填充'了'由於[分詞](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