shell编程规范与变量

shell脚本编程规范

shell脚本概述

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

Shell脚本应用场景

  • 重复性操作
  • 交互性任务
  • 批量事务处理
  • 服务运行状态监控
  • 定时任务执行

在这里插入图片描述

  • 什么是Shell
    就是与内核沟通的界面、应用程序等等。比如你要播放音乐,你的计算机通过你在shell输入的打开音乐的命令,Shell在告诉操作系统的内核用户希望打开音乐,内核在通过cpu调度、内存管理、磁盘输入输出等工作,将硬件调动,这时硬件声卡才会工作,硬件才是实际的工作者.

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

  • Linux中有哪些shell
    检查一下/etc/shells这个文件,里面就是Linux所包含的shell。
    最常用的就是bash、tcsh、csh、sh、nologin这些shell。这些shell都是依据Linux发展者的不同所创造出的不同版本
    1 bash: 基准于GNU的框架下发展出的shell。
    2 csh: 语法有点类似于c语言的shell。
    3 tcsh: 整合了csh,提供更多的功能。
    4 sh: 已经被bash所替换
    5 nologin: 奇怪的shell,这个shell可以让用户无法登录主机
    : bash (/bin/bash) 是目前大多数 Linux 版本采用的默认 Shell。
    在这里插入图片描述

  • 拓展知识:
    1 为什么系统上合法的shell要写入/etc/shells这个文件呢?
    这是因为系统某些服务运行过程中,会去检查用户能够使用的Shell,而这些shell的查询就是借由/etc/shells这个文件
    2 用户什么时候可以取得shell来工作?用户默认会取得哪一个shell?
    当用户登录的时候,系统就会给我一个shell让我来用,而这个登录取得的Shell就记录在/etc/passwd这个文件内

shell脚本的作用

  • 自动化运维
  • 批量化重复操作可以编写脚本结合计划任务自动周期运行
  • 减轻管理员工作量
  • 提高处理文本文件的速度
  • 避免配置出错

shell是一个面向字符串的编程语言,可以跟python之类的其他语言配合起来,比如某个复杂的功能使用一个Python脚本来实现,然后在shell中调用这个脚本实现较复杂的功能;或者反过来,在Python脚本中调用外部的Shell脚本来提高自动化的效率,也是可以的。

计算机编程语言
面向对象java ,python,C++,C#,Go
面向过程C语言,shell
强类型语言JAVA , C ,C++ ,C# , GO
弱类型语言python, Shell , PHP
编译型语言,执行前需要先编译,运行速度快JAVA , C ,C++ ,C# , GO
解释性语言,不需要编译即可直接执行,常用于作脚本python, Shell , PHP

编写shell脚本的规范

  • 1)脚本声明 若第一行为"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect
  • 2)注释信息 行首以#号开头定义注释信息,被注释的行内容将不会被执行
  • 3)可执行语句 编写要执行的脚本代码;比如echo命令,用于输出""之间的字符串

在这里插入图片描述

运行shell脚本

  • 1)用绝对路径或者相对路径指定脚本文件运行,需要执行用户拥有执行权限x,脚本会在子shell环境中运行(不会影响当前所在目录、变量的值 等因素)
  • 2)用 bash或者sh 程序指定脚本文件运行,不需要执行权限,脚本会在子shell环境中运行(不会影响当前所在目录、变量的值 等因素)
  • 3)用 source或者. 号指定脚本文件运行,脚本会在当前shell环境中运行(会影响当前所在目录、变量的值 等因素)
    在这里插入图片描述

在这里插入图片描述

重定向与管道操作

交互式硬件设备

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

重定向操作

