一、说明:

打算从B站学习一下shell编程,从很多的课程视频中,挑选了一个:
B站视频地址
打算开始学习着做着笔记:
这个需要一些Linux基础,还有vim的,如果不太熟练,可以看下我之前的整理的俩个博客:

1、整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)

整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)

2、Linux下vim/vi 编辑器 命令总结

Linux下vim/vi 编辑器 命令总结

3、学习课件:

这个地址我直接把B站中评论下方分享的弄出来了,如果失效,可以下方评论,我把我下载的分享给你。
下载地址

二、跟着视频实践开始:

建议打开我之前的来个博客(如果对vim和linux不太熟悉),然后看着视频,开始学习跟着视频写出代码。如果只看一遍,我感觉我是记不住的,还能多熟练一下Linux知识。

第一天,加油!!!

1、打出hello world:

①、更改sh文件权限执行

linux的命令,我这里新建一个学习文件夹,跟着学习视频系统学习一波shell编程:

1
mkdir shell_study
2
cd shell_study/
3
vim first_shell.sh

在first_shell.sh中敲入这些代码,(建议和我一样的之前不会shell的,自己敲一遍,不要做眼高手低的人。)

1
#!/bin/bash
2
#Filename:first_shell.sh
3
#auto echo hello world!
4
#by authors zhaojiafu 2019
5
6
echo "Hello world!"

echo 相当于python的print,就是一个打印的功能

在这里插入图片描述
在这里插入图片描述

然后,wq保存即可(vim的文本操作,小白不会的可以打开我的vim博客,需要什么搜索跟着实现)。

然后更改文件权限chmod
这个我linux命令必须熟练掌握常的命令这个博客里面有常用的一些命令总结。不会的也可以常常学习看看。

1
chmod 777 first_shell.sh
2
chmod o+x first_shell.sh

然后:

1
./first_shell.sh

打印出Hello world!:

在这里插入图片描述
在这里插入图片描述

第一个shell命令就完成了,是不是很简单。

②、不更改文件权限执行:

看到视频的命令,他用的问件是同一个,而且之前的权限改了,所以,我重新再写一个,测试试试:

1
vim first_shell2.sh

写入:

1
#!/bin/bash
2
#Filename:first_shell.sh
3
#auto echo hell world!
4
#by authors zhaojiafu 2019
5
6
echo "Hello world22!"
在这里插入图片描述
在这里插入图片描述

然后保存:

1
/bin/bash ./first_shell2.sh
在这里插入图片描述
在这里插入图片描述

为了再一次证实俩个文件权限不一样:

1
ll
在这里插入图片描述
在这里插入图片描述

可以看出俩个文件权限确实不一样,但是都可以实现,这样,对于视频的讲解也能更理解深刻了,这样虽说学习的速度是慢了一些,但对于第一次学习,效果觉得很好,坚持下去,学会了才是自己的,不然还是别人的。

2、shell编程之变量

①、变量的简单使用

变量的使用需要$ 而且赋值不需要空格,和python有区别。

1
vim var.sh

敲入代码(熟练vim的可以复制,其他建议自己和我一样,敲出来学习效果比较好,以后不再赘述):

1
#!/bin/bash
2
#define path variables
3
#by authors zhaojiafu 2019
4
5
name=zhaojiafu
6
7
echo "My name is $name"
8
9
echo $UID
10
11
echo $PWD

然后直接使用不更改权限执行shell脚本:

在这里插入图片描述
在这里插入图片描述

②、几个shell的常见系统变量

1
SHELL 常见的系统变量解析 :
2
$0 当前程序的名称
3
$n 当前程序的第 n 个参数 ,n=1,2, , 9
4
$* 当前程序的所有参数 ( 不包括程序本身 )
5
$# 当前程序的参数个数 ( 不包括程序本身 )
6
$? 命令或程序执行完后的状态,一般返回 0 表示执行成功。
7
$UID 当前用户的 ID
8
$PWD 当前所在的目录

