Các bài tập cơ bản trên linux ubuntu

Phân tích 1 số thành các thừa số nguyên tố

n=$1
m=$n
i=2
j=0
while [ $n -ne 1 ]
do
d=$((n%i))
if [ $d -eq 0 ]
then
# echo -n “$i x ”
kq[$j]=$i
n=$((n/i))
j=$((j+1))
else
i=$((i+1))
fi
done
#echo $((${#kq[@]}-1))
#echo ${#kq[@]}
echo -n “$m = ”
#for k in ${kq[@]}
for ((k=0 ; k <= $((${#kq[@]}-1)) ; k++))
do
if [ $k -lt $((${#kq[@]}-1)) ]
then
echo -n “${kq[k]} x ”
else
echo -n “${kq[k]}”
fi
done
echo


 

Lấy danh sách từ file:

tenfile1=$1
tenfile2=$2
i=0
k=0
stt=()
ten=()

#Doc so thu tu tu file stt.txt
while read -r line
do
stt[i]=”$line”
# echo “${stt[i]}”
i=$((i+1))
done < “$tenfile1″

#Doc danh sach ten tu file ten.txt
while read -r line
do
ten[i]=”$line”
# echo “${ten[i]}”
i=$((i+1))
done < “$tenfile2”

#Kiem tra neu giong thi ghi ra file ketqua.txt

for j in “${stt[@]}”

do

for k in “${ten[@]}”

do

kytudau=$(echo $k | head -c 1)

# echo $kytudau

if [ $j -eq $kytudau ]

then

echo $k

fi

done

done > ketqua.txt


Kiểm tra nguyên tố của 1 số

n=$1
if [ $n -lt 2 ]
then
echo “Khong la so nguyen to”
exit 1
else
{
a=$(echo “sqrt ($n)” | bc)
for (( i = 2; i <= $a; i ++ ))
do
if [ $((n%i)) -eq 0 ]
then
echo “Khong la so nguyen to”
exit 1
fi
done
echo “La so nguyen to”
exit 0

}
fi


Đếm số tập tin và thư mục của một đường dẫn

#! /bin/bash
dem (){
A=$( find $1 -maxdepth 1 -type f | wc -l)
B=$( find $1 -maxdepth 1 -type d | wc -l)
echo “Duong dan $1 co $A tap tin va $((B-1)) thu muc”
C=$( find $1 -maxdepth 1 -type f)
D=$( find $1 -maxdepth 1 -type d)
echo “Ten cac tap tin”
for i in $C
do
echo $(basename $i)
done
echo “Ten cac thu muc”
for i in $D
do
if [ $i != $1 ]
then
echo $(basename $i)
fi
done

}
n=$1
dem $n
#basename -> get file name
#dirname -> get path path

#echo “$FILE_PATH” | sed -r “s/.+\/(.+)\..+/\1/” -> get only file name without extension


Tính giai thừa một số (đệ qui)

giaithua() {
m=$1
if [ $m -eq 0 ]
then
{
echo 1
}
else
{
echo $((m*$(giaithua $((m-1)) ) ))
}
fi
}
n=$1
giaithua $n


Đổi phần mở rộng tập tin từ .htm sang .html

#!/bin/bash
for f in `ls *.htm`
do
mv $f $f”l”
done


Đổi phần mở rộng từ .html sang .htm

#!/bin/bash
for f in `ls *.html`
do
mv $f ${f%.html}.htm

done


Hiển thị ngày dạng 7:30 am

echo `date +%r`
#mv $f ${f#.htm}.html (# laf lay tu ben trai)
#if test $1=’yes’


Nếu tham số truyền vào là y, Y, Yes. yes, YES thì trả về 0, ngược lại trả về 1

#bai5
if [ $1 = “yes” ] || [ $1 = “y” ] || [ $1 = “Yes” ] || [ $1 = “YES” ]
#if test $1 = “yes” || test $1 = “y” || test $1 = “Yes” || test $1 = “YES”
then
echo “0”
else
echo “1”
fi


In ngược các tham số truyền vào

#bai6

a=(“$@”)
for (( i = $# – 1 ; i >= 0 ; i– ))
do
echo ${a[i]}
done


Tính +. – *, / hai số nhập từ bàn phím

#bai7
clear
echo “Nhap a”
read a
echo “Nhap b”
read b
echo “Tong: $a+$b = `expr $a + $b`”
echo “Hieu: $a-$b = `expr $a – $b`”
echo “Tich: $a*$b= `expr $a \* $b`”
thuong=$(echo “scale=3; $a/$b” | bc)
#`expr $a / $b`
echo “Thuong: $a/$b = $thuong”
#`expr $a % $b`
#du=$(echo “scale=3; $a%$b” | bc)
#echo “So du: $a % $b = `expr $a – $b`”


In dãy số fibonaci

#bai8
if [ $# -eq 1 ]
then
n=$1
else
echo -n “Nhap so :”
read n
fi

f1=0
f2=1

#$n=$1
echo “Day $n so fibo : ”

for (( i=0 ; i<=$n ; i++ ))
do
echo -n “$f1 ”
fn=$((f1+f2))
f1=$f2
f2=$fn
done
echo

———————————————-

#!/bin/bash

dem (){
C=$( find $1 -maxdepth 1 -type d | wc -c )
D=$( find $1 -maxdepth 1 -type d)
echo “Kich thuoc thu muc truyen vao: $C”
for k in $D
do
if [[ $1 != $k ]]
then
{
echo “Kich thuoc thu muc con”
du $k
}
fi
done
}
n=$1
dem $n


Tính giai thừa một số (không đệ qui)

#!/bin/bash
n=$1
gt=1
while [ $n -gt 0 ]
do
gt=$((gt*n))
n=$((n-1))
done
echo “giai thua= $gt”


#!/bin/bash

so_file=0
so_folder=0

dem (){
A=$( find $1 -maxdepth 1 -type f | wc -l)
B=$( find $1 -maxdepth 1 -type d | wc -l)
E=$(($B-1))
echo “Duong dan $1 co $A file va $E thu muc”
C=$( find $1 -maxdepth 1 -type f)
D=$( find $1 -maxdepth 1 -type d)
echo “Ten cac file”
for i in $C
do
echo “Tap tin: $i”
done
echo “Ten cac thu muc”
for k in $D
do
if [[ $1 != $k ]]
then
echo “Thu muc: $k”
fi
done

}
n=$1
dem $n


#!/bin/bash

so_file=0
so_folder=0

dem (){
A=$( find $1 -maxdepth 1 -type f | wc -l)
B=$( find $1 -maxdepth 1 -type d | wc -l)
E=$(($B-1))
echo “Duong dan $1 co $A file va $E thu muc”
C=$( find $1 -maxdepth 1 -type f)
D=$( find $1 -maxdepth 1 -type d)
echo “Ten cac file”
for i in $C
do
echo $i
done
echo “Ten cac thu muc”
for k in $D
do
if [[ $1 != $k ]]
then
echo “Thu muc: $k”
fi
done

}
n=$1
dem $n


#!/bin/bash

so_file=0
so_folder=0

dem (){
A=$( find $1 -maxdepth 1 -type f -empty | wc -l)
B=$( find $1 -maxdepth 1 -type d -empty | wc -l)
E=$(($B-1))
echo “Duong dan $1 co $A file va $E thu muc rong”
C=$( find $1 -maxdepth 1 -type f -empty)
D=$( find $1 -maxdepth 1 -type d -empty)
echo “Ten cac file rong”
for i in $C
do
echo $i
done
echo “Ten cac thu muc rong”
for k in $D
do
if [[ $1 != $k ]]
then
echo “Thu muc: $k”
fi
done
n=$1
dem $n


#!/bin/sh
echo “1. Xoa file”
echo “2. Hien ngay thang”
echo “3. Thoat”
read option
case “$option” in
“1”)
echo “Nhap ten file can xoa”
read ten
rm $ten > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo “Xoa file thanh cong”
else
echo “Xoa file that bai”
fi
;;
“2”)
echo $(date)
;;
“3”)
exit 1
;;
esac


#!/bin/bash
ham(){
f=1
while [ $f -eq 1 ]
do
echo “Ban co chac se xoa file/thu muc?”
echo “1. Xoa”
echo “2. Huy”
read option
case “$option” in
“1”) mv $1 /tmp > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo “Da chuyen file/thu muc vao /tmp”
echo “Ban co muon xoa tiep? 1. co, 0. khong”
read tam
if [ $tam -eq 1 ]
then
f=1
else
f=0
fi
else
echo “Tac vu that bai”
echo “Ban co muon thuc hien lai? 1. co, 0. khong”
read tam
if [ $tam -eq 1 ]
then
f=1
else
f=0
fi
fi
;;
“2”) echo “Da huy tac vu”
f=0
exit 1
;;
esac
done
}
n=$1
ham $n

Bình luận