AI智能
改变未来

Linux_Shell编程详细解读,从入门到入门(滑稽)你值得拥有(5)

文章目录

  • 一. shell 编程
  • 二.基本语法结构及使用
  • 1 脚本编写规范要求
  • 2 注释和输入输出
  • 3 执行shell脚本
  • 三. Shell中的变量
    • 1 变量概述
    • 2 变量赋值
    • 3 脚本位置参数
    • 4 变量运算
    • 5 读入变量
    • 6 变量替换
    • 7、常用使用案例说明
  • 四、数据运算
  • 五、程序控制结构
    • 1 if 选择结构
    • 2 案例说明
    • 2.1 字符串判断
    • 2.2 整数输入判断
    • 2.3 逻辑判断
    • 2.4 文件判断
  • 2 case 选择结构
  • 3 for 循环
  • 4 while 循环
  • 六、函数声明和调用
  • 创作不易,各位看官,点个赞收藏、关注必回关、QAQ、您的点赞是我更新的最大动力!

    一. shell 编程


    Shell 编程是 Unix/Linux 操作系统中的一大杀器,系统操作的一个核心元素。Unix要使用的非常精通,对于终端 Shell 脚本编写非常熟练。

    • 常见操作命令
    • VIM 编辑器的使用
    • SHELL 脚本

    SHELL 编程就是通过终端编写脚本程序,辅助开发人员完成命令的工程自动 化操作。

    • 基础配置:系统初始化操作、系统更新、内核调整等等
    • 安装程序:自动部署 LNMP 、 LAMP 、 MySQL 等等
    • 配置变更: Nginx 配置 、 MySQL 配置 、 Redis 配置 等等
    • 业务部署:配合 git 、 jenkins 等实现自动化持续交付
    • 日常备份:脚本对项目或者软件实现全备份或者增量备份等
    • 信息采集:硬件、系统、服务、网络等各种数据的自动采集
    • 日志分析:获取日志、排序、去重、统计、分析
    • 服务扩容:监控服务器就请你信息,脚本程序自动化扩容部署

    减少重复工作,周期性工作,降低工作量

    二.基本语法结构及使用

    脚本程序在编写时,通常会有一些基本的编码规范,这些规范是约定俗成的

    1 脚本编写规范要求

    脚本存放在 scripts/目录中开头添加#!/bin/bash,确定 bash 执行命令附带作者及版权信息 , 脚本扩展名为*.sh脚本中尽量不用中文成对的符号一次书写完成

    2 注释和输入输出

    注释:除第一行外,以#行注释输入:read 读取用户输入的信息-p 打印提示信息-s 用户输入信息不明文显示输出:echo 打印信息,类似于Python中的print()函数echo -n 打印信息不换行

    3 执行shell脚本

    mkdir scripts 根据约定创建scripts文件夹vim test.sh  创建一个sh脚本并且进入编辑#!/bin/bashecho \"hello Shell\"执行上述脚本三种方式1. bash test.sh2. sh test.sh3. chmod u+x test.sh 先修改权限再执行./test.sh

    创建文件夹

    mkdir scripts


    编写一个sh脚本

    vim test.sh

    保存并且退出

    三种执行方式

    三. Shell中的变量

    1 变量概述

    什么是变量:变量时 shell 传递数据的一种方式,作为一个临时存储数据的容器,可以存放 数据并在其他需要的地方直接通过变量名称使用对应的数据。
    命令规则:

    • 变量定义时要求字母、数字或者下划线组成,数字不能开头。
    • 大小写敏感 项目规范:见名知意、下划线命名法

    2 变量赋值

    变量赋值,就是向变量中存储数据的过程,需要注意

    • 变量赋值,使用=符号,将符号右边的计算结果赋值给左边的变量
    • 等号两边不能由空格
    • 定义的变量不要与系统命令冲突

    3 脚本位置参数

    shell 脚本可以接受多个参数,在脚本程序中可以通过特定的方式访问这些参数数据

    $* 和 ¥@这两个符号上不添加引号时,都是将接受的多个参数依次获取$* 上添加双引号,将接受的多个参数当成单字符串获取$@上添加双引号,将接受的多个参数依次获取

    4 变量运算

    变量的直接运算,主要体现在命令替换,使用

    $()

    $(())

    [root@localhost scripts]# echo \"this is $(date +%Y) year\"this is 2019 year[root@localhost scripts]# echo \"this is $(($(date +%Y)+1)) year\"this is 2020 year[root@localhost scripts]# echo \"this is $((`date +%Y`+1)) year\"this is 2020 year

    命令嵌套使用,可以通过符号$( $( ) )的嵌套方式进行操作
    需求:将当前目录中的所有 log 日志进行打包压缩

    5 读入变量

    通过 read 命令,可以完成交互脚本,通过用户输入变量读取到程序中
    基本语法:

    将用户输入的信息存储到 var 变量中read -p \"提示信息\" var

    6 变量替换

    变量                                   描述${变量#匹配规则} 				 从头部匹配变量,最短删除${变量##匹配规则} 			     从头部匹配变量,最长删除${变量%匹配规则} 				 从尾部匹配变量,最短删除${变量%%匹配规则}			     从尾部匹配变量,最长删除${变量/旧字符串/新字符串} 		 使用新字符串替换旧字符串,替换一次${变量//旧字符串/新字符串}		 使用新字符串替换旧字符串,全部替换

    从前向后删除,分别获取指定网站域名、后缀

    [root@localhost project]# url=https://www.sohu.com.cn[root@localhost project]# echo ${url}https://www.sohu.com.cn[root@localhost project]# echo ${url#*.}sohu.com.cn [root@localhost project]#echo ${url#*hu.} com.cn

    从后向前删除,分别获取协议、域名前缀

    [root@localhost project]#url=https://www.sohu.com.cn[root@localhost project]# echo ${url}https://www.sohu.com.cn[root@localhost project]# echo ${url%:*}https[root@localhost project]# echo ${url%.sohu*}https://www

    变量替换

    [root@damu project]# url=\"https://www.sohu.com.cn\"[root@damu project]# echo $urlhttps://www.sohu.com.cn[root@damu project]# echo ${url/com.cn/COM.CN}https://www.sohu.COM.CN[root@damu project]# echo ${url/c/C}https://www.sohu.Com.cn

    7、常用使用案例说明

    1、第一个程序

    #!/bin/sh# 我的第一个基本程序echo 我的第一个脚本echo -n 作者:稳稳echo -n 版本:V1.0echo 学习了第一个语法-标准输出

    结果图如下,也可以用

    ssh demo01.sh

    执行

    2、输入输出+使用变量+【-p -s -n】案例

    #!/bin/shecho 管理系统echo -------------------------echo 你好,请先登录,然后才能继续操作# 用户输入账号read -p \"请输入您的账号:\" username # -p 提示用户输入信息 username为获取输入变量# 用户输入密码read -s -p \"请输入您的密码:\" password # -s 输入密码不显示# 拓展:程序休眠1秒echo -n \"Loading\"sleep 1echo -n \".\"sleep 1echo -n \".\"sleep 1echo \".\"# 打印用户输入的信息echo 您输入了账号:$usernameecho 您输入了密码:$password

    3、变量如何使用

    #!/bin/shecho 变量的使用介绍echo 变量先声明赋值,后使用数据echo shell中的变量赋值的时候可以添加双引号,也可以不加双引号echo shell中的变量赋值使用=符号赋值,符号两侧不能有空格name=\"tom\"gender=maleage=18echo 使用变量时,在变量前面添加$符号echo $nameecho $genderecho $ageecho 使用变量时,如果同时和其他字符拼接,按照如下语法操作echo name:${name}echo gender:${gender}echo age:${age}echo 使用变量时,双引号-强引用 和 单引号-弱引用有区别echo \"name: $name \"echo \'name: $name \'

    四、数据运算

    整数运算 expr、(())、(())、(())、[],整数运算不支持小数运算

    操作符           描述num1 + num2     求和num1 - num2     求差num1 * num2     求积num1 / num2     求商num1 % num2     取余

    五、程序控制结构

    [ ] 括号里面的空格严格 左右各自空一格,然后中间输入条件

    1 if 选择结构

    单分支,基本语法

    if 条件;then条件为True要执行的代码fi

    双分支,基本语法

    if 条件;then条件为True要执行的代码else其他情况fi

    多分支,基本语法

    if [ 条件1 ];then执行代码1elif [ 条件2 ];then执行代码2elif [ 条件3 ];then执行代码3else其他情况fi

    2 案例说明

    符号左右要有空格 比如 =号 左右要空格

    2.1 字符串判断

    = 判断两个字符是否相等
    != 判断两个字符串不相等
    -z 判断字符串长度为0 zero
    -n 判断字符串是否为空 null
    #!/bin/sh# 项目执行中read -p \"是否退出系统(Q退出/C继续)?\" res# 判断用户输入的数据if [ $res = \"Q\" ];thenecho \"即将退出系统,请保存好个人数据\"exitelif [ $res = \"C\" ];thenecho \"项目继续进行中....\"fiecho \"项目正常运行.....\"

    注意了,有区分大小写这一说法

    2.2 整数输入判断

    -eq 判断两个整数是否相等
    -gt >
    -lt <
    -ge >=
    -le <=
    -ne !=
    #!/bin/bashread -p \"请输入功能选项\": choiceif [ $choice -eq 1 ];thenecho \"选项1\"elif [ $choice -eq 2 ];thenecho \"选项2\"elif [ $choice -eq 3 ];thenecho \"选项3\"elseecho \"没有此选项\"fi

    2.3 逻辑判断

    && 判断并且关系
    -a 判断并且关系
    ||
    判断或者关系
    -o 判断或者关系
    ! 判断取反
    #!/bin/shecho 中公-游戏商城用户登录# 提示用户输入账号read -p \"请输入您的账号:\" usernameread -p \"请输入您的密码:\" password# 判断账号密码是否正确echo $usernameecho $password# 如果直接按照下面的方式编写if判断语句,会出现运算符号优先级问题# 需要使用不同的运算符号完成优先级的转换if [ $username = \"admin\" -a $password = \"123\" ]; thenecho 用户登录成功elseecho 账号或者密码有误,请重新登录fi

    2.4 文件判断

    -e 判断文件是否存在 if [ -e 文件存放路径 ]
    -d 判断是否是文件夹 if [ -d 文件存放路径 ]
    -f 判断是否是文件 if [ -f 文件存放路径 ]
    -r 判断指定的文件是否可读 格式跟上面一样 后面不写了
    -w 判断指定的文件是否可写
    -x 判断指定的文件是否可执行
    #!/bin/sh# 脚本要完成自动备份文件的操作# 需要判断当前目录中是否由back/文件夹# 如果有直接执行备份,如果没有需要创建echo -------- 开始准备备份,检查环境 --------# 判断备份文件夹是否存在if [ -e back ];thenecho back文件已经存在if [ -d back ]; thenecho back是一个文件夹,可以执行备份fielseecho back文件不存在,创建文件夹mkdir backfiecho -------- 开始备份 --------sleep 2echo ------- 备份完成 --------

    这里跟我编写的shell脚本存放在一个文件夹下,所有上面程序判断没有加路径

    2 case 选择结构

    基本语法:

    case 变量 in变量 1)命令序列 1;;变量 2)命令序列 2;;*)无匹配后命令序列esac
    #!/bin/shecho        管理系统echo -------------------------echo         1.loginecho         2.registerecho         3.quitecho -------------------------# 提示用户输入选项read -p \"亲输入您的选项/操作:\" oper# 根据用户的输入执行不同的操作case $oper in1|login)echo \"用户要登录了....\";;2|register)echo \"用户要注册了....\";;3|quit)echo \"用户准备退出系统\";;*)echo \"没有这个选项\"esac

    3 for 循环

    for 循环结构,和 Python 中的 for 循环结构语法基本一致

    for 变量名 in [取值列表]do循环中重复执行的代码done
    #!/bin/shecho 检测集群主机心跳echo 检查集群中的所有主机是否通信良好# 列出集群中所有的主机hosts=\"192.168.0.100 192.168.0.101 192.168.0.102\"# 检查所有主机通信for h in $hostsdoecho 开始检查$h主机通信sleep 1echo $h 检查通过doneecho ----所有主机检查完毕----

    4 while 循环

    while 循环结构,同样和 python 中的 while 循环基本一致

    while 条件do循环要执行的代码done
    #!/bin/shecho 1~100的整数的和到底是多少?num=1sum=0while [ $num -lt 100 ]do# expr可以通过表达式直接进行整数的运算,但是赋值会出现问题# sum=expr $sum + $num# $[]运算符号,可以直接进行整数的运算,可以赋值#sum=$[$sum+$num]# $(())运算符号,可以直接进行整数的运算,可以赋值sum=$(($sum+$num))let num+=1doneecho sum: $sum

    要完成整数的运算,有三种操作方式 看自己喜欢那个

    expr 运算表达式,如 expr 12 + 13$(()) 运算符号,如 res=$((12 + 13))$[]运算符号,如 res=$[12+13]

    六、函数声明和调用

    SHELL 中的函数,类似 python 中的函数,声明方式和调用方式几乎一致

    注意事项:函数执行如果需要参数,不要在函数后面的括号中添加形式参数,shell 中函
    数的参数有自己的传递方式。

    #!/bin/shecho 函数的声明和调用方式# 标准语法声明函数function test1(){echo 这是一个标准的定义函数}# 快捷语法声明函数test2() {echo 这是一个快捷方式定义的函数}# 调用函数test1test2
    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » Linux_Shell编程详细解读,从入门到入门(滑稽)你值得拥有(5)