Một số bài tập về Lập Trình Shell
Bài đăng này đã không được cập nhật trong 4 năm
1. Kiểm tra số nguyên tố:
$1
ở đây là lấy pramater đầu tiên khi chúng ta truyền vào hàm isprime().
is_prime $n.
Với cách gọi hàm phía trên thì chúng ta có thể hiểu răng $1 = $n
#!/bin/bash
is_prime(){
n=$1
if [ $n -lt 1 ];then
return 0
fi
for ((i=2;i<n;i++));do
let "k=$n%$i"
if [ $k -eq 0 ];then
return 0
fi
done
return 1
}
echo -n "Nhap n: "
read n
is_prime $n
if [ $? -eq 0 ];then
echo "$n khong la so nguyen to"
else
echo "$n la so nguyen to"
fi
exit 0
2. Liệt kê số nguyên tố nhỏ hơn n
Bài này mình làm chưa ra. Post cho ae chỉnh sửa giùm
#!/bin/bash
is_prime(){
n=$1
if [ $n -lt 2 ];then
return 0
fi
for ((i=2;i<n;i++));do
let "k=$n%$i"
if [ $k -eq 0 ];then
return 0
fi
done
return 1
}
lietke(){
n=$1
if [ $n -lt 2 ]; then
echo "khong co so nt nao"
fi
for ((j=2;j<n;j++));do
is_prime $j
if [ $? -eq 1 ];then
echo "$j"
fi
done
}
echo -n "Nhap n: "
read n
lietke $n
exit 0
Note:
$?
Dấu này là lấy giá trị trả về của hàm mới gọi ở trước. Trong bài trên thì $? là giá trị trả về của hàm is_prime()
trong câu lệnh sau.
is_prime $j
3. Đọc ghi file
#!/bin/bash
echo -n "Nhap ten file"
read name
while read LINE
do
echo $LINE | cut -d"|" -f3
done <$name
Note:
echo $LINE | cut -d"|" -f3
Lệnh cut là để cắt dữ liệu ghi đọc. -d"|" đọc dữ liệu được phân cách bởi kí tự "|". Còn -f3 là lấy từ phần tử thứ mấy. Ví dụ:
"a|b|c|d|e" cut -d"|" -f3
Kết quả trả về là c.
Bạn nào muốn trả về là in hoa thi thêm tr a-z A-Z ở dòng echo $LINE
echo $LINE | tr a-z A-Z
Bài 4. Mảng
#!/bin/bash
declare -a a
echo -n "Nhap n: "
read n
for ((i=1;i<=n;i++));do
echo -n "a[$i]= "
read m
a[$i]=$m
done
echo -n "Mang chua sap xep: "
echo ${a[*]}
for ((i=1;i<=n-1;i++));do
for ((j=i+1;j<=n;j++));do
if [ ${a[$i]} -gt ${a[$j]} ];then
tam=${a[$i]}
a[$i]=${a[$j]}
a[$j]=$tam
fi
done
done
echo ${a[*]}
Bài này không cần phải nói gì nhé
5. Phương trình bậc nhất
#!/bin/bash
echo "Nhap a: "
read a
echo "Nhap b:"
read b
if [ $a -ne 0 ]; then
x=$(echo "scale=2;( -$b / $a)"|bc)
echo -n "Nghiem la: $x"
elif [ $b -ne 0 ]; then
echo -n "Phuong trinh vo nghiem"
else
echo -n "phuong trin vo so nghiem"
fi
6. Phương trình bậc 2.
#!/bin/bash
echo "a : "
read a
echo -n "b : "
read b
echo -n "c: "
read c
delta=$(($b * $b - 4*$a * $c))
if [ $delta -lt 0 ]; then
echo "Phuong trinh vo nghiem"
elif [ $delta -eq 0 ]; then
echo "Nghiem kep: "
x=$(echo "scale=2; (-$b /( 2 * $a))"|bc)
echo "$x"
else
echo "Phuong trinh co 2 nghiem "
x1=$(echo "scale=2; -($b +sqrt($delta))/(2*$a)" | bc)
echo "$x1"
x2=$(echo "scale=2; -($b - sqrt($delta))/(2*$a)" | bc)
echo "$x2"
fi
Toàn bộ bài tập mình code được trên lớp.Hy vọng nó giúp ích cho các bạn.
Cảm ơn đã đọc bài của mình.
All rights reserved