Shell编程规范与变量


一、Shell脚本概述

1.1基本概述

1.1.1 shell脚本的概念

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

1.1.2 shell脚本应用场景

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

1.2 shell的作用

Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
请添加图片描述


1.3 Linux中常见的shell

[root@zzz ~]# cat /etc/shells       //查看当前系统支持的shell
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
  • bash:基于gun的框架下发展的shell
  • csh:类似c语言的shell
  • tcsh:整合了csh提供了更多功能
  • sh:已经被bash替换
  • nologin:这个shell可以让用户无法登录

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


1.4 shell脚本的构成

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

1.5 脚本执行逻辑与执行方式

1.5.1脚本执行逻辑

  • 顺序执行:程序按从上到下顺序执行
  • 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
  • 循环执行:程序执行过程中需要重复执行多次某段语句

1.5.2执行方式

1.指定路径去执行文件(需要有执行权限)
请添加图片描述
2.指定解释器去执行(不需要权限)
请添加图片描述
3.source
请添加图片描述

1.6脚本错误

  • 语法错误,会导致后续的命令不继续执行,可以用bash -n 检查错误,提示的出错行数不一定是准确的
  • 命令错误,默认后续的命令还会继续执行,用bash -n 无法检查出来 ,可以使用 bash -x 进行观察
  • 逻辑错误:只能使用 bash -x 进行

二、重定向与管道符

2.1重定向

2.1.1交互式硬件设备

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

2.1.2重定向操作

类型操作符用途
重定向输入<从指定文件读取数据
重定向输出1>将标准输出结果保存到指定的文件,并且覆盖原有文件
>>将标准输出追加到指定的文件的尾部,不覆盖原有内容
标准错误输出2>将错误信息保存到指定文件,并且覆盖原有文件
2>>将错误信息追加到指定文件的尾部,不覆盖原有内容
混合输出&>和2>&1将标准输出,标准错误保存到同—文件中

请添加图片描述
请添加图片描述
请添加图片描述
多行重定向
请添加图片描述
请添加图片描述

2.2管道符

管道符   “|”
将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用
请添加图片描述

三、变量

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

3.1常见shell变量类型

  • 自定义变量:由用户自己定义,修改和使用
  • 环境变量:由系统维护,用于设置工作环境
  • 只读变量:只可以读取不可以更改
  • 位置变量:通过命令行给脚本传递参数
  • 预定义变量:Bash中内置的一类变量,不能修改

3.2命名要求

  • 区分大小写

  • 不能使程序中的保留字和内置变量:如:if, for,hostname

  • 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反

  • 不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

  • 大驼峰:StudentFirstName

  • 小驼峰:studentFirstName

  • 下划线::student_name

3.3自定义变量

定义新变量
请添加图片描述
引用变量
$变量名 或 ${变量名}
请添加图片描述

强引用和弱引用

  • "$name " 弱引用,其中的变量引用会被替换为变量值
  • '$name ’ 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
    请添加图片描述
    $( ) 和 ` `引用命令执行的结果
    请添加图片描述
    追加变量值
    变量名+=追加值
    请添加图片描述

3.4 read -p

从键盘输入的内容变成变量
请添加图片描述

3.5 变量作用范围

  • 默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再作用。
  • 可以通过内部命令export将指定的变量到处为全局变量,使用户定义的变量在说有子shell环境中可以继续使用

格式:

  • 格式1:export 变量名
  • 格式2:export 变量名=变量值
    请添加图片描述

永久设置变量
请添加图片描述
请添加图片描述

3.6 整数运算

格式: expr 变量1 运算符 变量2 [运算符 变量3]
运算符:加法 + ,减法 - ,乘法 \ * ,除法 / ,取余 (取模)%
expr只能进行整数的运算,并且变量和运算符需要空格相隔
请添加图片描述
let
请添加图片描述
i++ 和 ++i
请添加图片描述

预定义变量

符号注释
$*表示所有位置参数的内容看成一个整体返回
$@表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回
$?表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
$#表示命令行中位置参数的个数
$0表示当前执行的脚本或程序的名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值