1、做業(練習)內容:
shell
一、描述shell程序的運行原理(可附帶必要的圖形說明);編程
二、總結shell編程中所涉及到的全部知識點(如:變量、語法、命令狀態等等等,要帶圖的喲);數組
三、總結課程所講的全部循環語句、條件判斷的使用方法及其相關示例;(if (jpg|png is not exist);echo 」You say a XX「)bash
SHELL整理彙總:ide
四、總結文本處理工具sed及awk的用法;(必須附帶示例)函數
Sed、Awk整理彙總:工具
五、寫一個腳本:若是某路徑不存在,則將其建立爲目錄;不然顯示其存在,並顯示內容類型;(不要懷疑,就是這麼簡單) 測試
代碼實現:ui
1 2 3 4 5 6 7 8 9 spa |
|
#!/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 |
實驗效果:
![1.bmp wKiom1YEKqHhmJY4AAsbqDe_m60511.bmp](http://static.javashuo.com/static/loading.gif)
六、寫一個腳本,完成以下功能;判斷給定的兩個數值,孰大孰小;給定數值的方法:腳本參數,命令交互;
代碼實現:
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 |
實驗效果:
![2.bmp wKioL1YEKrniVsxBAAc4CNqGCBU742.bmp](http://static.javashuo.com/static/loading.gif)
七、求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" |
實驗效果:
![3.bmp wKiom1YEK6yyCzjlAANL-CP7HWU424.bmp](http://static.javashuo.com/static/loading.gif)
八、寫一個腳本實現以下功能:
(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 |
實驗效果:
![4.bmp wKiom1YELIjQL1tbAAagKJgsVUM220.bmp](http://static.javashuo.com/static/loading.gif)
九、寫一個腳本
(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 |
實驗效果:
![5.bmp wKioL1YELSnjAcsiAAU1WIRX5cA970.bmp](http://static.javashuo.com/static/loading.gif)
補充說明:若是用戶輸入的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 |
十、寫一個腳本,打印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 |
實驗效果:
![Image 9.bmp wKioL1YELsSCg-NoAAZlGMyh0jc875.bmp](http://static.javashuo.com/static/loading.gif)
十一、寫一個腳本,寫這麼幾個函數:
函數一、實現給定的兩個數值的之和;
函數二、取給定兩個數值的最大公約數;
函數三、取給定兩個數值的最小公倍數;關於函數的選定、兩個數值的大小都將經過交互式輸入來提供。
思路分析:
求最大公倍數涉及數學方法,百度百科獲得一般使用:展轉相除法、更相減損法、質因數分解法等,用代碼實現便可,而最小公倍數=(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 |
實驗效果:
![Image 10.bmp wKiom1YEMS_Bkz7bAA1gWEcvs5A090.bmp](http://static.javashuo.com/static/loading.gif)