[9-13/15]課後練習彙總

一、作業(練習)內容:

1、描述shell程序的運行原理(可附帶必要的圖形說明);

2、總結shell編程中所涉及到的所有知識點(如:變量、語法、命令狀態等等等,要帶圖的喲);

3、總結課程所講的所有循環語句、條件判斷的使用方法及其相關示例;(if (jpg|png is not exist);echo ”You say a XX“)

SHELL整理彙總:

4、總結文本處理工具sed及awk的用法;(必須附帶示例)

Sed、Awk整理彙總:

5、寫一個腳本:如果某路徑不存在,則將其創建爲目錄;否則顯示其存在,並顯示內容類型;(不要懷疑,就是這麼簡單) 

代碼實現:

1
2
3
4
5
6
7
8
9


#!/bin/bash
read -p"Please Enter a PATH: " pathname
if [ -e $pathname ];then
  echo 
"PATH--> $pathname exists!"
  echo 
"TYPE--> `file $pathname|cut -d: -f2`"
else
  echo 
"PATH isn't existed.Then we create it"
  mkdir -p $pathname
fi

實驗效果:

wKiom1YEKqHhmJY4AAsbqDe_m60511.bmp

6、寫一個腳本,完成如下功能;判斷給定的兩個數值,孰大孰小;給定數值的方法:腳本參數,命令交互;

代碼實現:

1
2
3
4
5
6
7
8
9


#!/bin/bash
read -p "Please Enter 2 Numbers:" num1 num2
if [ $num1 -eq $num2 ];then
    echo 
"Tease me? They are the same number!"
elif [ $num1 -lt $num2 ];then
    echo 
"$num1 < $num2" 
else
    echo 
"$num1 > $num2"
fi

實驗效果:

wKioL1YEKrniVsxBAAc4CNqGCBU742.bmp

7、求100以內所有奇數之和(至少用3種方法。是的這是我們的作業^_^)

代碼1:until+自增+$[]的方法

1
2
3
4
5
6
7
8
9


#!/bin/bash
i=1
sum=0
until [ $i -gt 
100 ]
do
sum=$[$sum+$i]
i=$[$i+
2]
done
echo 
"1+3+5+...+97+99 = $sum"

代碼2:for+seq+let的方法

1
2
3
4
5
6
7


#!/bin/bash
sum=0
for i in $(seq 1 2 100)
do
let 
"sum=$sum+$i"
done
echo 
"$sum"

代碼3:奇偶判斷+((運算))+for實現

1
2
3
4
5
6
7
8
9
10
11


#!/bin/bash
sum=0
for i in $(seq 100)
do
var=$[$i%
2]
if [ $var -eq 1 ];then
((
sum=$sum+$i))
i=`expr $i + 
1`
fi
done
echo 
"1+3+5+...+97+99 = $sum"

實驗效果:

wKiom1YEK6yyCzjlAANL-CP7HWU424.bmp

8、寫一個腳本實現如下功能:

(1) 傳遞兩個文本文件路徑給腳本;

(2) 顯示兩個文件中空白行數較多的文件及其空白行的個數;

(3) 顯示兩個文件中總行數較多的文件及其總行數;

代碼實現:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24


#!/bin/bash
read -p "Please Give me two File_PATH-->" file1 file2
all_line1=`wc -l $file1 |cut -d
' ' -f1`
all_line2=`wc -l $file2 |cut -d
' ' -f1`
space_line1=`grep 
"^$" $file1 | wc -l |cut -d' ' -f1`
space_line2=`grep 
"^$" $file2 | wc -l |cut -d' ' -f1`
#Case 1: Which file has more space_lines and print.
echo "Which has more space lines?"
if [ $space_line1 -eq $space_line2 ];then
    echo 
"They have same space lines. Counts: $space_line1 Lines."
elif [ $space_line1 -lt $space_line2 ];then
    echo 
"File $file2 . Counts: $space_line2 Lines."
esle
    echo 
