Một Số bài tập Lập trình shella Làm việc với Text Bài 1: Viết 1 chương trình Shell đọc từng dòng 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
Trang 1Một Số bài tập Lập trình shell
a) Làm việc với Text
Bài 1: Viết 1 chương trình Shell đọc từng dòng 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ó muốn đọc dòng kế tiếp ko ? y/n” nếu trả lời là “y” hoặc
“Y” thì in dòng kế tiếp, trong trường hợp ngược lại thì kết thúc chương trình đọc
Mã:
#!/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 ${count}p $filename
done
exit 0
Bài 2: Viết 1 dòng lệnh cho phép đọc 3 dòng đầu tiên trong 1 file văn bản mà không được dùng
bất cứ vòng lặp nào
Mã:
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 nội dung file này, nhưng với tất cả ký tự đều viết hoa
Trang 2#!/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]’ <$filename
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 dòng 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
Mã:
tr –s ' ' ' ' <$filename >$filename
Post added at 08:50 PM Previous post was at 08:47 PM
-b)Làm việc với các tham số
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 dùng lệnh SHIFT
Mã:
#!/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 ]
Trang 3do
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 2: Viết chương trình Shell phân tích 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 có thể 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
Mã:
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