1.Sử dụng câu lệnh expr
Câu lệnh expr cho phép tính toán từ command line. Ví dụ:
$ expr 1 + 3
4
Lưu ý, phải có khoảng trắng giữa toán tử và toán hạng. Nếu ở trên đổi thành 1+3 hoặc 1+ 3 hoặc 1 +3, thì đều cho kết quả hoặc có thông báo sai.
Các phép toán như cộng, trừ, nhân, chia có thể đc sử dụng. Nhưng có một điểm cần lưu ý với phép toán nhân(*). Trong linux, ký tự * là một ký tự khá đặc biệt, nó là ký tự đại diện cho toàn bộ một nhóm ký tự, đối tượng nào đó. Nếu sử dụng phép toán a * b trong shell, sẽ có thông báo lỗi. Thay vào đó ta phải sử dụng cú pháp: a \* b. Khi đó, phép toán sẽ đc thực hiện.
Ví dụ về 1 script:
#!/bin/bash
# An example of using the expr command
var1=10
var2=20
var3=`expr $var2 / $var1`
echo The result is $var3
Script trên mô tả về việc lưu một giá trị của một biểu thức vào một biến. Muốn làm được điều này, ta phải sử dụng ký tự gọi là backtick(`).
2.Sử dụng ký tự bracket(dấu ngoặc vuông)
Shell còn cung cấp cho ta một cách để thực hiện các phép toán. Để gán giá trị cho một biến, có thể sử dụng cú pháp sau:
$[operation]Ví dụ:
$ var1 = $[1 + 3]Lúc này, var1 sẽ nhận giá trị là 4.
Khi đã sử dụng ký tự bracket, thì phép toán * đã nói ở trên trở thành hợp lệ
$ var2 = $[var1 * 3]Hạn chế của việc sử dụng bracket này đó là nó chỉ hỗ trợ phép tính số nguyên-integer
$ echo var2
12
#!/bin/bash
var1=100
var2=45
var3=$[$var1 / $var2]
echo The final result is $var3
khi chạy script trên, nó sẽ in ra kết quả là 2.
Đây là hạn chế chính của việc sử dụng bracket trong tính toán
3. Sử dụng bc-bash calculator
Đây là một ngôn ngữ cho phép ta nhập các số float vào trong bash shell. bc có thể nhận dạng và xử lý:
-các số (cả integer và float)
-biến
-comment dùng để diễn giải đoạn code( /* */)
-Expression-các biểu thức
-Các statement (ví dụ if -then)
-Các hàm
3.1.Đưa bc vào trong script
Ta có thể đưa bc vào trong srcipt để tính toán. Cú pháp:
variable=`echo "options; expression" | bc`
variable: tên biến
options: các tùy chọn
expression:biểu thức
Với cú pháp trên, ta đã đưa kết quả của expression vào biến variable.
anh co the no them chut ve lenh case dc khong. thanks
ReplyDeletecase trong bash shell không phải là một lệnh (command). case được sử dụng để kiểm thử một chuỗi với một mẫu so sánh nào đó.
ReplyDeleteVd: file test.sh
#!/bin/bash
echo "What's your favorite windows manager:"
read WM
case "$WM" in
mate | MATE ) echo -e "MATE! \n";;
gnome | gnome ) echo -e "GNOME! \n";;
kde | KDE ) echo -e "KDE! \n";;
* ) echo -e "unknown WM! \n";;
esac
Có rất nhiều ví dụ về case trong bash shell.
anh ơi em muốn hỏi là em so sánh 1 ký tự trong chuỗi vs một kí tự trực tiếp như khoảng trắng chẳng hạn thì có phải gán khoảng trắng đó vào một biến khác rùi mí so sánh trong if? hay là so sánh trực tiếp luôn. thank anh nhìu ạ
Delete