电商专业学习linux第三天

老师上午给我们讲解了昨天留的五道作业,给我们一一作了演示,而我也默默的按照老师输入的命令一一给记录下来了。然后老师才接着给我们讲后续内容:

作业
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整除

今天老师讲的内容比较少,应该算作是补充吧,随后老师就给我们留了以上的作业,制作出来就是万年历,据老师说要是能够调用函数只需写一百多行命令就好了,要是不调用函数,那就指不定能不能写完或者什么时候写完了。

通过这三天紧锣密鼓、头脑风暴、爆炸式、醍醐灌顶般的高密度学习,我还只是把这些命令过了一遍,最基本的单个单词单个命令所代表的意思以及输入命令时的语法都没掌握,现在仍是想做作业但不知道如何下手,不知道使用哪些命令语句,现在只想尽快搞明白那些单词的意思和使用的语法。现在感觉门外汉想入门的话难度不是一般的难。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0.linux启动的步骤 设备加电----》BIOS自检-----》grub引导启动-----》加载内核----》...
    萌面大叔2阅读 4,181评论 0 1
  • shell脚本语句 运算符符 运算符的使用+ - * /1. expr是计算整数类型行的数据2. 运算符左右都要有...
    I踏雪寻梅阅读 2,844评论 0 2
  • 第一天的学习就遇到了我最为头疼的内容--二进制和十进制 作为一个纯文科出身的我最头疼的就是数字,就是运算,即便他们...
    雨打梨花闭门寒阅读 3,180评论 4 1
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 4,799评论 0 0
  • 你说你会保护我 你说的语气认真眼神诚恳 可是,我的挫折是来自你怎么办 你说,生气时会抱紧我 可是你为什么要让我生气...
    有海的森林阅读 1,148评论 0 1

友情链接更多精彩内容