Bài tập Unix22

Q.1. How to write shell script that will add two nos, which are supplied as command line argument, and if this two nos are not given show error and its usage

Viết shell script tính tổng của 2 số,các số được cung cấp như đối số dòng lệnh, và nếu không đưa đủ 2 số hiện thông báo lỗi, và cách khắc phục

 

doc5 trang | Chia sẻ: luyenbuizn | Lượt xem: 1395 | Lượt tải: 0download
Nội dung tài liệu Bài tập Unix22, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Q.1. How to write shell script that will add two nos, which are supplied as command line argument, and if this two nos are not given show error and its usage Viết shell script tính tổng của 2 số,các số được cung cấp như đối số dòng lệnh, và nếu không đưa đủ 2 số hiện thông báo lỗi, và cách khắc phục if [ $# -ne 2 ] #Kiếm tra số đối số truyền vào then echo "Usage - $0 x y" echo " x và y là 2 số mà chúng ta sẽ tính tổng" exit 1 fi echo "Tổng của hai số `expr $1 + $2`" Q.2.Write Script to find out biggest number from given three nos. Nos are supplies as command line argument. Print error if sufficient arguments are not supplied. Viết Script để tìm ra số lớn nhất trong ba số. Các số được truyền qua đối số dòng lệnh. In lỗi, nếu đối số không được cung cấp đầy đủ. # 1) START: Take three nos as n1,n2,n3. Bắt đầu: coi 3 số là n1, n2, n3. # 2) Is n1 is greater than n2 and n3, if yes # print n1 is bigest no goto step 5, otherwise goto next step # - Nếu n1 lớn hơn n2 và n3, in n2 là số lớn nhất, nhảy đến bước 5, # # trường hợp khác nhảy đến bước tiếp theo. # 3) Is n2 is greater than n1 and n3, if yes # print n2 is bigest no goto step 5, otherwise goto next step # - Nếu n2 lớn hơn n1 và n3, in n2 là số lớn nhất, nhảy đến bước 5, # # trường hợp khác nhảy đến bước tiếp theo. # 4) Is n3 is greater than n1 and n2, if yes # print n3 is bigest no goto step 5, otherwise goto next step # - Nếu n3 lớn hơn n2 và n1, in n3 là số lớn nhất, nhảy đến bước 5, # # trường hợp khác nhảy đến bước tiếp theo. # 5) END # # if [ $# -ne 3 ] then echo "$0: So n1 so n2 so n3 chua duoc nhap" >&2 exit 1 fi n1=$1 n2=$2 n3=$3 if [ $n1 -gt $n2 ] && [ $n1 -gt $n3 ] then echo "$n1 la so lon nhat" elif [ $n2 -gt $n1 ] && [ $n2 -gt $n3 ] then echo "$n2 la so lon nhat" elif [ $n3 -gt $n1 ] && [ $n3 -gt $n2 ] then echo "$n3 la so lon nhat" elif [ $1 -eq $2 ] && [ $1 -eq $3 ] && [ $2 -eq $3 ] then echo "tat ca 3 so bang nhau" else echo "Khong the tim duoc so lon nhat" fi Q.3.Write script to print nos as 5,4,3,2,1 using while loop. Q.3.Write kịch bản để in số dưới dạng 5,4,3,2,1 khi sử dụng vòng lặp. Answer: See Q3 shell Script. Algo: # 1) START: set value of i to 5 (since we want to start from 5, if you # want to start from other value put that value) # Bắt đầu: gán giá trị cho i=5 (ở đây chúng ta bắt đầu từ 5, nếu # muốn bắt đầu từ một giá trị khác hãy nhập vào giá trị đó) # 2) Start While Loop # Bắt đầu vòng lặp While # 3) Chechk, Is value of i is zero, If yes goto step 5 else # continue with next step # Kiêm tra, giá trị của i=0? nếu đúng nhảy đến bước 5 ngược lại # tiếp tục với bước tiếp theo. # 4) print i, decement i by 1 (i.e. i=i-1 to goto zero) and # goto step 3 # In giá trị của i, giám giá trị của i đi 1 và quay lại bước 3 # 5) END i=5 while test $i != 0 do echo "$i" i=`expr $i - 1` done Q.4. Write Script, using case statement to perform basic math operation as follows + addition - subtraction x multiplication / division The name of script must be 'q4' which works as follows $ ./q4 20 / 3, Also check for sufficient command line arguments Answer: See Q4 shell Script. Q.4. Viết Script, sử dụng các ký hiệu sau để mô phỏng hoạt động cơ bản của các phép toán học: + Phép Cộng - Phép trừ x nhân / phé chia if test $# = 3 then case $2 in +) let z=$1+$3;; -) let z=$1-$3;; /) let z=$1/$3;; x|X) let z=$1*$3;; *) echo cảnh báo - $2 không phải là phép toán, chỉ +,-,x,/ là phép toán exit;; esac echo Answer is $z else echo "Usage - $0 value1 operator value2" echo " Where, value1 and value2 are numeric values" echo " operator can be +,-,/,x (For Multiplication)" fi Q.5.Write Script to see current date, time, username, and current directory Viết shell scrip hiện ngày tháng hiện hành, thời gian, tên người dùng, và thư mục hiện hành. Answer: See Q5 shell Script. echo "Hello, $LOGNAME" echo "Current date is `date`" echo "User is `who i am`" echo "Current direcotry `pwd`" Q.6.Write script to print given number in reverse order, for eg. If no is 123 it must print as 321. Viết Shell script để in số đảo ngược, ví dụ: nếu số là 123 thì in ra 321 Answer: See Q6 shell Script. # Algo: # 1) Input number n - Nhập vào số n # 2) Set rev=0, sd=0 - đặt rev=0(Số đảo ngược), sd=0(Số trái nhất) # 3) Find single digit in sd as n % 10 it will give (left most digit) # Tìm số sd=n%10(% Phép chia lấy phần dư) (là số phải nhất của n) # 4) Construct revrse no as rev * 10 + sd - Xây dựng số rev: rev=rev*10+sd # 5) Decrment n by 1 (Chỗ này sai) phải gán n=n/10 (Phép chia lấy phần nguyên) # 6) Is n is greater than zero, if yes goto step 3, otherwise next step # n vẫn còn lớn hơn 0? nếu đúng, quay lại bước 3, ngược lại đến bước tiếp # 7) Print rev - In số đảo ngược rev # if [ $# -ne 1 ] # kiểm tra số đối số nhập vào (Ở đây chỉ cần nhập 1 đối số) then echo "Usage: $0 Chưa nhập số" echo " I will find reverse of given number -" # Không cần quan tâm echo " For eg. $0 123, I will print 321" # Không cần quan tâm exit 1 fi n=$1 rev=0 sd=0 while [ $n -gt 0 ] #Vòng lặp down to do sd=`expr $n % 10` rev=`expr $rev \* 10 + $sd` n=`expr $n / 10` #VD: nếu n=123 khi gán n=n/10 thì n=12 done echo "Số đảo ngược là $rev" Q.7.Write script to print given numbers sum of all digit, For eg. If no is 123 it's sum of all digit will be 1+2+3 = 6. Q.7.Viết Shell scrip để in tổng tất cả các số trong chữ số, ví dụ: nếu số là 123 ta phải in ra tổng của tất cả các chữ số 1 2 3 = 6. Algo: # 1) Input number n - Nhập vào số n(Truyền qua đối số) # 2) Set sum=0, sd=0 - Đặt sum=0 (Số tổng), Sd=0 # 3) Find single digit in sd as n % 10 it will give (left most digit) # Tìm được số sd=n%10(% Phép chia lấy phần dư) (là số bên phải nhất của n) # 4) Construct sum no as sum=sum+sd - Xây dựng số tổng sum=sum+sd # 5) Decrment n by 1 (Chỗ này sai) phải Gán n=n/10 (Chia lấy phần nguyên) # 6) Is n is greater than zero, if yes goto step 3, otherwise next step # n vần lớn hơn 0? nếu đúng, nhảy đến bước 3, nếu không chuyển bước tiếp. # 7) Print sum - In tổng # if [ $# -ne 1 ] #Kiểm tra số đối số nhập vào (Ở đây chỉ cần 1 đối số) then echo "Usage: $0 kiếm tra đối số" echo " I will find sum of all digit for given number" #Kô cần quan tâm echo " For eg. $0 123, I will print 6 as sum of all digit (1+2+3)" exit 1 fi n=$1 sum=0 sd=0 while [ $n -gt 0 ]#Vong lặp down to do sd=`expr $n % 10` #lấy số phải nhất của n,Vd: n=123 thì sd=3 sum=`expr $sum + $sd` #Cộng dồn vào tổng sum n=`expr $n / 10` #VD: nếu n=123 khi gán n=n/10(Chia lấy phần nguyên) thì n=12 done echo "Tổng của tất cả các chữ số là $sum" Q.8.How to perform real number (number with decimal point) calculation in Linux Làm thế nào để tính toán số thực (Số với phần thập phân) trong linux Trả lời: Sử dụng lệnh bc trong linux Q.9.How to calculate 5.12 + 2.5 real number calculation at $ prompt in Shell ? Làm thế nào để thực hiện phép tính số thực 5.12+2.5 với dấu nhắc $ trong Shell Scrip  Trả lời: Sử dụng lệnh echo $ 5,12 + 2,5 | bc Q.10.How to perform real number calculation in shell script and store result to third variable , lets say a=5.66, b=8.67, c=a+b? Answer: See Q10 shell Script. Q.10. Làm thế nào để tính toán số thực trong Shell scrip với 3 biến lưu trữ, hãy thực hiện với a = 5.66, b = 8.67, tính c = a + b? a=5.66 b=8.67 c=`echo $a + $b | bc` echo "$a + $b = $c" Q.11.Write script to determine whether given file exist or not, file name is supplied as command line argument, also check for sufficient number of command line argument Answer: See Q11 shell Script. Q.11. Viết Shell Scipt để xác định tập tin đã cho có tồn tại hay không, tên tập tin được cung cấp như đối số dòng lệnh, Kiểm tra xem có đủ đối số không if [ $# -ne 1 ] #Kiểm tra số đối số truyền vào (ở bài này chỉ cần 1) then echo "Usage - $0 file-name" exit 1 fi if [ -f $1 ] #Kiểm tra sự tồn tại của tên file (tên file được truyền vào $1) then echo "$1 File tồn tại" else echo "Xin lỗi,File $1 không tồn tại" fi Q.12.Write script to determine whether given command line argument ($1) contains "*" symbol or not, if $1 does not contains "*" symbol add it to $1, otherwise show message "Symbol is not required". For e.g. If we called this script Q12 then after giving , $ Q12 /bin Here $1 is /bin, it should check whether "*" symbol is present or not if not it should print Required i.e. /bin/*, and if symbol present then Symbol is not required must be printed. Test your script as $ Q12 /bin $ Q12 /bin/* Answer: See Q12 shell Script Q.12. Viết Shell Script để xác định đối số dòng lệnh ($ 1) truyền vào có chứa ký tự "*" hay không, nếu $ 1 không có ký tự "*" ta thêm nó vào $ 1, nếu có ký tự "*" hiển thị thông báo "Không tồn tại ký tự". Giả sử nếu ta đặt tên Shell Cript này là q12 thì khi thực hiện sẽ đưa ra: $ Q12 / bin Ở đây $1 là / bin, cần kiểm tra xem ký tự "*" có tồn tại hay không nếu không cần in / bin / *, và nếu tồn tại ký tự "*" không cần thiết phải được in. kết quả Shell script thử nghiệm: $ Q12 / bin $ Q12 / bin / * cat "$1" > /tmp/file.$$ 2>/tmp/file0.$$ #Tạo file file.$$ và đưa nd đối số vào file grep "*" /tmp/file.$$ >/tmp/file0.$$ #tìm * trong nd file if [ $? -eq 1 ] #Chỗ này chưa hiểu $? Là gì then echo "Required i.e. $1/*" else echo "Không tồn tại ký tự" fi rm -f /tmp/file.$$ rm -f /tmp/file0.$$

Các file đính kèm theo tài liệu này:

  • docbai_tap_unix22_0137.doc