Chủ Nhật, 2 tháng 4, 2017

[Linux] Bài 13: Lập trình Shell

Bài 1: echo

Tạo file lab01.sh có thể chạy được và khi chạy hiển thị dòng chữ “Hello world!”. Nghĩa là khi chạy
sh lab01.sh
Kết quả ra màn hình là
Hello world!
Bài làm
#! /bin/bash
echo "Hello world!";

Bài 2: Tham số và IF

Tạo file lab02.sh có ba tham số dạng A B o trong đó hai tham số đầu tiên, A và B là các toán hạng, tham số thứ ba, o, là toán tử hai ngôi (+ - * / % **). In ra màn hình khi chạy file này sẽ có dạng A o B = S với S là kết quả của phép toán o đối với hai toán hạng A và B. Lưu ý có kiểm tra phép toán chia và số chia = 0.
Ví dụ chạy
sh lab02.sh 20 30 +
Kết quả ra màn hình sẽ là
20 + 30  = 50
Bài làm
#! /bin/bash
read a
read b
read c
if [ "$c" =  "/" ] && [ $b -eq 0 ]; then
        echo "Cannot deliver"
else
        echo "$a $c $b=$(($a$c$b))"
fi


Bài 3: test

Tạo file lab03.sh có 2 tham số, tham số đầu là đường dẫn đến 1 file, tham số thứ hai là dòng cần hiển thị trên màn hình. Kiểm tra sự tồn tại của file, số dòng của file có >= dòng cần hiển thị không? Nếu đúng hiện ra dòng cần hiển thị.
Bài làm
#! /bin/bash
read nameFile;
declare -i numRow;
read numRow;
cat $nameFile;
a=cat $nameFile | wc -l;
if [ $a -gt $numRow ]; then
     head -n $numRow | tail -n 1;
else
    echo "don't have row";
fi

Bài 4: FOR

Tạo file lab04.sh có chức năng sau: Nhập một số nguyên trong khoảng 1000 đến 50000. Kiểm tra tính đúng đắn của dữ liệu nhập, nếu đúng in ra kết quả số nhập vào là số nguyên tố hay hợp số.
Bài làm
#! /bin/bash
i =1;
j=1;
declare -i a;
declare -i d;
read a;
if [ $a -gt  1000 ] && [ $a -lt 50000 ]; then
    for (( i =1; i<5 ; i++))
    do
           d=$a%i;
          if [ "$d" -eq "0" ]; then
                         echo "La hop so";
                         j=1;
                          break;
            fi
           done
            if [ "$j" -eq  "0"]; then
                   echo "La so nguyen to";
           fi
fi

Bài 5: WHILE

Tạo file lab05.sh có chức năng sau: Nhập một số nguyên dương trong khoảng 1000 đến 5000. Kiểm tra tính đúng dắn của dữ liệu nhập, nếu đúng in ra số Fibonacci lớn nhất nhưng nhỏ hơn số mới nhập.
Bài làm
#! /bin/bash
declare -i a;
declare -i b;
b=0;
i=0;
j=0;
read a;
while [ "$b" -lt "$a" ]
do
     b=$i+$j;
     j=$i;
    i=$b;
done
echo $j;