2017-03-10 85 views
0

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

我也嘗試過「聲明-i配置」在頂部,但也沒有工作。花了一天,沒有運氣到目前爲止。

+0

所有這些檢查應該工作。請創建一個演示問題的[mcve]。 –

+0

'$ config'很可能包含不可見的空白,就像'\ r'回車一樣。試試'cat -A <<<「$ config」'來檢查。 'file/mnt/writable/config.txt'是否報告該文件具有DOS行結束符? –

+0

假設你正在使用bash,首先要做的事情是在腳本開始處設置-xv並檢查實際設置和測試的值。您將變量設置爲整行,因此任何其他空白也將被分配給變量,因此它不會等於「1」。我建議使用read來獲取變量中的值,然後使用(())對數字1進行測試: - ((config == 1)),因爲數字以這種方式進行測試,並明確表示您是進行算術測試。 – grail

回答

0

因爲你有你的第一線空間或選項卡(我認爲)

因此,如果您打印使用

echo $config 

它將正確打印1,但是當你使用它,如果條件,它可能無法正常工作,你的願望......

所以我建議你應該嘗試在你的腳本之後,

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

和你所有的條件都可以。

+0

嗨Prem,非常感謝,你的訣竅非常出色,所有的陳述結束了工作。 – Peter

+0

我很高興!保持腳本@Peter –

+0

接受這個答案,如果它是正確的! –

-1

可以使用-eq選項測試整數相等。

做男人測試關於是否條件的更多細節。

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

的確如此,但字符串檢查在這裏也可以正常工作。 –