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

痛定思痛。 2023-06-16 07:51 95阅读 0赞

文章目录

  • 一、说明:
    • 1、整理一些linux命令必须熟练掌握常的命令(复习+扩展学习Linux命令)
    • 2、Linux下vim/vi 编辑器 命令总结
    • 3、学习课件:
    • 4、之前的博客:
  • 二、实战演练:
    • 1、Until 循环语句
      • 1、语法格式
      • 2、打印出从10以下的数字:
    • 2、case语句:
      • 1、格式:
      • 2、LAMP简单提示选择菜单:
    • 3、select语句:
      • 1、开源系统选择:
      • 2、结合LAMP做个选择菜单:
    • 4、函数:(这个我看到的那个B站视频课程不对,还好有课件,看课件自己消化学习学习)
      • 1、定义:
      • 2、求俩个数的和
    • 5、Shell 数组编程

一、说明:

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

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

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

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

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

3、学习课件:

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

4、之前的博客:

shell编程学习笔记之–学习第一天
shell编程学习笔记之–学习第二天
shell编程学习笔记之–学习第三天

二、实战演练:

1、Until 循环语句

1、语法格式

  1. until 条件
  2. do
  3. action
  4. done

直到满足条件,才退出。否则执行 action 。

2、打印出从10以下的数字:

  1. vi untile_demo1.sh

敲入代码:

  1. #!/bin/bash
  2. #auto until demo1
  3. #by authors zhaojiafu
  4. a=10;
  5. until [[ $a -lt 0 ]];
  6. do
  7. echo -e "\033[32mThe Num is $a !\033[01"
  8. ((a--))
  9. done

在这里插入图片描述

2、case语句:

1、格式:

  1. case $arg in
  2. pattern1)
  3. 语句 1
  4. ;;
  5. pattern2)
  6. 语句 2
  7. ;;
  8. *)
  9. 语句 3
  10. ;;
  11. esac

2、LAMP简单提示选择菜单:

创建sh脚本

  1. vim case_demo.sh

敲入代码:

  1. #!/bin/bash
  2. # auto case demo
  3. # by authors zjf 2019
  4. case $1 in
  5. Apache )
  6. echo -e "\033[32m准备安装Apache。。。·\033[0m"
  7. ;;
  8. Mysql)
  9. echo -e "\033[32m准备安装Mysql。。。·\033[0m"
  10. ;;
  11. PHP)
  12. echo -e "\033[32m准备安装PHP。。。·\033[0m"
  13. ;;
  14. *)
  15. echo -e "\033[32mUsage $0 Apache|Mysql|PHP|help\033[0m"
  16. ;;
  17. esac

执行效果:
在这里插入图片描述
在这里插入图片描述

3、select语句:

Select 一般用于选择菜单的创建,可以配合 PS3来做菜单的打印输
出信息。

1、开源系统选择:

  1. vi select_demo.sh

敲入代码:

  1. #! /bin/bash
  2. #by authors zhaojiafu 2019
  3. PS3="What you like most of the open source system?"
  4. select i in "CentOS" "RedHat" "Ubuntu"
  5. do
  6. echo "You select $i"
  7. done

运行效果:
在这里插入图片描述

2、结合LAMP做个选择菜单:

创建sh脚本文件

  1. vi select_demo2.sh

敲入代码:

  1. #! /bin/bash
  2. #by authors zhaojiafu 2019
  3. PS3="Select install LAMP Menu"
  4. select i in "Apache" "Mysql" "PHP"
  5. do
  6. case $i in
  7. Apache )
  8. echo -e "\033[32m准备安装Apache。。。·\033[0m"
  9. ;;
  10. Mysql)
  11. echo -e "\033[32m准备安装Mysql。。。·\033[0m"
  12. ;;
  13. PHP)
  14. echo -e "\033[32m准备安装PHP。。。·\033[0m"
  15. ;;
  16. *)
  17. echo -e "\033[32mUsage $0 Apache|Mysql|PHP|help\033[0m"
  18. ;;
  19. esac
  20. done

执行结果:

在这里插入图片描述

4、函数:(这个我看到的那个B站视频课程不对,还好有课件,看课件自己消化学习学习)

1、定义:

shell 允许将一组命令集或语句形成一个可用块,这些块称为shell 函数,定义函数的格式:

  1. function name (){
  2. command1
  3. ........
  4. }
  5. name

2、求俩个数的和

