老师上午给我们讲解了昨天留的五道作业,给我们一一作了演示,而我也默默的按照老师输入的命令一一给记录下来了。然后老师才接着给我们讲后续内容:
作业
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整除
今天老师讲的内容比较少,应该算作是补充吧,随后老师就给我们留了以上的作业,制作出来就是万年历,据老师说要是能够调用函数只需写一百多行命令就好了,要是不调用函数,那就指不定能不能写完或者什么时候写完了。
通过这三天紧锣密鼓、头脑风暴、爆炸式、醍醐灌顶般的高密度学习,我还只是把这些命令过了一遍,最基本的单个单词单个命令所代表的意思以及输入命令时的语法都没掌握,现在仍是想做作业但不知道如何下手,不知道使用哪些命令语句,现在只想尽快搞明白那些单词的意思和使用的语法。现在感觉门外汉想入门的话难度不是一般的难。