类型操作符用途
重定向输入<从指定的文件读取数据,而不是键盘输入
重定向输出>将输出结果保存到指定的文件 (覆盖原有内容)
重定向输出>>将输出结果追加到指定的文件尾部
标准错误输出2>将错误信息保存到指定的文件 (覆盖原有内容
标准错误输出2>>将错误信息追加到指定的文件中
混合输出&>将标准输出、标准错误的内容保存到同一个文件中
混合输出2>&1将标准错误输出重定向到标准输出
  • 重定向输入和重定向输出
    在这里插入图片描述
    在这里插入图片描述- 标准错误输出

在这里插入图片描述

  • 混合输出
    在这里插入图片描述
    ls -lh xlog.txt 2>&1等同于ls -lh &> log.txt
    本来1–>屏幕(1指向屏幕)
    执行>log.txt后,1–>log.txt (1指向loq.txt)
    执行2>&1后,2–>1 (2指向1,而1指向log.txt,因此2也指向了log.txt)

管道符号“|”

将左侧命令输出的结果,作为右侧命令的处理对象
注意,有的右侧命令不能处理左侧的输出结果,这里要在“|”后面加上xargs
示例:find /opt -name “*.txt” | xargs ls -lh
在这里插入图片描述

shell脚本变量

  • 变量的作用
    用来存放系统和用户需要使用的特定参数(值)
    变量名:使用固定的名称,由系统预设或用户定义
    变量值: 能够根据用户设置、系统环境的变化而变化
  • 变量的类型
    自定义变量:由用户自己定义、修改和使用
    特殊变量: 环境变量,只读变量,位置变量,预定义变量

定义一个新的变量

  • 定义一个新的变量
    变量名必须以字母下划线开头,区分大小写,建议全大写
变量名=变量值
  • 查看变量的值
echo $变量名

在这里插入图片描述
通常来说,建议平时就一直加上“”号,省的到时候报错
在这里插入图片描述

赋值时使用引号

  • 双引号": 允许通过$符号引用其他变量值
  • 单引号 ': 禁止引用其他变量值,$视为普通字符,即单引号里面的都视为普通字符
  • 反撇号`: 命令替换,提取命令执行后的输出结果(反撇号在键盘左上位置,在tab键上面)相当于$()

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

  • 从键盘输入内容为变量赋值
    read [-p“提示信息”] 变量名
    vim second.sh
    在这里插入图片描述
    在这里插入图片描述

设置变量的作用范围

export 变量名-----设置为全局变量,临时有效,重启失效

在这里插入图片描述

  • 永久生效
vim /etc/profile

在这里插入图片描述

整数变量的运算

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

常用运算符

常用运算符
加法运算+
减法运算-
乘法运算\ *
除法运算/
求模 (取余) 运算%

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

  • 2 echo $(( ))-----括号里面可以加空格也可不加

在这里插入图片描述

  • 3 echo $[ ] -----中括号里面可以加空格也可不加

在这里插入图片描述

  • 4 let 设置一个变量,然后echo输出
let i=10*3
echo  $i

在这里插入图片描述
拓展
i++ 是先赋值再加1
++i 是加后再赋值1

在这里插入图片描述

特殊的ShelI变量

  • 环境变量
    由系统提前创建,用来设置用户的工作环境
    配置文件: /etc/profile、~/.bash_profile
  • 常见的环境变量
    PWD、PATH
    USER 、SHELL、HOME

在这里插入图片描述

env -------查看当前shell环境有哪些环境变量

在这里插入图片描述

如何把命令加入到环境变量中

  • 方法一:复制命令文件内容到环境变量的配置文件目录中
  • 方法二:将命令文件所在的目录加入到环境变量配置目录
vim /etc/profile

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

设置只读变量(用于变量值不允许被修改的情况,包括删除或取消,想删除重启)

readonly 变量名

在这里插入图片描述

位置变量

表示为$n,脚本后面都是位置变量
在这里插入图片描述

vim /root/forth.sh

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

预定义变量

$ * 、$ @: 表示命令或脚本要处理的参数。
$ * :把所有参数着成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4。
$ @: 把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表"$1”“$2””“$3"”$4”。

有双引号
在这里插入图片描述

在这里插入图片描述
没有双引号
在这里插入图片描述

在这里插入图片描述

$0: 表示当前执行的脚本或命令的名称。
$#: 表示命今或脚本要处理的参数的个数。
在这里插入图片描述
在这里插入图片描述

$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。也常被用于Shell脚本中return退出函数并返回的退出值。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值