Shell脚本 一:脚本规范和变量

1.Shell脚本基础

1.1什么是Shell

Shell 是一类程序的总称,用于将人类使用的高级语言转换成机器能看懂的二进制语言,为用户和内核之间的交互提供接口。

1.2什么是Shell脚本

  • 将命令按顺序一一列出,最后自动执行
  • 执行需要权限,也可以直接使用绝对路径
  • 脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本构成

1.3脚本构成

  1. 脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect
  2. 注释信息:以#开头的语句表示为注释信息
  3. 可执行语句:比如echo命令用于输出“ ”之间的字符串

例;
在这里插入图片描述

1.3脚本的执行逻辑及执行方式

脚本执行逻辑

  1. 顺序执行:程序按从上到下顺序执行

  2. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

  3. 循环执行:程序执行过程中需要重复执行多次某段语句

    执行方式
    1.指定路径去执行文件(要有执行权限)
    在这里插入图片描述
    以相对路径方式启动
    在这里插入图片描述
    以绝对路径的方式启动
    在这里插入图片描述

2.指定解释器去执行(不需要权限)
在这里插入图片描述
需要当前位于脚本所在目录

指定了使用 bash去执行脚本不需要权限

在这里插入图片描述

1.4脚本错误调试

1.4.1错误的类型

命令错误
命令出错不会影响接下来的命令继续

语法错误
会影响接下来的命令

逻辑错误
只能自己去筛查

查代码正确选项

bash -n 脚本名称 (不在当前目录下加绝对路径)     检查语法错误
bash -x 脚本名称 (不在当前目录下加绝对路径)     逻辑错误

总结:脚本错误常见的有三种区别

  1. 语法错误,会导致后续的命令不继续执行,可以用bash -n 检查错误,提示的出错行数不一定是准确的

  2. 命令错误,默认后续的命令还会继续执行,用bash -n 无法检查出来 ,可以使用 bash -x 进行观察

  3. 逻辑错误:只能使用 bash -x 进行

2.重定向与管道符

2.1重定向的概念

不通过标准输出到屏幕上,输出到你指定的位置

2.2重定向的类型及用途

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

交互式硬件设备

  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:通过该设备向用户输出数据
  • 标准错误:通过该设备报告执行出错信息
类型操作符用途
重定向输入<从指定的文件读取数据,而不是从键盘输入
重定向输出1>将输出结果保存到指定的文件(覆盖原有内容)
>>将输出结果追加到指定的文件尾部
标准错误输出2>将错误信息保存到指定的文件(覆盖原有内容)
2>>标准错误输出结果追加到指定的文件尾部
混合输出&>无论对错都可以重定向将标准输出、标准错误的内容保存到同一个文件中

2.3管道符

将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用

命令一 | 命令二
在这里插入图片描述

3.变量

3.1变量的概念

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。

3.2变量的类型

变量类型含义
自定义变量由用户自己定义,修改和使用
环境变量由系统维护,用于设置工作环境
只读变量只可读取不可以更改
位置变量通过命令给脚本传递参数
预定义变量Bash中设置的一类变量,不能修改,有些规定好的变量 放在那里让你使用

自定义变量:由用户自己定义,修改和使用。

特殊变量:环境变量、只读变量、位置变量、预定义变量。

3.2.1自定义变量
3.2.1.1自定义变量
  • 区分大小写
  • 不能使程序中的保留字和内置变量:如:if, for,hostname 命令 a=
  • 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反
  • 不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
  • 大驼峰 StudentFirstName
  • 小驼峰 studentFirstName
  • 下划线 student_name

变量名=变量值

直接字串:name='root'

在这里插入图片描述

变量引用:name="$USER"

在这里插入图片描述

命令引用:name=`COMMAND` 或者 name=$(COMMAND)

在这里插入图片描述

注意:变量赋值是临时生效,当退出终端后,变量会自动删除,无法持久保存,脚本中的变量会随着脚本结束,也会自动删除

定义所添加的特殊符号及其作用

特殊符号作用
{ }确定变量范围
‘’在这里插入图片描述
“”在这里插入图片描述
$()或``在这里插入图片描述

总结
1.赋值时使用双引号(" ")可以直接调用变量
2.赋值时使用单引号(’ ') 只会被认为是字符 只会被认为是字符 只会被认为是字符 不会调用变量
3.赋值时使用(``反撇在tab上面)命令替换,提取命令执行后的输出结 果 和$( ) 用法相同
4.{}可以分隔变量值

变量追加值(临时,重启后消失)

变量名+=追加值

在这里插入图片描述

3.2.1.2read -p

从键盘输入的内容变成变量

read -p "文本内容" 变量名

在这里插入图片描述

3.2.1.3 将局部变量转化为全局变量

定义
局部变量:默认情况下,新定义的变量只在当前的shell环境中有效,当进入子程序或新的shell环境中,局部变量将无法再起作用。

全局变量:在新的shell环境中可以继续使用。

格式

1.:export  变量名
2.:export  变量名=变量值
#可以使用pstree 查看shell的环境

#输入bash进入子shell

#ctrl+D组合exit 退出子shell
3.2.2环境变量

定义

  1. 由系统提前创建,用来设置用户的工作环境
  2. 可以使用env查看环境变量
env
#可查看当前所有环境变量
  1. 常用的常用环境变量

$PATH 表示可执行用户程序的默认路径

在这里插入图片描述

$HOME 表示用户的家目录

在这里插入图片描述

$PWD 表示当前所在的工作目录

在这里插入图片描述

$LANG 查看当前语言和字符集

在这里插入图片描述

$USER 当前用户用户名

在这里插入图片描述
环境变量的全局配置文件

#配置文件位置
/etc/profile 
##修改此文件,全局生效,可用于长期变更或设置环境变量
3.2.3只读变量

变量值不允许修改(重新赋值)的情况

法使用 unset删除

[root@localhost opt]# name=ky15
[root@localhost opt]# readonly name
[root@localhost opt]# echo $name 
ky15
[root@localhost opt]# unset name
bash: unset: name: 无法反设定: 只读 variable
#只有退出进程
[root@localhost opt]# echo $name 
ky15
[root@localhost opt]# name=ky
bash: name: 只读变量
3.2.4 位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示
在这里插入图片描述
在这里插入图片描述

3.2.5 预定义(状态)变量

系统定义变量

状态变量功能
$*表示所有位置参数的内容看成一个整体返回
$@表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有
$?表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
$#表示命令行中位置参数的总个数
$0表示当前执行的脚本或程序的名称即程序本身
$$当前进程id
$!后台任务最后一个id
3.2.6 整数运算
运算符:

加法  +

减法 -

乘法  \ *

除法  /

取余 (取模)% 

变量要和运算符隔开

运算法则
加法:num1 + num2
减法:num1 - num2
乘法:num1 \ * num2

整除:num1 / num2
取余(求模):num1 % num2 (求 num1 除以 num2 的余数)

格式: expr 变量1 运算符 变量2 [运算符 变量3]

在这里插入图片描述
例:
生成随机数

expr $RANDOM % 33
#随机生成0-33之间的数
expr $[RANDOM % 10 + 1]
#随机生成1-10之间的数
echo $[RANDOM % 10 + 1]
#同上

i++ 和 ++i

i=1;j=1;expr j=i++;echo $i $j
2 1
i=1;j=1;expr j=++i;echo $i $j
2 2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值