+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
Let's register a Viblo Account to get more interesting posts.