banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix cho e hỏi chút về bash shell mới ạ  XML
  [Question]   cho e hỏi chút về bash shell mới ạ 11/02/2014 17:10:45 (+0700) | #1 | 279709
thuank51cc
Member

[Minus]    0    [Plus]
Joined: 13/01/2012 03:44:56
Messages: 26
Offline
[Profile] [PM]
Dear Ae forum!
Mình có 1 đoạn bash shell viết check loadavg và băng thông như dưới.
tuy nhiên đến đoạn check loadavg >=15 thì bào lỗi:
+ '[' 0.02 -ge 15 ']'
./checkserver.sh: line 12: [: 0.02: integer expression expected
+ '[' 48.00 -ge 960 ']'
./checkserver.sh: line 16: [: 48.00: integer expression expected
Lỗi này có lẽ do export 1 biến để lấy kết quả lệnh ko phải là kiểu int.
Mình ko biết phải sửa thế nào. cũng ko ép được kiểu trong bash shell
script của mình như dưới đây:

#!/bin/bash -vx
redis="/mnt/redis/redis-bash-cli"
redis_ip="127.0.0.1"
host="127.0.0.1"
export _loadavg=$(cat /proc/loadavg | awk '{ print $1 }');
export _net=$(vnstat -tr | grep tx| awk '{ print $2 }');

######check loadavg and net bandwidth######
if [ $_loadavg -ge 15 ] ;
then
$redis -h $redis_ip SET "$host" 1

elif [ $_net -ge 960 ] ;
then
$redis -h $redis_ip SET "$host" 1

else
$redis -h $redis_ip SET "$host" 0

fi
$redis -h $redis_ip GET "$host"

Bác nào biết xin chỉ giáo ạ
thanks so much!
[Up] [Print Copy]
  [Question]   cho e hỏi chút về bash shell mới ạ 11/02/2014 20:17:40 (+0700) | #2 | 279711
bino1810
Member

[Minus]    0    [Plus]
Joined: 10/02/2012 10:38:28
Messages: 61
Location: /home/cuonglm
Offline
[Profile] [PM]
Bash không có kiểu float, bạn có thể dùng bc để so sánh:

Code:
if (( $(bc <<< "$_loadavg >= 15") == 1 ))
then
    ....
elif (( $(bc <<< "$_net >= 960") == 1 ))
then
    ....
else
    ....
fi
There is more than one way to do it!
[Up] [Print Copy]
  [Question]   cho e hỏi chút về bash shell mới ạ 11/02/2014 20:17:40 (+0700) | #3 | 279712
bino1810
Member

[Minus]    0    [Plus]
Joined: 10/02/2012 10:38:28
Messages: 61
Location: /home/cuonglm
Offline
[Profile] [PM]
Bash không có kiểu float, bạn có thể dùng bc để so sánh:

Code:
if (( $(bc <<< "$_loadavg >= 15") == 1 ))
then
    ....
elif (( $(bc <<< "$_net >= 960") == 1 ))
then
    ....
else
    ....
fi
There is more than one way to do it!
[Up] [Print Copy]
  [Question]   cho e hỏi chút về bash shell mới ạ 11/02/2014 23:26:44 (+0700) | #4 | 279715
p.n.t
Member

[Minus]    0    [Plus]
Joined: 12/07/2012 12:16:07
Messages: 45
Offline
[Profile] [PM]
Sao ko trim đi dấu . rồi làm phép so sánh ko dễ hơn ah
[Up] [Print Copy]
  [Question]   cho e hỏi chút về bash shell mới ạ 12/02/2014 08:51:41 (+0700) | #5 | 279720
thuank51cc
Member

[Minus]    0    [Plus]
Joined: 13/01/2012 03:44:56
Messages: 26
Offline
[Profile] [PM]
Thanks bino1810!
Mình dùng bc như bạn bảo ok rsmilie.
hi p.n.t! dùng trim như thế nào bạn. mình đã thử cả expr r nhưng vẫn sai???
[Up] [Print Copy]
  [Question]   cho e hỏi chút về bash shell mới ạ 12/02/2014 11:29:29 (+0700) | #6 | 279728
bino1810
Member

[Minus]    0    [Plus]
Joined: 10/02/2012 10:38:28
Messages: 61
Location: /home/cuonglm
Offline
[Profile] [PM]

thuank51cc wrote:
Thanks bino1810!
Mình dùng bc như bạn bảo ok rsmilie.
hi p.n.t! dùng trim như thế nào bạn. mình đã thử cả expr r nhưng vẫn sai???
 


Code:
${_loadavg%%.*}


Trong trường hợp chỉ so sánh lớn hơn, thì cách này tạo ra bug. Ví dụ 15.5 > 15, nếu dùng trim thì cho kết quả bằng.
There is more than one way to do it!
[Up] [Print Copy]
  [Question]   cho e hỏi chút về bash shell mới ạ 13/02/2014 09:08:41 (+0700) | #7 | 279741
thuank51cc
Member

[Minus]    0    [Plus]
Joined: 13/01/2012 03:44:56
Messages: 26
Offline
[Profile] [PM]
Ok!
Thanks mọi người rất nhiều.
[Up] [Print Copy]
  [Question]   cho e hỏi chút về bash shell mới ạ 13/02/2014 09:10:55 (+0700) | #8 | 279742
thuank51cc
Member

[Minus]    0    [Plus]
Joined: 13/01/2012 03:44:56
Messages: 26
Offline
[Profile] [PM]
hi bino1810!

Mình gửi pm sang cho bạn. Ae mình trao đổi một chú nhé?
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|