Tải bản đầy đủ (.doc) (5 trang)

Bài tập hệ điều hành unix pot

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 (153.21 KB, 5 trang )

Translate by Vũ Đình Tùng

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
1
Translate by Vũ Đình Tùng

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
2
Translate by Vũ Đình Tùng

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)
3
Translate by Vũ Đình Tùng

# 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
4
Translate by Vũ Đình Tùng

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.$$
5

×