【Shell编程规范与变量】

文章介绍了Shell脚本的基本概念、作用,包括作为命令解释器的功能,以及不同类型的Shell。详细讲解了Shell脚本的编写规范,如脚本声明和注释,以及如何运行和赋予执行权限。还涵盖了重定向和管道操作,以及Shell变量的使用,包括自定义变量、环境变量、只读变量和位置变量。
摘要由CSDN通过智能技术生成


一、Shell脚本的概述

1、Shell脚本的概念:

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

2、Shell脚本应用场景:

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

二、Shell的作用

Shell的作用一命令解释器,“翻译官”

介于系统内核与用户之间,负责解释命令行
在这里插入图片描述

2.1、用户的登录Shell

登录后默认使用的Shell程序,一般为 /bin/bash。
不同Shell的内部指令、运行环境等会有所区别

bash: 基准于GNu的框架下发展出的she11

csh: 语法有点类似于c语言的she11

tcsh: 整合了csh,提供更多的功能

sh: 已经被bash所替换。

nologin: 奇怪的shel1,这个shell可以让用户无法登录主机

注: bash (/bin/bash) 是目前大多数 Linux 版本采用的默认 shell。
请添加图片描述

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

2.2、Shell脚本的分类

面向对象 : JAVA , PYTHON , C++, C# , GO
面向过程 : C , shell

强类型语言: JAVA , C , C++ , C# , GO
编译型语言,执行前需要先编译,运行速度快

弱类型语言: PYTHON , Shell , PHP
解释性语言,不需要编译即可直接执行,常用于作脚本

三、Shell脚本的构成

1、编写shell脚本的规范

1)脚本声明:

#!/bin/bash

2)注释信息: 行首以#号开头定义注释信息,被注释的行内容将不会被执行

3)可执行语句:编写要执行的脚本代码

cd /opt  进入opt目录
vim first.sh   进入文件里编写好shell脚本

在这里插入图片描述

2、运行shell脚本

3、方法一 、指定路径命令,要求文件必须有 x 权限

chmod +x first.sh
给这个shell脚本增加执行权限

可以使用相对路径和绝对路径来运行脚本
在这里插入图片描述
如果不增加权限的话就会使用不了shell脚本,不管是用绝对路径和相对路径都显示权限不足
在这里插入图片描述

通过脚本就可以查看到在boot目录里找到以vm为开头的文件了,且不需要换目录查看
在这里插入图片描述

4、方法二 、指定shell来解释脚本,不要求文件必须要有 x 权限

1、sh

sh 脚本路径: sh first.sh

在这里插入图片描述

2、source

source 脚本路径: 
.first.sh 或者 source first.sh

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

3、运行Shell脚本的总结

1)用绝对/相对路径指定脚本文件运行,需要执行用户拥有执行权限x脚本会在子shell环境中运行

2)用 bash/sh 程序指定脚本文件运行,不需要执行权限,脚本会在子shell环境中运行

3)用 source/. 指定脚本文件运行,脚本会在当前shell环境中运行(会影响当前所在目录、变量的值 等因素)

四、重定向与管道操作

1、交互式硬件设备

·标准输入: 从该设备接收用户输入的数据
·标准输出: 通过该设备向用户输出数据
·标准错误: 通过该设备报告执行出错信息

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

2、重定向操作

重定向操作

在这里插入图片描述

1、重定向输入

重定向输入前要先关闭防火墙
举例:
使用文件里的数据来设置为用户的密码

在这里插入图片描述

2、重定向输出

如果文件不存在,重定向输出也会创建一个文件来进行存放内容
在这里插入图片描述

3、重定向追加

在这里插入图片描述

4、标准错误输出

之将错误的信息放到指定的文件中,并且覆盖
在这里插入图片描述

5、标准错误追加

不覆盖之前错误内容,在内容的最后面进行追加
在这里插入图片描述

6、混合输出

将正确和错误的,都可以放在一个文件里
在这里插入图片描述
扩展:
2>&1 : 将标准错误输出重定向到标准输出

本来1-->屏幕(1指向屏幕)
执行>log后,1-->log.txt (1指向log.txt)
执行2>&1后,2-->1
 (2指向1,而1指向log.txt,因此2也指向了log.txt)

3、管道操作符号“|”

