Tải bản đầy đủ (.pdf) (8 trang)

bài tập lap trinh shell

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (67.4 KB, 8 trang )

Bài 6 LẬP TRÌNH SHELL
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 sử 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à cách sử 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à cách 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
do
n=$(($n + 1))
done
echo “So dong cua tap tin $1 la : $n”
}<$1
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”
}<$1
exit 0
- Chạy chương trình :
chmod a+x demtu.sh
./demtu bai1.txt
6.5. Chương trình tìm dòng có độ dài lớn 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”
}<$1
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
}<$2

exit 0
- Chạy chương trình :
chmod a+x timxau.sh
./timxau abc bai1.txt

Bài 6.7:
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.
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 ${count}p $filename
done
exit 0

Bài 6.8:
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
Code:
sed –n 1,3p $filename

Bài 6.9:
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
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]’ <$filename
exit 0


Bài 6.10:
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
Code:
tr –s ' ' ' ' <$filename >$filename

Bài 6.11:
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.
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 6.12:
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.

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.13:
Tìm số lớn nhất trong dãy số nhập vào

Cách 1:
#/bin/bash

# input an array of elements
echo -n "n= "
read n

for ((i=0; i<n; i++))
do
echo -n "a[$i] " =
read a[$i]
done

#max of an array
max=${a[0]}

echo "max1 = $max"
for ((i=1; i<n; i++))
do
if [ "${a[$i]}" -gt "$max" ]; then
max=${a[$i]}
fi
done
echo "max = $max"
exit $?
Cách 2:
#/bin/bash

# input an array of elements
function input()
{
echo -n "n= "
read n

for ((i=0; i<n; 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<n; i++))
do
max=$(max2nums ${a[$i]} $max)
done
echo "max = $max"
}

input
maxs

exit $?

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×