Ôn thi thực hành Linux

Hoán vị giá trị của 2 biến 1 In ra Ước Số Chung Lớn Nhất của 2 số 1 In ra bội số chung nhỏ nhất của 2 số 1 Kiểm tra xem một chuỗi có phải là chuỗi số hay không 2 Kiểm tra xem số nhập vào có phải là số nguyên tố không 2 In ra các số nguyên tố trong khoảng từ min tới max 2 Nhập vào một chuỗi số, tách ra thành từng cặp 2 chử số và kiểm xem có phải là số nguyên tố hay không 3 Giải phương trình bậc 2 3 Giải hệ phương trình bậc 1 4 Nhập vào 2 ký tự, xuất ra tổng mã ASCII của chúng 5 In ra ngày giờ hệ thống bằng Tiếng Việt 5 Tính toán 2 số nhập từ bàn phím 6 Giả lập máy tính cá nhân 6

doc7 trang | Chia sẻ: maiphuongtl | Lượt xem: 2226 | Lượt tải: 3download
Bạn đang xem nội dung tài liệu Ôn thi thực hành Linux, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Hoán vị giá trị của 2 biến Vidu: a=3; b=6; HoanVi a b; -> a=6, b=3 HoanVi() { //Khai báo biến declare local HV_tmp //Chi thực hiện khi cả 2 tên biến đều khác NULL if [ "$1" != "" ] && [ "$2" != "" ]; then eval HV_tmp='$'$1 eval $1='$'$2 eval "$2='$HV_tmp'" fi return 0 //TRUE } In ra Ước Số Chung Lớn Nhất của 2 số (Là số lớn nhất mà cả 2 số nhập vào có thể chia hết) VD: a=45; b=20; USCLN $a $b; -> 5 USCLN() { //Khai báo biến local a=$1 local b=$2 //Thực hiện tìm USCLN của a,b while ! [ $a -eq $b ]; do [ $a -gt $b ] && let "a -= $b" || let "b -= $a" done //In kết quả echo $a return `[ $a -gt 1 ]` } In ra bội số chung nhỏ nhất của 2 số Là số nhỏ nhất có thể chia hết cho cả 2 số nhập vào Vi du: a=9; b=6; BSCLN $a $b; -> 18 BSCNN() { //Khai báo biến local a=$1 local b=$2 //Thực hiện tìm BSCNN của a,b while ! [ $a -eq $b ]; do [ $a -lt $b ] && let "a += $1" || let "b += $2" done //In kết quả echo $a return 0 //TRUE } Kiểm tra xem một chuỗi có phải là chuỗi số hay không KiemTraSo() { //Nếu chuỗi có chứa các ký tự khác số -> báo lỗi if [ "$1" = "" ]; then echo "Chuoi rong!" return 1 //FALSE fi if [ "$( echo "$1" | sed 's/[0-9]//g' )" != "" ]; then echo "$1 khong phai la so" return 1 //FALSE fi return 0 //TRUE } Kiểm tra xem số nhập vào có phải là số nguyên tố không Vi du: IsNguyenTo 23 -> TRUE IsNguyenTo() { //Khai báo biến declare local i declare local x2 local x=$1 //Kiểm tra các trường hợp đặc biệt // /1/ là số nguyên tố [ "$x" = "1" ] && return 0 //TRUE // /2/ là số nguyên tố [ "$x" = "2" ] && return 0 //TRUE // /số chẵn/ không là số nguyên tố [ $(($x%2)) -eq 0 ] && return 1 //FALSE //Kiểm tra các trường hợp còn lại x2=$(( $x / 2 )) for ((i=3; i<=$x2; i+=2)); do //Neu x chia het cho i thi x khong la so nguyen to [ $(($x%$i)) -eq 0 ] && return 1 //FALSE Done //Nếu x không chia hết cho số nào cả (i > x/2) thì x là số nguyên tố return `[ $i -gt $x2 ]` } In ra các số nguyên tố trong khoảng từ min tới max Vi du: DayNguyenTo 6 26 -> 7 11 13 17 19 23 DayNguyenTo() { //Khai báo biến local min=$1 local max=$2 declare local i //Nếu min>max thì đổi giá trị của 2 biến min và max if [ $min -gt $max ]; then min=$2; max=$1 fi //Trường hợp đạc biệt: "2" là số nguyên tố if [ $min -lt 3 ] && [ $max -ge 2 ]; then echo -n "2 " fi //Thông thường, các số nguyên tố đều là số lẻ //Nếu min là số chẵn thì min=min+1 [ $(($min%2)) -eq 0 ] && let min+=1 //Duyệt qua các số lẻ từ min tới max for ((i=min; i<=max; i+=2)); do if IsNguyenTo $i; then echo -n "$i " fi done echo return 0 //TRUE } Nhập vào một chuỗi số, tách ra thành từng cặp 2 chử số và kiểm xem có phải là số nguyên tố hay không Vi du: Nhap 7913281 KQ: 79 la SNT 13 la SNT 28 khong la SNT 1 la SNT ChuoiSoNguyenTo() { read -p "nhap vao mot chuoi so: " ChuoiSo if ! KiemTraSo "$ChuoiSo"; then return; fi echo "$ChuoiSo" | while read -n 2 So; do if IsNguyenTo $So; then echo "$So la so nguyen to" else echo "$So khong la so nguyen to" fi done } Giải phương trình bậc 2 GPTB2() { echo "Giai phuong trinh bac 2: ax^2 + bx + c = 0" read -p "Nhap a: " a if ! KiemTraSo "$a"; then return 1; fi read -p "Nhap b: " b if ! KiemTraSo "$b"; then return 1; fi read -p "Nhap c: " c if ! KiemTraSo "$c"; then return 1; fi if [ $a -eq 0 ]; then if [ $b -eq 0 ]; then if [ $c -eq 0 ]; then echo "Phuong trinh co vo so nghiem" else echo "Phuong trinh vo nghiem" fi else x=$( echo "scale=2; -$c / $b" | bc -l ) echo "Phuong trinh co mot nghiem don la: x = $x" fi else let "delta = $b**2 - 4*$a*$c" if [ $delta -lt 0 ]; then echo "Phuong trinh vo nghiem do delta<0" elif [ $delta -eq 0 ]; then x=$( echo "scale=2; -$b / (2*$a)" | bc -l ) echo "Phuong trinh co nghiem kep la: x1 = x2 = $x" else x1=$( echo "scale=2; (-$b+sqrt($delta))/(2*$a)" | bc -l ) x2=$( echo "scale=2; (-$b-sqrt($delta))/(2*$a)" | bc -l ) echo "Phuong trinh co 2 nghiem la: x1=$x1, x2=$x2" fi fi return 0 //TRUE } Giải hệ phương trình bậc 1 GHPTB1() { echo "Giai he phuong trinh bac 1: a1x + b1y = c1" echo " a2x + b2y = c2" read -p "Nhap a1: " a1 if ! KiemTraSo "$a1"; then return 1; fi read -p "Nhap b1: " b1 if ! KiemTraSo "$b1"; then return 1; fi read -p "Nhap c1: " c1 if ! KiemTraSo "$c1"; then return 1; fi read -p "Nhap a2: " a2 if ! KiemTraSo "$a2"; then return 1; fi read -p "Nhap b2: " b2 if ! KiemTraSo "$b2"; then return 1; fi read -p "Nhap c2: " c2 if ! KiemTraSo "$c2"; then return 1; fi let "D = $a1*$b2 - $a2*$b1" let "Dx = $c1*$b2 - $c2*$b1" let "Dy = $a1*$c2 - $a2*$c1" if [ $D -eq 0 ] && [ $Dx -eq 0 ] && [ $Dy -eq 0 ]; then echo "He co vo so nghiem!" else if [ $D -eq 0 ]; then echo "He vo nghiem!" else x=$( echo "scale=2; ($Dx/$D)" | bc -l ) y=$( echo "scale=2; ($Dy/$D)" | bc -l ) echo "He co nghiem la: x=$x, y=$y" fi fi return 0 //TRUE } Nhập vào 2 ký tự, xuất ra tổng mã ASCII của chúng TongMaAscii() { read -n 2 -p "Nhap vao 2 ky tu: " HaiKyTu // read -n -> Chỉ đọc vào tối đa là ký tự echo ChuoiAscii=$( echo -n "$HaiKyTu" | od -A n -t d1 ) ChuoiTong=$( echo $ChuoiAscii | sed "s/ / + /g" ) Tong=$(($ChuoiTong)) echo "Tong ma ascii cua 2 ky tu la: "$ChuoiTong" = $Tong" } In ra ngày giờ hệ thống bằng Tiếng Việt vnNgayGio() { NgayHienTai=$( date ) ChuoiThanhPhan=$( echo $NgayHienTai | tr ":" " " ) // Do có field gio:phut:giay -> cần chuyển thành gio phut giay Thu=$( echo $ChuoiThanhPhan | cut -d" " -f1 ) Thang=$( echo $ChuoiThanhPhan | cut -d" " -f2 ) Ngay=$( echo $ChuoiThanhPhan | cut -d" " -f3 ) Gio=$( echo $ChuoiThanhPhan | cut -d" " -f4 ) Phut=$( echo $ChuoiThanhPhan | cut -d" " -f5 ) Giay=$( echo $ChuoiThanhPhan | cut -d" " -f6 ) Nam=$( echo $ChuoiThanhPhan | cut -d" " -f8 ) Buoi=$( [ $Gio -gt 12 ] && echo "chieu" || echo "sang" ) case "$Thu" in "Mon") vnThu="Thu Hai";; "Tue") vnThu="Thu Ba";; "Wen") vnThu="Thu Tu";; "Thu") vnThu="Thu Nam";; "Fri") vnThu="Thu Sau";; "Sat") vnThu="Thu Bay";; "Sun") vnThu="Chu Nhat";; "*") vnThu="";; esac case "$Thang" in "Jan") vnThang="1";; "Fre") vnThang="2";; "Mar") vnThang="3";; "Apr") vnThang="4";; "May") vnThang="5";; "Jun") vnThang="6";; "Jul") vnThang="7";; "Aug") vnThang="8";; "Sep") vnThang="9";; "Oct") vnThang="10";; "Nov") vnThang="11";; "Dec") vnThang="12";; *) vnThang="";; esac //In ra chuỗi ngày giờ echo "$vnThu ngay $Ngay thang $vnThang nam $Nam, bay gio la $Gio gio $Phut phut $Giay giay $Buoi" } Tính toán 2 số nhập từ bàn phím Tinh2So() { if [ "$1" = "" ]; then read -p "Nhap chuoi tinh toan (m [+-*/] n): " BieuThuc else BieuThuc="$@" fi //Kiểm tra biểu thức hợp lệ if [ "$( echo "$BieuThuc" | grep "^[0-9]* *[+*/-] *[0-9]*$" )" = "" ]; then echo "Bieu thuc khong dung!" return fi KetQua=$( echo "scale=2; $BieuThuc" | bc -l ) echo "$BieuThuc = $KetQua" } Giả lập máy tính cá nhân MayTinhCaNhan() { BackSpace=$( echo -e "\b \b" ) Enter=$( echo -e "\n" ) declare KetQua declare So declare Dau declare KyTu echo "Nhan 0 1 2 3 4 5 6 7 8 9 + - * / = " echo " Nhan cac phim khac de ket thuc ham" echo -n ": " KetQua=0; So=""; Dau="" while :; do //Đọc một ký tự, -s -> không hiển thị ký tự đó ra màn hình read -n 1 -s KyTu case $KyTu in [0-9]) //Nếu ký tự nhập vào là số thì if [ "$So" = "" ]; then //Xoá dòng nhập khi bắt đầu số mới len=${#KetQua} for ((i=0; i<len; i++)); do echo -en "$BackSpace" done fi //Thêm KyTu vào So So=$So$KyTu //In ký tự vừa nhập ra màn hình echo -n $KyTu ;; [+*/=]|"-"|"$Enter") //Nếu nhập vào là dấu (không khải số) thì if [ "$So" = "" ]; then So=$KetQua fi if [ "$Dau" = "" ]; then //Nếu chưa gõ dấu,ó nghĩa là vừa nhập xong số thứ nhất -> không phải thực hiện phép tính KetQua=$So else //Nếu đã gõ dấu có nghĩa là vừa nhập xong số thứ 2 -> Thực hiện phép tính if [ "$Dau" = "/" ] && [ $So -eq 0 ]; then //Lỗi: device by zero KetQua="" else KetQua=$( echo "scale=2; ($KetQua $Dau $So)" | bc -l ) fi fi //Xóa số vừa nhập và hiện KetQua len=${#So} for ((i=0; i<len; i++)); do echo -en "$BackSpace" done echo -en $KetQua //Khởi gán lại các biến So=""; Dau="" //Nếu ký tự (dấu) nhập vào không phải là “=” thì lưu lại if [ "$KyTu" != "=" ]; then Dau=$KyTu fi ;; *) //Nếu nhấn các phím khác thì kết thúc chương trình break;; esac done echo }

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

  • docXuLyTinhToan.doc
  • rarChuoi-Mausac.rar
  • docin_linux.doc
  • rarMang.rar
  • docSoanThiThucHanh.doc
  • rarTaptin-Thumuc.rar
  • rarTienTrinh.rar
  • rarTinhtoan.rar
  • rartong hop.rar
  • docXuLyChuoi.doc
  • docXuLyFile.doc