1. Trang chủ
  2. » Công Nghệ Thông Tin

bài tập lap trinh shell

8 2,6K 55
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 67,4 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

bài tập lap trinh shell

Trang 1

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

Trang 2

./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

Trang 3

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)?”

Trang 4

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:

Trang 5

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

Trang 6

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] " =

Trang 7

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"

Trang 8

}

input maxs

exit $?

Ngày đăng: 03/01/2014, 20:24

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w