變數中有變數作判斷該如何作? (eval) - Linux

Lily avatar
By Lily
at 2017-08-25T18:38

Table of Contents


小弟在寫測試script時, 在使用eval上遇到了一些問題, 想請教:

因為Cmp${Num}_F代入的數值是小數, 所以又增加了bc來輔助, Code如下:

需求是判斷Cmp${Num}_F是否介於LOWER與UPPER之間,

但是在變數$Cmp${Num}_F放到if裡面的時候出了錯誤, 請問我該怎麼在if裡面使用這類型的變數?

##COMPARISON

Amount=5
UPPER=1234.567
LOWER=12.3456

for ((Num=1 ; Num<Amount; Num++))
do
eval Cmp${Num}_F=$(cat xxx.log |grep Cmp${Num}_F |awk 'print $2')
done

for (( Num=1 ; Num<$Amount ; Num++ ))
do
if [ `echo "`$Cmp${Num}_F` > $UPPER"|bc` -eq 1 ] || [ `echo "`$Cmp${Num}_F` < $LOWER"|bc` -eq 1 ]; then
echo " Data in Range `eval echo '$'Cmp${Num}_F` Front: ($LOWER ~ $UPPER) "
else
echo " Data Not in Range"
fi
done

--
Tags: Linux

All Comments

Iris avatar
By Iris
at 2017-08-30T06:35
變數用雙引號包起來 外層用單引號 ``改用$() 這樣試試?
Carolina Franco avatar
By Carolina Franco
at 2017-09-03T13:07
看不懂問題,用猜的. https://pastebin.com/5UHVFu7Z
Sierra Rose avatar
By Sierra Rose
at 2017-09-04T19:21
隨便看,但 > 在test []中應該要用-lt。然後是在單行多次用
``時,一律用$()取代
Hamiltion avatar
By Hamiltion
at 2017-09-06T23:51
請問B大的意思是if [`echo "$(Cmp${Num}_F)"|bc` -eq 1]
Margaret avatar
By Margaret
at 2017-09-07T08:02
這樣嗎?
Victoria avatar
By Victoria
at 2017-09-08T02:06
這樣改的話會出現 Cmp1_F: command not found
(standard_in) 1: syntax_error
Zora avatar
By Zora
at 2017-09-08T14:56
另外, OSD大的例子是變數$Num, 好像變成複合式變數用法上
Linda avatar
By Linda
at 2017-09-09T10:19
會變得不太一樣 , Cmp${Num}_F 是先前用eval宣告給值
Eartha avatar
By Eartha
at 2017-09-10T23:20
請問你加上 Cmp 和 _F 是做甚麼用途? 不懂你的問題..
Joseph avatar
By Joseph
at 2017-09-14T20:10
因為我希望變數是像 Cmp1_F Cmp2_F Cmp3_F....這樣下去的
Olga avatar
By Olga
at 2017-09-16T01:53
每一次迴圈Cmp${Num}_F變數代進來的小數值都會不同
Ina avatar
By Ina
at 2017-09-19T17:21
可是你沒 宣告 這些變數阿 : Cmp1_F Cmp2_F Cmp3_F
Dorothy avatar
By Dorothy
at 2017-09-20T16:20
其實實際上的變數是更煩人的 Cmp_raw${ID}_col${Num}_F
Kelly avatar
By Kelly
at 2017-09-24T11:04
哈...的確 因為我覺得那個宣告不是問題的重點XD
Oscar avatar
By Oscar
at 2017-09-25T06:18
我更改一下內文好了 等我一下
Ida avatar
By Ida
at 2017-09-29T11:46
https://pastebin.com/ 在這邊放上程式碼,比較好解.
Mason avatar
By Mason
at 2017-10-02T13:06
https://pastebin.com/X0EGcxPH 像這樣嗎? 第一次用
Eartha avatar
By Eartha
at 2017-10-05T20:58
xxx.log 呢? 如果log太多,自己簡化一下.
Sierra Rose avatar
By Sierra Rose
at 2017-10-07T21:52
https://pastebin.com/745Weu6K xxx.log 簡化大概長這樣
Damian avatar
By Damian
at 2017-10-10T03:16
https://pastebin.com/ATYCtf8N 稍微修正一下eval
Isla avatar
By Isla
at 2017-10-12T15:54
參考看看這個答案 https://pastebin.com/EU4w0T8H
Isabella avatar
By Isabella
at 2017-10-14T00:58
樓上大大的方式可行喔! 不過這就代表if[]裡面不能使用這類
型的疊加變數了 ~"~a 是嗎?
Mia avatar
By Mia
at 2017-10-16T04:01
if [ ... ] 裡面可以使用疊加變數,
參考看看 https://pastebin.com/pJDgjfG4
George avatar
By George
at 2017-10-16T09:55
完全不用eval版本, https://pastebin.com/YdPYphJ6
Caroline avatar
By Caroline
at 2017-10-16T20:34
很多大大都不建議用eval,
Hazel avatar
By Hazel
at 2017-10-21T08:21
參考最後的推文 https://goo.gl/e5B3jz
Jacob avatar
By Jacob
at 2017-10-21T14:00
沒想到O大後續還有提供正解! 已試過感謝 (跪拜

請教export用法

Bennie avatar
By Bennie
at 2017-08-24T02:19
我系統是unix, 因為我有幾10台server, 想利用telnet輸入指令關閉螢幕保護程式。 Script 寫法是: export DISPLAY=and#39; :0and#39; xset s off 這可存成sh執行,有效 但我想直接使用telnet到機台, 輸入那兩個指令 確險示export ...

關於筆電的fn鍵

Mason avatar
By Mason
at 2017-08-22T14:56
抱歉新手問題 我的筆電是Dell 15 7567 之前因為都用外接鍵盤 現在用內建鍵盤才發現 很多在f1到f12需要按fn鍵才會出現的功能 e.g 螢幕亮度、鍵盤背光、音量 直接按f1-f12沒有同時按fn鍵也會作用 想問一下這種狀況要怎處理? - ...

請問一個sed處理文字檔的的寫法

Mia avatar
By Mia
at 2017-08-21T17:02
請問一個問題,我有一個文字檔0.txt如下: 123,and#34;123,123and#34;,789,876, 123,456,789,876, 123,456,789,123,and#34;456,456and#34;, 111,222,333,444,555 請問我要如何使用sed指令,去掉雙引號以 ...

網頁開不起來

Margaret avatar
By Margaret
at 2017-08-21T16:33
安安,大家好 在測試網頁的時候,發現有些網頁能開啟 假設:pchome 但是像google 就開不起來 顯示 your connection is not secure yahoo 顯示 secure connection Failed 不知道這是什麼問題呢? ...

motion跟sh跟py還有telegram bot的問題

Zora avatar
By Zora
at 2017-08-21T12:58
小弟我在Rpi上裝了 motion(搭配logetic C310)當監視系統 主要是照這篇做的 https://goo.gl/A8Phe1 (https://blog.gtwang.org/ 的網站) 在motion 的 on_picture_save 事件呼叫一個sh檔 #!/bin/bash # ...