bài tập lap trinh shell

8 2.6K 55
bài tập lap trinh shell

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

Thông tin tài liệu

bài tập lap trinh shell

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 $?

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