shell脚本基础编程命令

Shell编程规范

  • Shell脚本是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

Shell脚本的概念

  • 将要执行的命令按顺序保存到一个文本文件
  • 给该文件可执行权限
  • 可结合各种Shell控制语句以完成更复杂的操作

Shell脚本应用场景

  • 重复性操作
    有些时候需要重复操作,可以写一个脚本进行循环实现

  • 交互性任务

  • 批量事务处理

  • 服务运行状态监控

  • 定时任务执行
    将脚本写入crotable -e 来进去进行定时任务

Shell的作用

–命令解释器,“翻译官”

  • 介于内核和用户之间的翻译官

编写脚本代码

  • 使用vim文本编辑器
  • 每行一条Linux命令,按执行顺序依次编写
    在编写shell脚本使,在名字后面带上.sh,来代表这是shell脚本命令

赋予可执行权限

  • 使脚本具有可执行属性
    chomd +x 文件

执行脚本文件

  • 方法一:脚本文件路径(绝对路径与相对路径)
    必须要有x权限
  • 方法二:sh脚本文件路径
  • 方法三:source脚本文件路径
    也可以通过“.”来执行

shell脚本构成

  • 脚本声明
    又叫“解释器”:若第一行为"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器,还有其他类型的解释器
  • 注释信息
  • 可执行语句

重定向和管道操作

交互式硬件设备

  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:通过该设备向用户输出数据
  • 标准错误:通过该设备报告执行出错信息
类型 设备文件 文件描述编号 默认设备
标准输入 /dev/stdin 0 键盘
标准输出 /dev/stdout 1 显示器
标准错误输出 /dev/stderr 2 显示器

重定向操作

类型 操作符 用途
重定向输入 < 从指定的文件读取数据
重定向输出 > 将标准输出结果 保存 到指定的文件,并且覆盖原有内容
>> 将标准输出结果 追加 到指定的文件的尾部,不覆盖原有内容
标准错误输出 2> 将错误信息 保存 到指定的文件,并且覆盖原有内容
2>> 将错误信息 追加 到指定的文件的尾部,不覆盖原有内容
混合输出 &> 将标准输出,标准错误保存到同一文件中
2>&1 将标准错误输出重定向到标准输出

管道操作符号“|”

  • 将左侧的命令输出结果,作为右侧命令的处理对象
    在这里插入图片描述

Shell变量的作用和类型

变量的作用

  • 用来存放系统和用户需要使用的特定参数(值)
    变量名:使用固定的名称,由系统预设或用户定义
    变量值:能够根据用户设置,系统系统环境的变化而变化

变量的类型

自定义变量:由用户自己定义,修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量

定义一个新的变量

  • 变量名以字母或下划线开头,区分大小写,建议全大写。
    变量名=变量值 (“=”是赋值的意思)
  • 查看变量的值
    echo $变量名

在这里插入图片描述

  • 若想在输出的后面紧密连接上别的内容,直接添加是不行的,这时候我们需要用到“{}”,使用该符号,就可以实现以上说法。或者使用" ",将$代号全部引号进去,也可以实现。

在这里插入图片描述

扫描二维码关注公众号,回复: 12303434 查看本文章

在这里插入图片描述

赋值时使用引号

  • 双引号:允许使用$符号引用其他变量值
    在这里插入图片描述

  • 单引号:禁止引用其他变量值,$视为普通字符
    在这里插入图片描述

  • 反撇号:命令替换,提取命令执行后的输出结果
    在这里插入图片描述

从键盘输入内容为变量赋值

* read [-p "提示信息"] 变量名

在这里插入图片描述

变量的作用范围

  • 默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量,但是当我们进入子程序或者新的子Shell环境时,局部变量将无法再使用,这时候如果让我们再次进行变量配置,无疑是浪费时间的。于是我们可以通过内部命令export将指定的变量导出变为全局变量,使用户定义的变量在所有的子Shell环境中都可以再次使用。
 格式1:export 变量名
 格式2:export 变量名=变量值
  • 我们首先在自身环境中查看AI这个变量的内容,发现我们时可以看得到的。

在这里插入图片描述

  • 然后使用pstree进入bash的子bash环境,然后使用我们在bash环境中设置的变量AI,然后发现没有这个变量。
    在这里插入图片描述

  • 之后我们回bash环境内,利用export命令,将我们的AI变量设置为全局变量。

在这里插入图片描述

  • 再次回到子bash环境,这时候我们发现在子bash环境中也可以使用这个变量了,这个变量就是全局变量了。
    在这里插入图片描述
  • 上面的这种方法在重启之后就失效了,这时候我们如果想要一直可以使用,就需要在/etc/profile中输入 export 变量名=变量值就可以了

整数变量的运算

expr 变量1 运算符 变量2 [运算符 变量3]…

常用运算符

  • 加法运算:+
  • 减法运算:-
  • 乘法运算:*
  • 除法运算:/
  • 求模(取余)运算:%
    注:这个方法不够简洁,仅作了解即可
    在这里插入图片描述

简洁运算法

[]和(())使用方法

* echo $[1+2]
* echo $((1+2))

* let i=1+2
* echo $i

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

环境变量

  • 由系统提前创建,用来设置用户的工作环境
  • 配置文件:/etc/profile,~/.bash_profile

常见的环境变量

  • 使用env命令可以查看到当前工作环境下的环境变量
 USER:表示用户名称
 HOME:表示用户的宿主目录
 LANG:表示语言和字符集
 PWD:表示当前所在的工作目录
 PATH:表示可执行程序的默认搜索路径

在这里插入图片描述

在这里插入图片描述

  • 环境变量的全局配置文件为/etc/profile,在此文件中定义的变量作用于所有用户。每个用户都有自己的配置文件(~/.bash_profile)。可以用来长期变更或设置某个环境变量。

只读变量

  • 用于变量值不允许被修改的情况
readonly name  #设置为只读变量

在这里插入图片描述

位置变量

  • 表示为$n,n为1~9之间的数字,10以及之后的数字需加{}

我们可以写一个简单的shall脚本来详细了解这一定义

在这里插入图片描述
然后我们执行这个脚本,不同位置的数字都经过脚本写了出来
在这里插入图片描述

预定义变量

* $*, $@:表示命令或脚本要处理的参数。不加双引号时表现一致。
* $#:把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4".
* $@:把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表"$1" "$2" "$3" "$4".
* $*:所有位置变量的内容
* $?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,返回任何非0值均表示出现异常。也常被用于Shell脚本中return退出函数并返回的退出值
* $0:当前执行的进程/程序名

在这里插入图片描述

  • 由于$@和 $*理解起来稍微有点难度,我这面写一个脚本来看一下两者的区别

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_51614581/article/details/111190378