先测试个简单函数的调用:

  1. #!/bin/bash
  2. #by authors zhaojiafu 2019
  3. function number_one () {
  4. echo "Url_1 1111"
  5. number_two
  6. }
  7. function number_two () {
  8. echo "Url_2 is 2222"
  9. }
  10. number_one

在这里插入图片描述

  1. function sum(){
  2. echo `expr $1 + $2`
  3. }
  4. if [[ ! -z $2 ]];then
  5. echo `sum`
  6. else
  7. echo "Usage: $0 num1 num2"
  8. fi

求和:

  1. vi 2num.sh

敲入代码:

  1. #!/bin/bash
  2. #by authors zhaojiafu 2019
  3. num1=3
  4. num2=4
  5. function sum(){
  6. echo `expr $num1 + $num2`
  7. #return `expr $num1 + $num2`
  8. ret1=`expr $num1 + $num2`
  9. return $ret1
  10. }
  11. result=`sum`
  12. echo "the sum is ${result}"

注意点,这个我卡了好一会,

  1. return `expr $num1 + $num2`

这个再函数中不会返回结果,需要前面给个变量,然后返回变量,或者直接

  1. echo `expr $num1 + $num2`

shell函数中,如果没有返回return,会把echo的所有当成字符串返回。

比如下面的代码:

  1. #!/bin/bash
  2. #by authors zhaojiafu 2019
  3. num1=3
  4. num2=4
  5. function sum(){
  6. ret1=`expr $num1 + $num2`
  7. echo `expr $num1 + $num2`
  8. echo $num1
  9. echo $num2
  10. #return `expr $num1 + $num2`
  11. #ret1=`expr $num1 + $num2`
  12. #return $ret1
  13. }
  14. result=`sum`
  15. echo "the sum is ${result}&&&&&&"

输出结果:可以看出,直接函数返回的结果是含有数字+回车+数字+回车+数字的字符串。
在这里插入图片描述
有return,就会只返回return的结果。

比如代码:

  1. #!/bin/bash
  2. #by authors zhaojiafu 2019
  3. num1=3
  4. num2=4
  5. function sum(){
  6. ret1=`expr $num1 + $num2`
  7. echo `expr $num1 + $num2`
  8. echo $num1
  9. echo $num2
  10. #return `expr $num1 + $num2`
  11. #ret1=`expr $num1 + $num2`
  12. return $ret1
  13. }
  14. result=`sum`
  15. echo "the sum is ${result}&&&&&&"

结果输出不对呀,还是和刚刚一样,这样return没有看出效果呀。
在这里插入图片描述

改写代码:

  1. #!/bin/bash
  2. #by authors zhaojiafu 2019
  3. num1=3
  4. num2=4
  5. function sum(){
  6. ret1=`expr $num1 + $num2`
  7. echo `expr $num1 + $num2`
  8. echo $num1
  9. echo $num2
  10. #return `expr $num1 + $num2`
  11. #ret1=`expr $num1 + $num2`
  12. return $ret1
  13. }
  14. #result=`sum`
  15. #echo "the sum is ${result}&&&&&&"
  16. sum
  17. result=$?
  18. echo "the sum is ${result}&&&&&&"

得到了我想要的结果,所以以后如果shell中想要函数的返回结果,还是先调用,然后使用$?得到想要的return结果。如果只是调用执行一些命令,而不需要返回结果,那就怎么样都行,只要进入函数就能执行。

在这里插入图片描述

5、Shell 数组编程

数组,就是相同数据类型的元素按一定顺序排列的集合,就是把 有限个类型相同的变量用一个名字命名, 然后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。

创建sh脚本

  1. vi arr1.sh

敲入代码:

  1. #!/bin/bash
  2. #auto arr1
  3. #by zhaojiafu 2019
  4. A=( "语文" "数学" "英语" "物理" "化学" )
  5. #数组的第一个元素
  6. echo ${A[0]}
  7. #数组的第2个元素
  8. echo ${A[1]}
  9. #数组的第3个元素
  10. echo ${A[2]}
  11. #数组的最后一个元素
  12. echo ${A[-1]}
  13. #数组的所以元素1
  14. echo "数组的所以元素1:${A[@]}"
  15. #数组的所以元素2
  16. echo "数组的所以元素2:${A[*]}"
  17. # 数组的长度
  18. echo "数组的长度:${#A[*]}"
  19. echo "数组的长度:${#A[@]}"

运行结果:
在这里插入图片描述

发表评论

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

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

相关阅读