+6

Một số bài tập về Lập Trình Shell

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí