Các bạn đã thoải mái hiểu Shell Scripts và viết chúng thành thạo theo nhu cầu. Đây là bài cuối series, thực hiện Phép toán Toán học phức tạp hơn dùng scripting language. 4 bài trước của series Shell Scripting theo thứ tự:
- Hiểu Basic Linux Shell Scripting Language Tips – Phần I
- 5 Shell Scripts cho Linux Newbies học Shell Programming – Phần II
- Khám phá thế giới Linux BASH Scripting – Phần III
- Khía cạnh Toán học của Linux Shell Programming – Phần IV
Bắt đầu với dãy Fibonacci
Mẫu số mà mỗi số là tổng hai số trước. Dãy: 0, 1, 1, 2, 3, 5, 8... Theo định nghĩa, hai số đầu trong dãy Fibonacci là 0 và 1.
Script 1: Fibonacci.sh
#!/bin/bash echo "Bạn muốn bao nhiêu số dãy Fibonacci?" read total x=0 y=1 i=2 echo "Dãy Fibonacci đến $total số :: " echo "$x" echo "$y" while [ $i -lt $total ] do i=`expr $i + 1 ` z=`expr $x + $y ` echo "$z" x=$y y=$z done
Kết quả mẫu
[admin@wsxdn.com ~]# chmod 755 Fibonacci.sh [admin@wsxdn.com ~]# ./Fibonacci.sh Bạn muốn bao nhiêu số dãy Fibonacci? 10 Dãy Fibonacci đến 10 số :: 0 1 1 2 3 5 8 13 21 34
Tải Fibonacci.sh
Bạn biết máy tính chỉ hiểu định dạng Binary, '0' và '1' và hầu hết chúng ta thích học chuyển Decimal sang Binary. Viết script đơn giản cho phép toán phức tạp này?
Script 2: Decimal2Binary.sh
#!/bin/bash
for ((i=32;i>=0;i--)); do
r=$(( 2**$i))
Probablity+=( $r )
done
[[ $# -eq 0 ]] &echo -en "Decimal\t\tBinary\n"
for input_int in admin@wsxdn.com; do
s=0
test ${#input_int} -gt 11 &printf "%-10s\t" "$input_int"
for n in ${Probablity[@]}; do
if [[ $input_int -lt ${n} ]]; then
[[ $s = 1 ]] && printf "%d" 0
else
printf "%d" 1 ; s=1
input_int=$(( $input_int - ${n} ))
fi
done
echo -e
done
Kết quả mẫu
[admin@wsxdn.com ~]# chmod 755 Decimal2Binary.sh [admin@wsxdn.com ~]# ./Decimal2Binary.sh 1121 Decimal Binary 1121 10001100001
Lưu ý: Script trên chấp nhận input lúc chạy, rõ ràng là hỗ trợ.
Tải Decimal2Binary.sh
Lệnh bc tích hợp có thể chuyển decimal sang binary trong script một dòng. Chạy tại terminal:
[admin@wsxdn.com ~]# echo "obase=2; NUM" | bc
Thay 'NUM' bằng số muốn chuyển từ Decimal sang Binary. Ví dụ:
[admin@wsxdn.com ~]# echo "obase=2; 121" | bc 1111001
Tiếp theo viết script ngược lại: Chuyển Binary sang Decimal.
Script 3: Binary2Decimal.sh
#!/bin/bash
echo "Nhập một số:"
read Binary
if [ $Binary -eq 0 ]
then
echo "Nhập số hợp lệ"
else
while [ $Binary -ne 0 ]
do
Bnumber=$Binary
Decimal=0
power=1
while [ $Binary -ne 0 ]
do
rem=$(expr $Binary % 10 )
Decimal=$((Decimal+(rem*power)))
power=$((power*2))
Binary=$(expr $Binary / 10)
done
echo " $Decimal"
done
fi
Kết quả mẫu
[admin@wsxdn.com ~]# chmod 755 Binary2Decimal.sh [admin@wsxdn.com ~]# ./Binary2Decimal.sh Nhập một số: 11 3
Lưu ý: Chức năng trên có thể thực hiện tại terminal bằng bc:
[admin@wsxdn.com ~]# echo "ibase=2; BINARY" | bc
Thay 'BINARY' bằng số nhị phân, ví dụ:
[admin@wsxdn.com ~]# echo "ibase=2; 11010101" | bc 213
Tải Binary2Decimal.sh
Tương tự bạn có thể tự viết chuyển đổi octal, hexadecimal sang decimal và ngược lại. Thực hiện bằng bc:
Decimal sang Octal
[admin@wsxdn.com ~]# echo "obase=8; Decimal" | bc
Decimal sang Hexadecimal
[admin@wsxdn.com ~]# echo "obase=16; Decimal" | bc
Octal sang Decimal
[admin@wsxdn.com ~]# echo "ibase=8; Octal" | bc
Hexadecimal sang Decimal
[admin@wsxdn.com ~]# echo "ibase=16; Hexadecimal" | bc
Binary sang Octal
[admin@wsxdn.com ~]# echo "ibase=2;obase=8 Binary" | bc
Một số Kiểm tra số thường dùng trong shell scripting với mô tả:
Test: INTEGER1 -eq INTEGER2 Ý nghĩa: INTEGER1 bằng INTEGER2
Test: INTEGER1 -ge INTEGER2 Ý nghĩa: INTEGER1 lớn hơn hoặc bằng INTEGER2
Test: INTEGER1 -gt INTEGER2 Ý nghĩa: INTEGER1 lớn hơn INTEGER2
Test: INTEGER1 -le INTEGER2 Ý nghĩa: INTEGER1 nhỏ hơn hoặc bằng INTEGER2
Test: INTEGER1 -lt INTEGER2 Ý nghĩa: INTEGER1 nhỏ hơn INTEGER2
Test: INTEGER1 -ne INTEGER2 Ý nghĩa: INTEGER1 không bằng INTEGER2
Đó là tất cả cho bài này và series. Đây là bài cuối Shell Script Series không có nghĩa là không còn bài về Scripting, chỉ có nghĩa là tutorial shell scripting kết thúc và khi tìm thấy chủ đề thú vị hoặc câu hỏi từ các bạn, sẽ tiếp tục series từ đây.
Hãy khỏe, theo dõi và kết nối Tecmint. Sớm sẽ có chủ đề thú vị khác. Chia sẻ ý kiến quý báu ở Phần bình luận.