Tài liệu sẽ cung cấp cho người dùng những bài tập cơ bản với ngôn ngữ shell trên nền tảng Ubuntu. Bài tập được viết ở dạng base với những lệnh đơn giản dễ dùng, dễ hiểu cho người mới học lập trình shell: như các câu lệnh nhập xuất (các bài tập chủ yếu là đọc dữ liệu từ bàn phím thay vì gán cứng dữ liệu), các câu lệnh for, while và các câu lệnh if...
Trang 1Bài thực hành shell
Bài 1 Tính tổng S= 1+1/2 +1/3 +… +1/n
Bài làm:
echo " tinh tong s = 1 +1/2+1/3"
echo -n "nhap vao n = "
read n
s=0
for (( i=1; i<=n; i++))
do
s=$(echo "scale=2; $s+1/$i" |bc)
done
echo " tong s= 1 + 1/2 + 1/3 + + 1/$n =$s"
exit 0
*************************************************************
Bài 2: Nhập vào 2 số a và b Tính tích của 2 số a và b
Bài Làm:
tich=0
echo "tinh tich cua hai so"
echo "nhap vao gia tri cua a= "
read a
echo "nhap vao gia tri cua b ="
read b
tich=$(($a * $b))
echo "ket qua = $tich"
****************************************************
Bài 3: Nhập vào số n Tính tổng chắn và lẻ từ 1 đến n
Bài làm
echo "Tong chan le"
echo "nhap so n"
read n
s1=0
s2=0
for (( i=0; i<=n; i++ ))
do
m=`expr $i % 2`
if [ $m -eq 0 ]
then
s1=$(($s1+$i))
else
s2=$(($s2+$i))
fi
done
echo "tong chan = $s1"
Trang 2echo "tong le = $s2"
exit 0
*****************************************************
Bài 4 Tính tổng các giai thừa từ 1 đến n!
Bài làm
echo "tinh tong giai thua"
echo "nhap vao n"
read n
s=1
s1=0
for (( i=1; i<=n; i++))
do
s=$(($s*$i))
s1=$(($s1+$s))
done
echo "tong giai thua = $s1"
exit 0
*******************************************************
Bài 5 Giải phương trình bậc nhất
Bài Làm
echo "Giai phuong trinh bac nhat"
echo "nhap so a ="
read a
echo "nhao so b ="
read b
if [ $a -eq 0 ] && [ $b -eq 0 ]
then
echo "phuong trinh co vo so nghiem"
elif [ $a -ne 0 ] && [ $b -ne 0 ]
then
x=$(echo "scale=2; -$b/$a" | bc)
echo "phuong trinh co nghiem = $x"
else
echo "phuong trinh vo nghiem"
fi
exit 0
*******************************************************************
Trang 3Bài 6 Giải phương trình bậc 2: A x 2 + Bx + C =0 (A<>0)
Bài làm
echo " Giai phuong trinh bac 2"
a=0
while [ $a -eq 0 ]
do
echo " nhap vao a ="
read a
done
echo " nhap vao b ="
read b
echo " nhap vao c ="
read c
delta=$(($b*$b-4*$a*$c))
m=
if [ $delta -lt 0 ]
then
echo " phuong trinh vo nghiem"
elif [ $delta -eq 0 ]
then
x=$((-$b/$((2*$a))))
echo "phuong trinh co nghiem kep $x"
else
x1=$(echo "scale=2; -($b + sqrt($delta))/(2*$a)" | bc)
x2=$(echo "scale=2; -($b - sqrt($delta))/(2*$a)" | bc)
echo " nghiem x1 =$x1"
echo "nghiem x2 = $x2"
fi
exit 0
*****************************************************
Bài 7 Nhập vào 2 số a và b khác 0 Tìm số lớn nhất và nhỏ nhất Bài Làm
echo "Tim so lon nhat va nho nhat giua hai so khac 0"
a=0
b=0
while [ $a -eq 0 ]
do
echo -n "nhap vao a = "
read a
done
while [ $b -eq 0 ]
do
Trang 4echo -n "nhap vao b = "
read b
done
if [ $a -gt $b ]
then
echo "Max =$a va Min =$b"
elif [ $a -eq $b ]
then
echo "Max =Min =$a"
else
echo "Max =$b va Min =$a"
fi
exit 0
**************************************************
Bài 8 nhập vào một mảng Tìm giá trị lớn nhất và nhỏ nhất trong mảng
echo "tim so lon nhat va nho nhat trong mang"
n=0
while [ $n -eq 0 ]
do
echo -n "nhap vao so n "
read n
done
for (( i=0; i<n; i++))
do
echo -n " nhap vao phan tu a[$i] ="
read a[$i]
done
for (( i=0; i<n; i++))
do
echo -n " ${a[$i]} ="
done
echo ""
max=${a[0]}
for (( i=0; i<n; i++))
do
if [ ${a[$i]} -gt $max ]
then
max=${a[$i]}
fi
done
min=${a[0]}
for (( i=0; i<n; i++))
Trang 5do
if [ ${a[$i]} -lt $min ]
then
min=${a[$i]}
fi
done
echo "max =$max"
echo "min=$min"
exit 0
******************************************************************
Ba ̀i 9 Giải hê ̣ phương trình bậc nhất
echo "Giai va bien luan he phuong trinh bac nhat"
echo -n "Nhap vao gia tri A1= "
read A1
echo -n "Nhap vao gia tri B1= "
read B1
echo -n "Nhap vao gia C1= "
read C1
echo -n "nhap vao gia tri A2= "
read A2
echo -n "nhap vao gia tri B2= "
read B2
echo -n "nhap vao gia tri C2= "
read C2
D=0
Dx=0
Dy=0
D=$(($A1*$B2-$A2*$B1))
Dx=$(($C1*$B2-$C2*$B1))
Dy=$(($A1*$C2-$A2*$C1))
if [ $D -ne 0 ]
then
echo "He co nghiem: "
x=$(echo "scale=2; $Dx/$D" |bc)
y=$(echo "scale=2; $Dy/$D" |bc)
echo "x= $x; y=$y"
elif [ $D -eq 0 ] && [ $Dx -eq 0 ] && [ $Dy -eq 0 ]
then
echo "He phuong trinh vo so nghiem "
else
echo "He phuong trinh vo nghiem"
Trang 6fi
exit 0
*******************************************************************
Ba ̀i 10 Giải phương trình bậc 2 ax 2 +bx+c =0 voi a ≠0
echo " gia phuong trinh ax^2 +bx +c =0 voi a<>0"
a=0
while [ $a -eq 0 ]
do
echo -n "nhap vao a= "
read a
done
echo -n "nhap vao b= "
read b
echo -n "nhap vao c = "
read c
delta=$(($b*$b-4*$a*$c))
if [ $delta -eq 0 ]
then
x=$(echo "scale=2; -$b/2*$a" |bc)
echo "phuong trinh co nghiem kep x= $x"
elif [ $delta -gt 0 ]
then
x1=$(echo "scale=2; -($b- sqrt($delta))/2*$a"|bc)
x2=$(echo "scale=2; -($b+ sqrt($delta))/2*$a"|bc)
echo "phuong trinh co hai nghiem x1= $x1, x2=$x2"
else
echo "phuong trinh vo nghiem"
fi
exit 0
****************************************************************
Bai 11 Nhâ ̣p vào mảng một chiều với n phần tử biết 2 ≤n ≤100
- Nhâ ̣p vào giá tri ̣ x, cho biết phàn tử x xuất hiê ̣n bao nhiêu lần trong mảng vừa nhập
- In ra ca ́ c phần tử âm trong mảng
-Ti ́nh tổng các phần tử chia hết cho 6 trong mảng
echo "nhap vao mang voi 2<= n <100"
n=1
while [ $n -lt 2 ] || [ $n -ge 100 ]
do
echo -n "nhap vao gia tri n= "
read n
done
Trang 7for (( i=1; i<=n; i++))
do
echo -n "nhap phan tu a[$i] = "
read a[$i]
done
dem=0
echo -n "nhap vao gia tri x= "
read x
for (( i=1; i<=n; i++))
do
if [ ${a[$i]} -eq $x ]
then
dem=$(($dem+1))
fi
done
echo "phan tu $x xuat hien $dem lan trong mang"
echo -n "cac phan tu am cua mang: "
d=0
for (( i=1; i<=n; i++))
do
if [ ${a[$i]} -lt 0 ]
then
d=$(($d+1))
echo "${a[$i]}"
fi
done
if [ $d -eq 0 ]
then
echo "khong co phan tu am"
fi
s=0
for (( i=1; i<=n; i++))
do
if [ $((${a[$i]}%6)) -eq 0 ]
then
s=$(($s+${a[$i]}))
fi
done
echo "tong cac phan tu chia het cho 6 = $s"
exit 0
******************************************************
Ba ̀i 12: Nhập vào giá tri ̣ n và x Biết x≠ 0 và n≠ 0
Trang 8S (x,n)= x^2 +x^4 +x^6 +….+x^2n
echo "s(x,n)=x^2+x^4+x^6+ +x^2n"
n=0
while [ $n -eq 0 ]
do
echo -n "nhap vao gia tri n= "
read n
done
x=0
while [ $x -eq 0 ]
do
echo -n "nhap vao gia tri x= "
read x
done
s=0
s1=0
tg=1
if [ $n -gt 0 ]
then
for (( i=1; i<=n; i++))
do
tg=$(($tg*$x*$x))
s=$(($s+$tg))
done
else
n1=-$n
for (( i=1; i<=n1; i++))
do
tg=$(($tg*$x*$x))
s=$(echo "scale=2; $s+1/$tg"|bc)
done
fi
echo "s(x,n)=$x^2+$x^4+$x^6+ +$x^2$n = $s "
exit 0
********************************************************
Bai 13 Ti ́nh tổng S(n) = x/1+ x^2/(1*2)+x^3/(1*2*3)+ +x^n/(1*2+*3***n)
Vớ i x, n nhâ ̣p từ bàn phím, và x≠ 0 và n≠ 0
echo "tinh tong S(n) = x/1+ x^2/(1*2)+x^3/(1*2*3)+ +x^n/(1*2+*3***n)" n=0
while [ $n -eq 0 ]
do
echo -n "nhap vao phan tu n= "
read n
Trang 9done
x=0
while [ $x -eq 0 ]
do
echo -n "nhap vao gia tri cua x= "
read x
done
s=0
tu=1
mau=1
if [ $n -gt 0 ]
then
for (( i=1; i<=n; i++))
do
tu=$(($tu*$x))
mau=$(($mau*$i))
s=$(echo "scale=2; $s+$tu/$mau"|bc)
done
echo "tong s=$s"
else
n1=-$n
for (( i=1; i<=n1; i++))
do
tu=$(($tu*$x))
mau=$(($mau*(-$i)))
s=$(echo "scale=2; $s+1/($mau*$tu)"|bc)
done
echo "tong s=$s"
fi
exit 0
***********************************************************************
Bai 14 Ti ́nh tổng S(x,n) = - x + x2 – x3 +…… +(-1)^n *x^n
x≠ 0 va ̀ n≠ 0
echo " s(x,n)= -x +x^2 -x^3 + + (-1)^n*x^n"
x=0
n=0
while [ $n -eq 0 ]
do
echo -n " nhap vao gia tri n= "
read n
done
while [ $x -eq 0 ]
do
Trang 10echo -n "nhap vao gia tri x= "
read x
done
s=0
s1=0
tg=1
if [ $n -gt 0 ]
then
for (( i=1; i<=n; i++))
do
m=$(($i%2))
tg=$(($tg*$x))
if [ $m -eq 0 ]
then
s=$(($s+$tg))
else
s=$(($s-$tg))
fi
done
echo "tong = $s"
else
n1=-$n
for (( i=1; i<=n1; i++))
do
m=$(($i%2))
tg=$(($tg*$x))
if [ $m -eq 0 ]
then
s1=$(echo "scale=2; $s1+1/$tg"|bc)
else
s1=$(echo "scale=2; $s1-1/$tg"|bc)
fi
done
echo "tong = $s1"
fi
exit 0
***********************************************************************
Bai 15 Nhâ ̣p vào mảng môitj chiều n phần tử với 2≤ n ≤100
- In ra phần tư ̉ lớn nhất trong mảng
- Ti ́nh tổng các phần tử chia hết cho 4 và 5
Trang 11- Ha ̃y cho biết phần tử 2 xuất hiê ̣n bao nhiêu lần trong dãy
echo " mang mot chieu"
n=0
while [ $n -lt 2 ] || [ $n -gt 100 ]
do
echo -n " nhap vao gia tri n= "
read n
done
for (( i=1; i<=n; i++))
do
echo -n "nhap vao phan tu a[$i]= "
read a[$i]
done
echo -n "mang vua nhap : "
for (( i=1; i<=n; i++))
do
echo -n "${a[$i]} "
done
echo ""
max=${a[1]}
for (( i=1; i<=n; i++))
do
if [ $max -lt ${a[$i]} ]
then
max=${a[$i]}
fi
done
echo "phan tu lon nhat trong mang = $max"
s=0
for (( i=1; i<=n; i++))
do
if [ $((${a[$i]}%4)) -eq 0 ] && [ $((${a[$i]}%5)) -eq 0 ] then
s=$(($s+${a[$i]}))
fi
done
echo "tong cacs han tu chia het cho 4 va 5 la $s "
dem=0
for (( i=1; i<=n; i++))
do
if [ ${a[$i]} -eq 2 ]
then
dem=$(($dem+1))
fi
Trang 12done
echo "phan tu 2 xuat hien $dem lan"
exit 0
****************************************************************************
Bai 16 Nhâ ̣p vào mảng mô ̣t chiều gồm n phần tử 2<= n <=100
- In ra phần tư ̉ nhỏ nhất trong mảng
- In ra ca ́ c phần tử chẵn và nhỏ hơn 50
- Ti ́nh tổng các phần tử không chia hết cho 3
#mang 1 chieu n phan tu 2<= n <=100
# In ra phan tu nho nhat trong mang
# In ra cac phan tu chan va nho hon 50
# Tinh tong cac phan tu khong chia het cho 3
n=1
while [ $n -lt 2 ] || [ $n -gt 100 ]
do
echo -n "nhap vao so phan tu cua n= "
read n
done
for (( i=1; i<=n; i++))
do
echo -n "a[$i]= "
read a[$i]
done
echo -n "mang mot chieu vua nhap:"
for (( i=1; i<=n; i++))
do
echo -n "${a[$i]} "
done
echo ""
min=${a[1]}
for (( i=1; i<=n; i++))
do
if [ $min -gt ${a[$i]} ]
then
min=${a[$i]}
fi
done
echo "phan tu mang nho nhat trong mang : $min"
echo -n "phan tu chan nho hon 50: "
for (( i=1; i<=n; i++))
do
if [ ${a[$i]} -lt 50 ] && [ $((${a[$i]}%2)) -eq 0 ]
Trang 13then
echo -n "${a[$i]} "
fi
done
echo ""
s=0
for (( i=1; i<=n; i++))
do
if [ $((${a[$i]}%3)) -ne 0 ]
then
s=$(($s+${a[$i]}))
fi
done
echo "tong cac phan tu ko chia het cho 3 trong mang : $s"
exit 0
***************************************************************************
Bai 17
#mang 1 chieu n phan tu 2<= n <=100
# In ra phan tu nho nhat trong mang
# In ra cac phan tu chan va nho hon 50
# Tinh tong cac phan tu khong chia het cho 3
n=1
while [ $n -lt 2 ] || [ $n -gt 100 ]
do
echo -n "nhap vao so phan tu cua n= "
read n
done
for (( i=1; i<=n; i++))
do
echo -n "a[$i]= "
read a[$i]
done
echo -n "mang mot chieu vua nhap:"
for (( i=1; i<=n; i++))
do
echo -n "${a[$i]} "
done
echo ""
min=${a[1]}
for (( i=1; i<=n; i++))
do
if [ $min -gt ${a[$i]} ]
Trang 14then
min=${a[$i]}
fi
done
echo "phan tu mang nho nhat trong mang : $min"
echo -n "phan tu chan nho hon 50: "
for (( i=1; i<=n; i++))
do
if [ ${a[$i]} -lt 50 ] && [ $((${a[$i]}%2)) -eq 0 ]
then
echo -n "${a[$i]} "
fi
done
echo ""
s=0
for (( i=1; i<=n; i++))
do
if [ $((${a[$i]}%3)) -ne 0 ]
then
s=$(($s+${a[$i]}))
fi
done
echo "tong cac phan tu ko chia het cho 3 trong mang : $s"
exit 0
*****************************************************************
Bai 18 Tinh tong S(x,n) = - x + 1/x2 – x3 +1/x^4-…… +(-1)^n *1/x^n
(x va n khac 0)
echo " Tinh tong S(x,n)"
x=0
n=0
s1=0
s2=0
s=0
tg=1
while [ $x -eq 0 ]
do
echo -n " nhap gia tri x= "
read x
done
while [ $n -eq 0 ]
do
echo -n "nhap gia tri n= "
Trang 15read n
done
if [ $n -gt 0 ]
then
for (( i=1; i<=n; i++))
do
tg=$(($tg*$x))
if [ $(($i%2)) -eq 0 ]
then
s1=$( echo "scale=2; $s1+1/$tg" |bc)
else
s2=$(($s2-$tg))
fi
done
s=$(echo "scale=2; $s1+$s2" |bc)
echo " tong S= $s"
else
n1=-$n
for (( i=1; i<=n1; i++))
do
tg=$(($tg*$x))
if [ $(($i%2)) -ne 0 ]
then
s1=$( echo "scale=2; $s1-1/$tg" |bc)
else
s2=$(($s2+$tg))
fi
done
s=$(echo "scale=2; $s1+$s2" |bc)
echo " tong S= $s"
fi
exit 0
************************************************************************
Bai 19 Tinh tong S(x,n) = x+x^3 + x^5+ x^7 +…….+x^(2*n+1)
(x va n khac 0)
echo "tinh tong mu le"
x=0
n=0
while [ $x -eq 0 ]
do
echo -n "nhap vao gia tri x= "
read x
Trang 16done
while [ $n -eq 0 ]
do
echo -n "nhap vao gia tri n= "
read n
done
s=$x
s1=0
tg=$x
if [ $n -gt 0 ]
then
for (( i=1; i<=n; i++))
do
if [ $(($i%2)) -ne 0 ]
then
tg=$(($tg*$x*$x))
s=$(($s+$tg))
fi
done
echo "tong s= $s"
else
n1=-$n
s1=$(echo "scale=3; $s1+1/$x" |bc)
for (( i=1; i<=n1; i++))
do
if [ $(($i%2)) -ne 0 ]
then
tg=$(($tg*$x*$x))
s1=$(echo "scale=3;$s1+1/$tg" |bc)
fi
done
echo "tong s= $s1"
fi
exit 0
**************************************************************************
Bai 20 Tinh tong S(x,n) = 1/x + 1*2/x2 +1*2*3/ x3 +… +1*2*3* *n/x^n
(x va n khac 0)
echo "bai tinh tong "
x=0
n=0
while [ $n -eq 0 ]
Trang 17do
echo -n "nhap vao gia tri n= "
read n
done
while [ $x -eq 0 ]
do
echo -n "nhap vao gia tri x= "
read x
done
tu=1
mau=1
s1=0
s=0
if [ $n -gt 0 ]
then
for (( i=1; i<=n; i++))
do
tu=$(($tu*$i))
mau=$(($mau*$x))
s=$(echo "scale=2; $s+$tu/$mau"|bc)
done
echo "tong =$s"
else
n1=-$n
for (( i=1; i<=n1; i++))
do
tu=$(($tu*(-$i)))
mau=$(($mau*$x))
s1=$(($s1+$tu*$mau))
done
echo "tong s= $s1"
fi
exit 0