shell编程学习笔记之一--学习第一天

迈不过友情╰ 2023-06-14 14:58 128阅读 0赞

文章目录

  • 一、说明:
    • 1、整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)
    • 2、Linux下vim/vi 编辑器 命令总结
    • 3、学习课件:
  • 二、跟着视频实践开始:
    • 1、打出hello world:
      • ①、更改sh文件权限执行
      • ②、不更改文件权限执行:
    • 2、shell编程之变量
      • ①、变量的简单使用
      • ②、几个shell的常见系统变量
        • 1、测试`$0`和`$n`:
        • 2、测试`$*、$#、$?`
      • ③、LAMP菜单导航编写:
    • 3、if条件语句:
      • ①、判断俩个数字大小
      • ②、一些逻辑运算符(熟练记得)
      • ③、判断文件夹是否存在:
      • ④、判断文件是否存在:
      • ④、成绩分数分类:

一、说明:

打算从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. 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!:
he

第一个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. 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. name=zhaojiafu
  5. echo "My name is $name"
  6. echo $UID
  7. 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. name=zhaojiafu
  5. echo "My name is $name"
  6. echo $UID
  7. echo $PWD
  8. echo "***********************************"
  9. echo "$ 0 $0 "
  10. echo "$ 1 $1"
  11. echo "$ 2 $2"
  12. ~

我感觉这样更能表达出效果:
$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. name=zhaojiafu
  5. echo "My name is $name"
  6. echo $UID
  7. echo $PWD
  8. echo "***********************************"
  9. echo "$ 0 $0 "
  10. echo "$ 1 $1"
  11. echo "$ 2 $2"
  12. echo "***********************************"
  13. echo "This is \$* $*"
  14. echo "This is \$\# $#"
  15. 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. echo -e "\033[31m Please select Menu follow:\033[1m"
  4. echo "1)安装apache服务器."
  5. echo "2)安装Mysql服务器."
  6. echo "3)安装PHP服务器."
  7. echo "4)配置LAMP WEB架构."
  8. 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. NUM1=100
  5. num2=200
  6. if (($NUM1 > $num2));then
  7. echo "This is $NUM1 greate $num2"
  8. else
  9. echo "This is $NUM1 less $num2"
  10. 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. path=./shell_study/1
  5. if [ ! -d $path ];then
  6. mkdir -p $path
  7. echo -e "\033[32m$path create success! \033[0m"
  8. else
  9. echo -e "\033[32m$path id exists,exit\033[0m"
  10. fi

输入执行shell脚本命令:

  1. /bin/bash if_is_dir.sh

然后自动创建一个文件夹
在这里插入图片描述
创建了文件夹。
在这里插入图片描述

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

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

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

第一次执行:
在这里插入图片描述
第二次执行:
在这里插入图片描述

④、成绩分数分类:

创建shell脚本

  1. vim score.sh

敲入逻辑代码:

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

测试:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
结果输入110 竟然页数优秀,所以,需要加个限制:

在这里插入图片描述

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,128人围观)

还没有评论,来说两句吧...

相关阅读