1、测试$0$n:

1
vim var.sh

敲入代码:

1
#!/bin/bash
2
#define path variables
3
#by authors zhaojiafu 2019
4
5
name=zhaojiafu
6
7
echo "My name is $name"
8
9
echo $UID
10
11
echo $PWD
12
13
14
echo "***********************************"
15
16
echo "$ 0 $0 "
17
18
echo "$ 1 $1"
19
echo "$ 2 $2"
20
~

我感觉这样更能表达出效果:
$0就是文件名称
$1和$2为空

1
/bin/bash var.sh
在这里插入图片描述
在这里插入图片描述
1
/bin/bash var.sh hello word everyone

这个就是shell会把空格分开的作为传入的参数。

在这里插入图片描述
在这里插入图片描述

2、测试$*、$#、$?

1
vim var.sh

敲入代码:

1
#!/bin/bash
2
#define path variables
3
#by authors zhaojiafu 2019
4
5
name=zhaojiafu
6
7
echo "My name is $name"
8
9
echo $UID
10
11
echo $PWD
12
13
14
echo "***********************************"
15
16
echo "$ 0 $0 "
17
18
echo "$ 1 $1"
19
echo "$ 2 $2"
20
21
echo "***********************************"
22
23
echo "This is \$* $*"
24
echo "This is \$\# $#"
25
echo "This is \$? $?"

执行shell脚本:

1
/bin/bash var.sh hello word everyone
在这里插入图片描述
在这里插入图片描述

③、LAMP菜单导航编写:

1
vim var2.sh

敲入代码:

1
#!/bin/bash
2
#by authors zhaojiafu 2019
3
4
echo -e "\033[31m Please select Menu follow:\033[1m"
5
6
echo "1)安装apache服务器."
7
echo "2)安装Mysql服务器."
8
echo "3)安装PHP服务器."
9
echo "4)配置LAMP WEB架构."
10
11
echo "---------------------------------------------"

保存后执行:
发现视频中,直接sh 后面跟着shell脚本也是可以执行。现在知道三个方式可以执行shell脚本命令了。

在这里插入图片描述
在这里插入图片描述

3、if条件语句:

①、判断俩个数字大小

1
vim if_test.sh

敲入逻辑代码:
记得:

  1. if后面要跟then
  2. 最后面要跟上fi才算得上完整的if语句,不然报错。
1
#!/bin/bash
2
#auto if test
3
#by authors zhaojiafu 2019
4
5
NUM1=100
6
num2=200
7
8
if (($NUM1 > $num2));then
9
        echo "This is $NUM1 greate $num2"
10
else
11
        echo "This is $NUM1 less $num2"
12
fi

运行脚本:

1
sh if_text.sh
在这里插入图片描述
在这里插入图片描述

②、一些逻辑运算符(熟练记得)

逻辑运算符解析:

1
-f  判断文件是否存在 eg: if [ -f filename ]
2
-d  判断目录是否存在 eg: if [ -d dir ]
3
-eq  等于 应用于:整型比较
4
-ne  不等于 应用于:整型比较
5
-lt  小于 应用于:整型比较
6
-gt  大于 应用于:整型比较
7
-le  小于或等于 应用于:整型比较
8
-ge  大于或等于 应用于:整型比较
9
-a  双方都成立( and) 逻辑表达式 –a 逻辑表达式
10
-o  单方成立( or) 逻辑表达式 –o 逻辑表达式
11
-z  空字符串

③、判断文件夹是否存在:

注意点

  1. 判断的中括号必须要都有空格,不然报错,我第一次$path]没有空格,就会报错。 [ ! -d $path ]
  2. 使用颜色字体,记得echo后面跟着-e,我刚刚忘了,然后没颜色,还把\033[32m这些都打印出来了。后来加入-e 就好了。

vim创建文件,并进入敲入代码

1
vim if_is_dir.sh

敲入代码:

其中这个路径可以是相对路径(相对于当前shell执行脚本文件的位置),因为视频的教学中使用的是绝对路径,我这里直接使用相对路径测试。

1
#!/bin/bash
2
#auto is dir
3
#by zhaojiafu 2019
4
5
path=./shell_study/1
6
7
if [ ! -d $path ];then
8
        mkdir -p $path
9
        echo -e "\033[32m$path create success! \033[0m"
10
else
11
        echo -e  "\033[32m$path id exists,exit\033[0m"
12
fi

输入执行shell脚本命令:

1
/bin/bash if_is_dir.sh

然后自动创建一个文件夹

在这里插入图片描述
在这里插入图片描述

创建了文件夹。

在这里插入图片描述
在这里插入图片描述

到这里,我想使用之前的一个常用系统变量$n传参进行一个自动化脚本,判断是否存在目录。

代码改为:
只是把之前的固定目录,换成了$1,用来传参。

1
#!/bin/bash
2
#auto is dir
3
#by zhaojiafu 2019
4
5
#path=./shell_study
6
path=$1
7
8
if [ ! -d $path ];then
9
        mkdir -p $path
10
        echo -e "\033[32m$path create success! \033[0m"
11
else
12
        echo -e  "\033[32m$path id exists,exit\033[0m"
13
fi

然后执行命令试试:

1
/bin/bash if_is_dir.sh 1/2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进入1目录,还有个2目录:

在这里插入图片描述
在这里插入图片描述

所以我们测试成功了。

如果再执行一次,就会提示已经存在目录。

在这里插入图片描述
在这里插入图片描述

④、判断文件是否存在:

1
vim is_file.sh

写入代码:

1
#!/bin/bash
2
#auto is file
3
#by authors zhaojiafu 2019
4
5
File=$1
6
7
if [ ! -f $File ];then
8
        echo "ok" >> $File
9
else
10
        echo -e "\033[32m-----------------------------------\033[1m"
11
        cat $File
12
fi

第一次执行:

在这里插入图片描述
在这里插入图片描述

第二次执行:

在这里插入图片描述
在这里插入图片描述

④、成绩分数分类:

创建shell脚本

1
vim score.sh

敲入逻辑代码:

1
#!/bin/bash
2
#auto score class
3
#by authors zhaojiafu 2019
4
5
score=$1
6
7
if [ -z $score ];then
8
        echo "请输入分数"
9
        exit
10
else
11
        if [ $score -gt 90 ];then
12
                echo "优秀"
13
        elif [ $score -gt 80 ];then
14
                echo "良好"
15
        elif [ $score -gt 70 ];then
16
                echo "中等"
17
        elif [ $score -gt 60 ];then
18
                echo "及格"
19
        else
20
                echo "不及格"
21
        fi
22
fi

测试:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结果输入110 竟然页数优秀,所以,需要加个限制:

在这里插入图片描述
在这里插入图片描述

这个不知道为什么,我把大于100或者小于0合并到一个判断里面,总是报错,分开就好了,如果有懂得欢迎给我讲讲哈。

1
#!/bin/bash
2
#auto score class
3
#by authors zhaojiafu 2019
4
5
score=$1
6
7
if [ -z $score ];then
8
        echo "请输入分数"
9
        exit
10
elif [[ $score -gt 100 ]];then
11
        echo "输入的分数有误,分数在0-100之间"
12
13
# elif [[ $score -gt 100 -o  $score -lt 0 ]];then
14
elif [[ $score -lt 0 ]];then
15
        echo "输入的分数有误,分数在0-100之间"
16
else
17
        if [ $score -gt 90 ];then
18
                echo "优秀"
19
        elif [ $score -gt 80 ];then
20
                echo "良好"
21
        elif [ $score -gt 70 ];then
22
                echo "中等"
23
        elif [ $score -gt 60 ];then
24
                echo "及格"
25
        else
26
                echo "不及格"
27
        fi
28
fi
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述