"File $file1 . Counts: $space_line1 Lines."
fi
#Case 2: Which file has more lines and print.
echo "Which has more lines?"
if [ $all_line1 -eq $all_line2 ];then
    echo 
"They have same lines. Counts: $all_line1 Lines."
elif [ $space_line1 -lt $space_line2 ];then
    echo 
"File $file2 . Counts: $all_line2 Lines."
esle
    echo 
"File $file1 . Counts: $all_line1 Lines."
fi

實驗效果:

wKiom1YELIjQL1tbAAagKJgsVUM220.bmp

9、寫一個腳本

(1) 提示用戶輸入一個字符串;

(2) 判斷:如果輸入的是quit,則退出腳本;否則,則顯示其輸入的字符串內容;

代碼實現:

1
2
3
4
5
6
7


#!/bin/bash
read -p "Please Enter a String: " str
if [ $str = "quit" ];then
    exit
else
    echo 
"$str"
fi

實驗效果:

wKioL1YELSnjAcsiAAU1WIRX5cA970.bmp

補充說明:如果用戶輸入的str中包含了空格如何處理呢?read後做一次判斷操作即可!   

1
2
3
4
5
6
7
8
9
10
11


#!/bin/bash
read -p "Please Enter a String: " str
echo $str | grep 
"[[:space:]]\+" &>/dev/null
var=$?
if [ $var -eq 0 ];then
echo 
"No a standard string."
elif [ $str = "quit" ];then
exit
else
echo 
"$str"
fi

10、寫一個腳本,打印2^n表;n等於一個用戶輸入的值;(不好意思,我調皮了)

代碼1:[For循環實現]

1
2
3
4
5
6


#!/bin/bash    
read -p "Please Enter the N: " n
for i in $(seq 0 $n)
do
echo 
"2^$i=$[2**$i]"
done

代碼2:[while循環實現]   

1
2
3
4
5
6
7
8


#!/bin/bash
read -p "Please Enter the N: " n
i=
0
while [ $i -le $n ]
do
echo 
"2^$i=$[2**$i]"
i=`expr $i + 
1`
done

代碼3:[until循環]   

1
2
3
4
5
6
7
8


#!/bin/bash
read -p "Please Enter the N: " n
i=
0
until [ $i -gt $n ] 
do
    echo 
"2^$i=$[2**$i]"
    i=`expr $i + 
1`
done

實驗效果:

wKioL1YELsSCg-NoAAZlGMyh0jc875.bmp

11、寫一個腳本,寫這麼幾個函數:

函數1、實現給定的兩個數值的之和;

函數2、取給定兩個數值的最大公約數;

函數3、取給定兩個數值的最小公倍數;關於函數的選定、兩個數值的大小都將通過交互式輸入來提供。

思路分析:

    求最大公倍數涉及數學方法,百度百科得到通常使用:輾轉相除法、更相減損法、質因數分解法等,用代碼實現即可,而最小公倍數=(A * B ) / 最大公約數。

代碼實現:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48


#!/bin/bash
echo "+---------------------+"
echo 
"|Select Operation: |"
echo 
"| 1 -> Sum |"
echo 
"| 2 -> Common Divisor |"
echo 
"| 3 -> Common Multiple|"
echo 
"+---------------------+"
read -p "Select Operation:-->" op
read -p "Please Two Numbe:-->" a b

function 
sum() {
    sum_value=`expr $a + $b`
}

function visor() {
    r=
"1"
    
while [ $r != 0 ]
    do
        r=$[$a%$b]
        a=$b
        b=$r
    done
    visor_value=$a
}

function mul() {
    product=$[$a*$b]
    visor $a $b
    mul_value=$[$product/$visor_value]
}

case $op 
in
1)
    
sum $a $b
    echo 
"SUM = $sum_value"
    ;;
2)
    visor $a $b
    echo 
"VISOR = $visor_value"
    ;;
3)
    mul $a $b
    echo 
"MUL= $mul_value"
    ;;
*)
    echo 
"You mock me?"
    ;;
esac

實驗效果:

wKiom1YEMS_Bkz7bAA1gWEcvs5A090.bmp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章