将左侧的命令输出结果,作为右侧命令的处理对象

在这里插入图片描述

五、Shell变量的作用、类型

1、变量的作用

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

2、变量的类型

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

六、自定义变量

1、定义一个新的变量

变量名为以字母或下划线开头,区分大小写,建议全大写

变量名=变量值

在这里插入图片描述

2、查看变量的值

echo $变量名

在这里插入图片描述

如果中间有空格,加上引号括起来
在这里插入图片描述

把这个变量名加上大括号以防混淆
在这里插入图片描述

3、赋值时使用引号

·双引号: 允许通过$符号引用其他变量值
·单引号: 禁止引用其他变量值,$视为普通字符
·反撇号: 命令替换,提取命令执行后的输出结果,·...·等同于 $(...

在这里插入图片描述

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

创建一个shell脚本
在这里插入图片描述
给shell脚本提高权限
使用运行命令,看到设置的变量为脚本里设置的zhangsan

在这里插入图片描述

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

在shell脚本里设置一个read 通过键盘获取变量值,-p可以显示提示信息
在这里插入图片描述在这里插入图片描述

5、设置变量的作用范围

格式1: export 变量名

格式2: export 变量名=变量值

设置临时的全局变量,主机重启后就不生效了

在这里插入图片描述

实现永久开启变量

vim /etc/profile  进入开机自启的配置文件
设置为全局变量

在这里插入图片描述
如何设置完不想要重启,可以输入以下命令

source /etc/profile

在这里插入图片描述

6、整数变量的运算

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

在这里插入图片描述
或者使用双括号来运算

在这里插入图片描述

使用中括号来运算

在这里插入图片描述

使用let命令来进行运算

let i=10+20  ; echo $i 
let i++   i--    相当于 i=$[i + 1] 或 $[i - 1]
    i+=2  i-=2   相当于 i=$[i + 2] 或 $[i - 2]

在这里插入图片描述

在这里插入图片描述

七、特殊的Shell变量

1、环境变量

·由系统提前创建,用来设置用户的工作环境
·配置文件: /etc/profile – 全局有效
~/.bash _profile – 只对当前用户有效

2、常见的环境变量

在这里插入图片描述

通过可执行文件复制到PATH环境变量所指定的目录中

在这里插入图片描述

vim /etc/profile
进入环境变量配置文件里

export PATH=$PATH:/opt
不要忘记添加原来的值,不设置的话原来的值就没有了

source /etc/profile  重现加载配置文件

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

没有添加PATN原有的配置文件的处理方法

/usr/bin/vi /etc/profile
进入这个配置文件里删除末尾的命令

source /etc/proile   重启启动配置文件

在这里插入图片描述

在这里插入图片描述

命令解释
PATH系统命令搜索路径
PWD当前所在目录
USER当前登录用户
HOME当前登录用户的家目录
SHELL当前登录用户的shell环境
LANG当前系统的语言和字符集编码
HISTSIZE历史命令条数

3、只读变量

用于变量值不允许被修改的情况

在这里插入图片描述

4、位置变量

表示 $n ,n为1~9之间的数字

vim third.sh   创建一个文件,在里面设置shell脚本

设置完后进行增权
chmod +x third.sh

$0 为脚本本身,$1 ~ $9 第一个到第九个位置变量,代表脚本后面跟的以空格相间隔的参数

在这里插入图片描述
由图可以看见,超过9的数是以$1为开头,后面加个0的数值

在这里插入图片描述

当超过第9位的变量时,可以加上大括号表示
例如:${10} 表示第10位置变量

在这里插入图片描述

这样就可以看见最后一位设置的就是指定的数值了
在这里插入图片描述

$* 不加双引号时,代表脚本后面跟的以空格相间隔的所有参数;
$@ 不加双引号时,代表脚本后面跟的以空格相间隔的所有参数;

在这里插入图片描述请添加图片描述

$*: 加上双引号后,会把脚本后面跟的以空格相间隔的所有参数当作一个整体
$@ :加上双引号后,效果不变,仍然会把每个参数当作一个个体

在这里插入图片描述
请添加图片描述

加入一个$#表示命令或者脚本要处理参数的个数
在这里插入图片描述在这里插入图片描述

$? : 代表上一条命令执行是否正常/成功,命令执行正常返回0,非0值均代表命令执行异常

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值