老師上午給我們講解了昨天留的五道作業,給我們一一作了演示,而我也默默的按照老師輸入的命令一一給記錄下來了。然后老師才接著給我們講后續內容:
作業
1.寫一個命令求階乘或是求和,比如說命令運行:
./xx.sh 6! 如果是這樣運行就執行階乘6x5x4x3x2x1
./xx.sh 6+ 如果是這樣運行就執行階乘6+5+4+3+2+1
//下面是老師給我們留的不正確的答案,可能是老師覺得問題較簡單,并沒有正面解決這個問題,百度上有求階乘或是求和的答案
arg1=$1
if [ $# != 1 ]
then
echo "參數過多或過少?。?!"
else
arglength=${#arg1}
let start=arglength-1
op=${arg1:start:1}
num=${arg1:0:start}
case $op in
"+")
sum=0
i=1
while [ $i -le $num ]
do
let sum=sum+i
let i++
done
echo "sum=${sum}"
;;
"!")
result=1
i=1
while [ $i -le $num ]
do
let result=result*i
let i++
done
echo "result=${result}"
;;
"*")
echo "usage:./xx.sh 6+? or? ./xx.sh 6!"
;;
esac
fi
3.使用while循環打印如圖所示的直角三角形
*
**
***
****
*****
******
row=1
colum=1
while [ $row -le 6 ]
do
colum=1
while [ $colum -le $row ]
do
printf "*"
let colum++
done
printf "\n"
let row++
done
4.打印乘法表
row=1
colum=1
while [ $row -le 9 ]
do
colum=1
while [ $colum -le $row ]
do
printf "%dx%d=%-2d" ${colum} ${row} $((colum*row))
let colum++
done
printf "\n"
let row++
done
5.創建當天文件夾
year=`date +%Y`
mouth=`date +%m`
day=`date +%d`
arg1=$1
if [ $# -eq 0 ]
then
mkdir -p ~/practice/$year/$mouth/$day
echo "${year}文件創建完成!!!"
cd ~/practice/$year/$mouth/$day
elif [ $# -eq 1 ]
then
case $arg1 in
"y")
mkdir -p ~/practice/$year/$mouth/$day
echo "${year}文件創建完成!!!"
cd ~/practice/$year
;;
"m")
mkdir -p ~/practice/$year/$mouth
echo "${mouth}文件創建完成!!!"
cd ~/practice/$year/$mouth
;;
"d")
mkdir -p ~/practice/$year/$mouth/$day
echo "${day}文件創建完成!!!"
cd ~/practice/$year/$mouth/$day
;;
"*")
echo "用法"
echo "1>-y:產生當年文件夾"
echo "2>-m:產生當月文件夾"
echo "3>-d:產生當日文件夾"
;;
esac
else
echo "用法"
echo "1>-y:產生當年文件夾"
echo "2>-m:產生當月文件夾"
echo "3>-d:產生當日文件夾"
fi
接下來就是老師今天講的新內容,講的雖然少,但是內容不少,需要消化。
16、數組
1>數組是保存多個變量的一個集合
2>數組的定義
1 array={1 2 3 4 5}
或
4array1[0]=2
5array1[1]=3
6array1[2]=5
7array1[3]="hello"
9echo "${array1[*]}"
3>數組的輸出
2echo "${array[@]}"
3echo "${array[*]}"
4>數組元素的訪問
${array[下標]}
下標的范圍:0~數組的大小-1
數組元素訪問越界,默認值為空
注意點:數組定義可以隔開定義,最好從0開始
17、shell函數
1>什么是函數
函數就是一個包,包代碼
案例入門:
1func()
2{
3 ? ?i=0
4 ? ?while [ $i -le 9 ]
5 ? ?do
6 ? ? ? printf "=====\n"
7 ? ? ? let i++
8 ? ?done
9}
10func
2>函數存在的意義
1)方便管理,提高代碼的重復使用
2)模塊性,功能性,提高以后的工作效率
3>函數格式
[functino]functinoname() ? ? ? \\[function]可有可無
{
語句體
}
4>函數調用
functionname
5>return的作用
1)return代表結束函數的運行,return下面的函數不會被執行
2)將return后面的值返回出去
注意點:return? num出來的值num只能在0-255之間,如果num大于255,那么實際return的結果是num%256;
實在需要返回一個num大于255,用echo,如果想要接受一個echo出來的值,使用``或$()
6>$?的作用
$?是接收最后運行的一個函數返回出來的結果
7>函數接收變量的值
函數內部
$0:./xx.sh
$1:代表函數后面的第一個參數
$2:代表函數后面的第二個參數
···
$n:代表函數后面的第n個參數
當n>=10時,就寫為${n}
$#:代表函數后面的參數個數
函數外部
$0:./xx.sh
$1:代表xx.sh后面的第一個參數
$2:代表xx.sh后面的第二個參數
···
$n:代表xx.sh后面的第n個參數
$#:代表命令后面的參數個數
8>函數定義注意點
1)函數內部可以定義函數
2)條件函數根據具體的條件定義
3)怎么保證函數一定調用成功
只要能夠保證函數調用之前,只要有這個函數的定義就可以了
unset num:清空
9>如果沒有指明某個變量的作用域,那么他的作用域全局的,所有我們一般情況下,如果不希望外面拿到函數內部的值,我們指明這個函數的作用域,用local修飾,代表這個變量只能在這個函數內部使用
作業:
自己寫一個mycal命令,最好使用函數
1>mycal,出現當年當月的函數
2>mycal 2016.6出現的2016.6月的日歷
3>mycal 2016,顯示整年
已知條件
1>1990.1.1是星期一
2>閏年的條件
? ? 1)能被4整除,且不能被100整除
? ? ? ? ?或者
? ? 2)能被400整除
今天老師講的內容比較少,應該算作是補充吧,隨后老師就給我們留了以上的作業,制作出來就是萬年歷,據老師說要是能夠調用函數只需寫一百多行命令就好了,要是不調用函數,那就指不定能不能寫完或者什么時候寫完了。
通過這三天緊鑼密鼓、頭腦風暴、爆炸式、醍醐灌頂般的高密度學習,我還只是把這些命令過了一遍,最基本的單個單詞單個命令所代表的意思以及輸入命令時的語法都沒掌握,現在仍是想做作業但不知道如何下手,不知道使用哪些命令語句,現在只想盡快搞明白那些單詞的意思和使用的語法?,F在感覺門外漢想入門的話難度不是一般的難。