bài tập lập trình shell trong linux là một trong những từ khóa được search nhiều nhất trên google về chủ đề bài tập lập trình shell trong linux. Trong bài viết này,xaydungweb.vn sẽ viết bài viết Tổng hợp các bài tập lập trình shell trong linux mới nhất 2020.
Tổng hợp các bài tập lập trình shell trong linux mới nhất 2020.
tổng hợp CÁc BÀi TẬp LẬp TrÌnh Shell Trong Linux
6.1. Chương trình tính tổng 1-> n
– Minh họa các cấu trúc while do done, và cách dùng [], $(()).
– Tập tin tong1.sh
#!/bin/sh
echo “Chuong trinh tinh tong 1- $1”
index=0
tong=0
while [ $index -lt $1 ]
do
index=$(($index + 1))
tong=$(($tong + $index))
done
echo “Tong 1-$1= $tong”
exit 0
– Chạy chương trình :
chmod a+x tong1.sh
./tong1 100
===============================================================================================
6.2. Chương trình tính giai thừa của một số
– Minh họa các cấu trúc while do done, và phương pháp dùng [], $(()).
– Tập tin giaithua.sh
#!/bin/sh
echo “Chuong trinh tinh $1!”
index=0
gt=1
while [ $index -lt $1 ]
do
index=$(($index + 1))
gt=$(($gt * $index))
done
echo “$1!= $gt”
exit 0
– Chạy chương trình :
chmod a+x giaithua.sh
./giaithua 5
========================================================================================
6.3. Chương trình đếm số dạng của một tập tin
– Minh họa các cấu trúc if then fi, while do done, và hướng dẫn sử dụng [], $(()).
– Tập tin demdong.sh
#!/bin/sh
echo “Chuong trinh dem so dong cua tap tin $1”
n=0
while read line
– 22-
do
n=$(($n + 1))
done
echo “So dong cua tap tin $1 la : $n”
exit 0
– Chạy chương trình :
chmod a+x demdong.sh
./demdong bai1.txt
6.4. Chương trình đếm số từ của một tập tin
– Minh họa các cấu trúc for do done, while do done.
– Tập tin demtu.sh
#!/bin/sh
echo “Chuong trinh dem so tu cua tap tin $1”
n=0
while read line
do
for wd in $line
do
n=$(($n + 1))
done
done
echo “Tong so tu cua tap tin $1 la : $n”
exit 0
– Chạy chương trình :
chmod a+x demtu.sh
./demtu bai1.txt
===========================================================================================
6.5. Chương trình tìm định dạng có độ dài to nhất trong một tập tin
– Minh họa các cấu trúc if then fi, while do done.
– Tập tin dongmax.sh
#!/bin/sh
echo “Chuong trinh tim dong dai nhat trong tap tin $1”
n=0
max=0
dong=””
while read line
do
n=`expr length “$line”`
if [ $n –gt $max ]
then
dong=”$line”
max=$n
fi
done
echo “Dong trong tap tin $1 co do dai max = $max la : $dong”
exit 0
– Chạy chương trình :
chmod a+x dongmax.sh
./dongmax bai1.txt
6.6. Chương trình tìm một xâu trong một tập tin
– Minh họa các cấu trúc if then fi, while do done.
– Tập tin timxau.sh
#!/bin/sh
echo “Chuong trinh tim xau $1 trong tap tin $2”
wordlen=`expr length “$1”` # Do dai tu can tim
while read textline
do
textlen=`expr length “$textline”` # Do dai cua dong vua doc
end=$(($textlen – wordlen + 1”
index=1
while [ $index –le $end ]
do
temp=`expr substr “$textline” $index $wordlen
if [ “$temp” = $1 ]
then
echo “Tim thay $1 tai dong $textline”
break
fi
index=$(($index + 1))
done
done
exit 0
– Chạy chương trình :
chmod a+x timxau.sh
./timxau abc bai1.txt
– Tìm số lớn nhất trong dãy số nhập vào
#/bin/bash
# input an array of elements
function input()
echo -n “n= ”
read n
for ((i=0; i do
echo -n “a[$i] ” =
read a[$i]
done
#max of two numbers
function max2nums()
if [ “$1” -gt “$2” ]; then
max1=$1
echo $1
else
max1=$2
echo $2
fi
return $max1
#max of an array
function maxs()
max=$a[0]
for ((i=1; i do
max=$(max2nums $a[$i] $max)
done
echo “max = $max”
input
maxs
exit $?
=========================================================================================
Bài 1: Viết 1 chương trình Shell đọc từng loại trong 1 file văn bản. Giữa mỗi lần hiển thị dòng
text thì có 1 câu hỏi từ Shell: “bạn có mong muốn đọc dạng tiếp theo không ? Y/n” nếu trả lời là “y” hoặc
“Y” thì in thể loại tiếp theo, trong trường hợp ngược lại thì chấm dứt chương trình đọc.
Code:
#!/bin/sh
echo – e “ nhap ten file:”
read filename
if [ ! –F “$filename” ]; then
echo “ $filename not exists”
exit 1
fi
answer=””
count=0
numlines=`wc –l $filename|sed ‘s/^ *//’|cut –d “ “ –f 1`
echo “ so dong: $numlines”
while [ “$answer”!=”n”]
do
echo –e “tiep tuc(y/n)?”
read answer
if [ “answer” = “y” ]; then
echo “doc het file rui”
exit 0
fi
count=$(($count+1))
sed –n $countp $filename
done
exit 0
============================================================================================
Bài 2: Viết 1 định dạng lệnh cho phép đọc 3 loại trước tiên trong 1 file văn bản mà k được dùng
bất cứ vòng lặp nào
Code:
sed –n 1,3p $filename
=========================================================================================
Bài 3: Viết 1 chương trình trong Shell sao cho với tham số thứ nhất là tên file text và nó sẽ in ra
màn hình content file này, nhưng với all ký tự đều viết hoa
Code:
#!/bin/sh
echo – e “ nhap ten file:”
read filename
if [ ! –F “$filename” ]; then
echo “ $filename not exists”
exit 1
fi
echo “file sau khi chuyen doi:”
tr ‘[a-z]’ ‘[A-Z]’ exit 0
===========================================================================================
Bài 4: Viết 1 chương trình Shell chỉnh sửa văn bản sao cho nếu trên 1 loại mà có nhiều hơn 2
khoảng trắng liền nhau thì được thay thế bằng 1 khoảng trắng
Code:
tr –s ‘ ‘ ‘ ‘ $filename
Bài 1: Viết chương trình Shell liệt kê các tham số truyền vào chương trình theo từng dạng với cú
pháp: “day la tham so thu N va co ten la NNNN” bằng các cách sau:
• dùng vòng lặp FOR.
• dùng vòng WHILE và lệnh SHIFT
• dùng vòng WHILE và không sử dụng lệnh SHIFT.
Code:
#!/bin/sh
#while + SHIFT:
count=0
while [ “$#” –ne 0 ]
do
echo “day la tham so thu $count: $1”
count=$(($count + 1))
shift
done
#WHILE without SHIFT:
count=1
total=$(($#+1))
while [ “$*” –ge 0 ]
do
echo –n “day la tham so thu $count: ”
eval echo \$$count
count=$(($count+1))
done
#for:
count=1
for arg in “$*”
do
echo “day la tham so thu $count: $arg”
count=$(($count + 1))
done
===============================================================================================
Bài 5: Viết chương trình Shell đánh giá các tham số và các đối số truyền vào tương ứng với
tham số đó. Giả sử chương trình myshell đủ sức nhận 4 tham số là a,b,c,d nhưng chỉ có tham số c
là có đối số truyền vào. Khi gõ câu lệnh trong Shell: myshell –abc argument –d other_argument
thì với tham số c ta có đối số là argument, ngoài ra chương trình còn 1 đối số là other_argument.
Code:
while getopts abc:d option
do
case “$option”
in
a) echo “co tham so a”;;
b) echo “co tham so b”;;
c) echo “co tham so c, doi so la $OPTARG”;;
d) echo “co tham so d”;;
\?)echo “ tham so nay khong hop le”
esac
done
while [ “$OPTIND” –le “$#” ]
do
echo –n “tham so tu do: “
eval echo \$$OPTIND
shift
done
=================================================================================
Bài 6 : Viêt́ chương triǹ h shell giaỉ phương triǹ h bâc̣ hai : ax2 + bx +c =0 với các tham số a,b,c nhập từ bàn phiḿ va ̀ cać kêt́ qua ̉ chiń h xać đêń hai chữ số.
Code:
#!/bin/bash
echo -n “a= ”
read a
echo -n “b= ”
read b
echo -n “c= ”
read c
delta=$(echo “$b^2 – 4*$a*$c” | bc)
if [ $delta -lt 0 ]
then
echo “pt vo nghiem”
elif [ “$delta” -eq 0 ]
then
echo -n “pt co nghiem kep x= ”
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= $x1”
x2=$(echo “scale=2; -($b – sqrt($delta))/(2*$a)” | bc)
echo “x2= $x2”
fi
exit 0
Bài 2 :
Viêt́ chương triǹ h shell liêṭ kê cać tâp̣ tin trong thư muc̣ nhâp̣ vaò tư ̀ baǹ phím ma ̀ co ́ kić h thước > 4KB theo dạng sau :
Tổng số tâp̣ tin
Tập tin 1 click thước
…..
tập in n kích thước
Code:
#!/bin/bash
SIZE=4096 # hằng số
echo -n “thu muc : ”
read directory
index=0
for file in $( tìm kiếm $directory -type f)
do
filesize=$(ls -l $file | awk ‘print $5‘) # trươǹ g thư ́ 5 cuả kêt́ qua ̉ lêṇ h ls –l la ̀ kić h
if [ $filesize -gt $SIZE ] # thước file
then
_filename[$index]=$file # gán man̉ g file name
_filesize[$index]=$filesize # gán man̉ g file size
let “index +=1”
fi
done
echo “Tong so tap tin : $index”
for ((i=0 ; i do
echo -e “`basename $_filename`\t\t kich thuoc: $_filesize”
done
exit 0
==============================================================================
Bài 7 :
Viêt́ chương triǹ h shell đoc̣ môṭ danh saćh cać người dùng từ tập tin users rồi test nhìn thấy các người dùng này có thuộc nhóm W3 hay không? Nêú co ́ user naò thuôc̣ nhóm thi ̀ xoá user đo ́ ra khoỉ group W3 ngươc̣ lại thi ̀ thêm người dùng đo ́ vaò group.
Code:
#!/bin/bash
FGROUP=/etc/group
GROUPNAME=W3
UFILE=users
if [ ! -E $UFILE ]; then
echo “File users does not exist”
exit 1
fi
all_users=( $(cat $FGROUP | grep -w $GROUPNAME | cut -d: -f4 | tr , ” “) )
# all_users=( $(cat $FGROUP | awk –F: ‘/$GROUPNAME/ print $4’ | tr , ” “) )
num_usr_grp=$#all_users[@]
add_remove_users()
local co=0
for (( i=0; i< num_usr_grp; i++ ))
do
if [ “$1” == “$all_users” ]
then
co=1;break
fi
done
if [ $co -eq 1 ]; then
gpasswd -d $1 $GROUPNAME
else
gpasswd -a $1 $GROUPNAME
fi
while read usr
do
add_remove_users $usr
done exit 0
==========================================================================================
Bài 8
Viêt́ chương triǹ h đôỉ 1 sô ́ tư ̀ hê ̣ thâp̣ phân 10 ( Dec ) sang hê ̣ 2 (Bin), 8 (Oct) , 16 (Hex).
Vi ́ du ̣ : convert –b 16 –n 500 co ́ nghiã la ̀ đôỉ sô ́ 500 sang cơ sô ́ 16.
chú ý : đoaṇ code dươí đây cuñ g duǹ g đê ̉minh hoạ lêṇ h “shift “ . Baṇ co ́ thê ̉ go ̃ tham sô ́ cuả chương trình theo 2 hướng dẫn :
./convert –b radix –n number hoăc̣ ./conver –n number –b radix
Code:
#!/bin/bash
if [ $# -ne 4 ]; then
echo “Usage : $0 -b radix -n number or $0 -n number -b radix”
exit 1
fi
while [ “$1” ]
do
if [ “$1” = “-b” ];then
ob=”$2″
case $ob in
16 ) basesystem=”Hex”;;
8 ) basesystem=”Oct”;;
2 ) basesystem=”Bin”;;
* ) basesystem=”Unknown”;;
esac
shift 2
elif [ “$1” = “-n” ]
then
num=”$2″
shift 2
else
echo “Program $0 does not recognize option $1”
exit 1
fi
done
op=$(echo “obase=$ob;ibase=10;$num;” | bc)
echo “$num Decimal number = $op in $basesystem number system (base=$ob)”
exit 0
1. Viết chương trình tạo 50 thư mục đồng thời.
#!/bin/bash
echo ” chuong trinh tao 50 thu muc trong linux ”
for ((i=1;$i do
mkdir thumuc$i
done
chạy kịch bản
chmod +x xyz.sh ( xyz.sh là tên file này )
./xyz.sh
====================================================================================
2 viết chương trình tìm số chia hết cho 5. (N nhập từ bàn phím)
đầu tiên BẠN dùng lện gedit xyz.sh // tạo file xyz có đuôi mở rộng .sh
#!/bin/bash
echo ” chuong trinh tinh tong cac so chia het cho 5″
echo “nhap n”
read n
tong=0;
for ((i=1; $i do
if [ $(($i%5)) ==0 ]
then
tong=$(( $tong + $i))
fi
done
echo ” dap so :$tong”
lưu file lại
chạy scrip như sau
chmod +x xyz.sh
./xyz.sh