【Shell脚本】shell编程规范与变量

一、shell脚本概述

1.1shell概念

  • 将要执行的命令按顺序保存到一个文本文件里
  • 给该文件可执行权限
  • 可结合各种shell控制语句以完成更复制的操作
    什么是shell
  • 什么是Shell?就是与内核沟通的界面、应用程序等等。比如你要播放音乐,你的计算机通过你在shell输入的打开音乐的命令,Shell在告诉操作系统的内核用户希望打开音乐,内核在通过cpu调度、内存管理、磁盘输入输出等工作,将硬件调动,这时硬件声卡才会工作,硬件才是实际的工作者
  • She11(壳程序)是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令(命今) 并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

1.2Linux有哪些shell

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

1.3shell脚本的作用

  • 自动化运维
  • 批量化重复操作可以编写脚本结合计划任务自动周期运行
  • 减轻管理员的工作量
  • 提高处理文件的速度
  • 必变配置出错
  • Shell是一个面向字符串的编程语言,可以跟python之类的其他语言配合起来,比如某个复杂的功能使用一个python脚本来实现,然后在shell中调用这个脚本实现较复杂的功能:或者反过来,在python脚本中调用外部的Shell脚本来提高自动化的效率,也是可以的。
    面向对象的语言
  • JAVA,PYTHON,C++,C#,GO
    面向过程的语言
  • C,shell
    强类型语言
  • JAVA,C,C++,C#,GO (编译型语言,执行前需要先编译,运行速度快)
    弱类型语言
  • PYTHON,Shell,PHP (不需要编译即可直接执行,常用于作脚本)

二、编写shell脚本的规范

2.1编写shell脚本的规范

  • 脚本申明,解释器若第一行为"!/bin/bash"]表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
  • 注释信息:以"#"开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。
  • 可执行语句:比如echo命令,用于输出" "之间的字符串
    在这里插入图片描述

2.2运行shell脚本的两种方法

方法一:

  • 指定路径的命令,要求文件必须有x权限

在这里插入图片描述

方法二:

  • 指定shel1来解释脚本,不要求文件必须有x 权限
  • 用 bash/sh 程序指定脚本文件运行,不需要执行权限,脚本会在子shell环境中运行
  • 用 source/. 指定脚本文件运行,脚本会在当前shell环境中运行(会影响当前所在目录、变量的值 等因素)

在这里插入图片描述

三、重定向与管道操作

3.1交互式与硬件设备

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

3.2重定向操作

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

重定向输入

  • 只能用于将文件里的内容给与命令执行,SELlinux会影响此命令执行
    在这里插入图片描述
    重定向输出与追加
    在这里插入图片描述
    标准输出错误
    在这里插入图片描述
    混合输出
    在这里插入图片描述

3.3管道符号 “|”

  • 将左侧的命令输出结果,作为右侧命令的处理对象
  • 需要执行对象的命令则需要通过xargs命令传输
    在这里插入图片描述

四、shell变量的作用、类型

变量的作用

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

变量的类型

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

4.1自定义变量

  • 变量名以字母或下划线开头,区分大小写,检验全大写变量名=变量值
  • 格式 :变量名=变量值
  • 查看变量值
  • 格式: echo $变量名
    在这里插入图片描述

4.1.1read -p

  • 从键盘输出获取赋值给变量
  • 在这里插入图片描述
    在这里插入图片描述

4.1.2赋值时使用引号

  • 双引号:允许通过$符号引用其它变量值
  • 单引号:禁止引用其它变量值,$视为普通字符
  • 反撇号:命令替换,提前命令执行后的输出结果
  • $() :用法与反撇号一致
    在这里插入图片描述

4.1.3全局变量设置export

  • 普通定义的变量,换一个bash环境就无效了,想要变量在全局有效则需要加export

定义全局变量的两种方法
name1=lisi
export name1
export name2=zhangsan

在这里插入图片描述

4.1.4整数变量的运算

expr

  • expr做乘法的时候需要在*前面加反撇号
    在这里插入图片描述
    echo $(()),echo $[ ]
    在这里插入图片描述
    let
  • 使用let定义一个变量,记录一个数值,用echo输出
    加、减、乘、除、余,与上方一致
    在这里插入图片描述
    ++与–
  • i++:将i定义的变量自增1,放在前面是输出i在自增
  • ++i : 先自增,在输出
  • –i,与 i – :与上方差不多加法变减法
  • 要加或者减去其它数则i+=2,i-=2,i*=2

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

4.2环境变量

  • 由系统提前创建,用来设置用户的各种环境
  • 配置文件:/etc/profile、~/.bash_profiel

4.2.1常见的环境变量

  • PWD:当前用户所在目录
  • PATH:系统命令搜索的路径
  • USER:当前登录用户
  • HOME:当前用户登录的家目录
  • SHELL:当前用户登录的SHELL环境
  • LANG :当前系统的语言和字符集编码
  • HISTSIZE:历史命令条目
  • env :可查看当前系统有哪些环境变量
    在这里插入图片描述

4.3只读变量

  • 用于变量值不允许修改的情况
    readonly,设置只读变量,不能被修改或删除

在这里插入图片描述
删除变量unset,不能删除只读变量
在这里插入图片描述

4.4位置变量

  • $1~$9:代表第一个到第九个位置变量,代表脚本后面跟的以空间相间隔的参数
  • ${10}:表示第十个参数,如果不加括号表示$1和0
  • $0:代表脚本本身
  • $#:代表脚本后面跟的以空间间隔的参数变量
  • $?:代表上一条执行的命令是否成功,命令执行成功返回0,非0值均代表执行异常
  • $* :不加双引号,代表结拜后面跟的以空格向间隔的所有参数;加上双引号后,会把脚本后面跟的以空格相隔的所有参数当作一个整体输出
  • $@ :不加双引号时,代表脚本后面跟的以空格相间隔的所有参数;加上双引号后,效果不变,仍然会把每个参数当作一个个体
    $0~$9的含义

$# 与 $?

:
在这里插入图片描述
** $ * 与$ @**
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值