shell脚本——第一章 shell编程规范与变量

目录

一、shell脚本概述

1.1 shell的作用

1.2 linux中常见的shell

1.3 什么是shell脚本及构成

1.5  脚本错误

二、重定向与管道符

2.1 重定向

2.2 管道符

三、变量

3.1 变量的定义

3.2 变量的作用

3.3 变量名要求

3.4 变量类型

1.自定义变量

2.预定义变量

3.环境变量

4.只读变量

5.位置变量

3.5  整数的运算

3.6 变量的作用范围


一、shell脚本概述

1.1 shell的作用

Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当 了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执 行的操作传递给内核执行,并输出执行结果。 常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符 等方面会存在一些区别。

1.2 linux中常见的shell

通过  cat  /etc/shells   查看当前系统支持的shell

  • bash:基于gun的框架下发展的shell
  • csh:类似c语言的shell
  • tcsh:整合了csh提供了更多功能
  • sh:已经被bash替换
  • nologin:让用户无法登录

注:bash (/bin/bash)是目前大多数Linux 版本采用的默认shell

1.3 什么是shell脚本及构成

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

构成:

  1. 声明解释器
  2. 注释信息
  3. 执行命令

格式:

#!/bin/bash
#声明解释器 代表我接下来,使用什么解释器来解释,接下来的命令

#  “#” 表示注释信息

cd /opt

mkdir test

#可执行的命令

#以.sh 结尾的文件 命令会高亮

1.4 shell脚本的执行逻辑与方式

执行逻辑:

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

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

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

执行方式:

1.直接调用shell 解释器 加上脚本的名字 bash 脚本名 不需要加上权限

2.路径/脚本 路径:绝对 相对 但是这个需要权限

3.source(.) 加脚本 名字 不建议使用 不需要权限 会修改目前的环境内容,会有一些问题

代码:

cd /opt       #进入opt目录下
vim first.sh  #创建first。sh脚本
first.sh中的内容:
#!/bin/bash
#这是我的第一个脚本,内容为输入ni  hao!
echo "ni hao!"             #输出内容为ni hao!

bash first.sh   #调用系统shell执行脚本

chmod +x first.sh   #添加可执行权限

/opt/first.sh   #绝对路径执行脚本
cd /opt         #进入脚本所在目录
./first.sh      #相对路径执行脚本


. first.sh       # . 执行脚本

source first.sh   #source 执行脚本 

实现效果:

1.5  脚本错误

1.命令错误 不会影响接下来的 命令执行,但是本条命令不执行

bash -x 脚本 bash -x  会自运行一遍检查错误

2.语法错误 直接影响脚本无法正常运行

bash -n  脚本 检查语法错误

3.逻辑错误

不会影响命令的执行,只是得到的结果不同

二、重定向与管道符

2.1 重定向

重定向:改变电脑数据的输出方向,默认 电脑数据的输出方向是屏幕

电脑给你的回复一定会在屏幕上  我们称为:标准输出

如果电脑没有正确回复    我们称为:错误输出

我们通过键盘鼠标扫描仪话筒等设备输入给电脑的指令   我们称为:标准输入

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

2.2 管道符

|   管道符

将第一个命令的结果 当做后一个命令的处理对象

三、变量

3.1 变量的定义

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

保存将来会变化的数据,即使数据变化,直接调用变量即可,各种 Shell 环境中都使用到了“变量”的概念。Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性更强。

3.2 变量的作用

用来存放系统和用户需要使用的特定参数(值)

  • 变量名:使用固定的名称,由系统预设或用户定义
  • 变量值:能够根据用户设置、系统环境的变化而变化

3.3 变量名要求

①定义变量格式:变量名=变量值(shell中不用声明类型,所有类型均为字符串)
②定义变量时,变量名要求:
变量名区分大小写建议全部使用大写,不能使用系统内置变量。如$PATH是系统外部命令的存放路径等。
变量名不能以数字开头,且不支持短横线-。

3.4 变量类型

   1.自定义 的变量   由用户自定义、修改和使用

   2.预定义变量 $? $$ $* $@ shell中 程序自带的

   3.环境变量 env 看到所有环境的变量

   4.只读变量 只可以读 不可以写

   5.位置变量 $1 $2 .... $n

1.自定义变量

命名要求:

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

定义新的变量:

格式:变量名=变量值 

查看定义的变量值:

格式:  echo $变量名

赋值时使用符号

  • 双引号:允许通过$符号引用其他变量值

  • 单引号:禁止引用其他变量值, $视为普通字符

  • 反撇号:命令替换,提取命令执行后的输出结果,``和$(…)作用相同

  • {}:分隔变量值

  • 定义变量时中间有特殊字符,如空格,可以使用单引号或双引号

2.预定义变量

 系统直接定义好的变量,直接使用即可

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

3.环境变量

使用env命令查看所有环境变量

可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量

一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程

一般只在系统配置文件中使用,在脚本中较少使用

常用环境变量:

  • $USER 表示用户名称
  • $HOME 表示用户的宿主目录
  • $LANG 表示语言和字符集
  • $PWD 表示当前所在工作目录
  • $PATH 表示可执行用户程序的默认路径

4.只读变量

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

无法使用 unset删除

最快方法重启

5.位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

3.5  整数的运算

expr只能进行整数的运算

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

运算符:

  • 加法 +
  • 减法 -
  • 乘法 \ *
  • 除法 /
  • 取余 (取模)%

3.6 变量的作用范围

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

可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用

全局变量格式1:export 变量名

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值