Shell编程规范及变量

一.Shell脚本编程概述

1.1、shell概述

shell是一个应用程序,它连接了用户和 Linux 内核,将用户的命令翻译成系统语言,将需要用户的操作传递给内核执行,并输出执行结果,让用户可以更方便、快捷地使用 Linux 内核。 bash文件位于/bin/bash
linux中常见的shell**

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

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

1.2、shell脚本的作用

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

1.3、shell脚本的应用场景

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

二.Shell编程规范

2.1、shell脚本的构成

  • 脚本声明(解释器):若第一行为 #!/bin/bash,表示此行以下的代码语句是通过/bin/bash程序来解释执行(/bin/bash为默认解释器,还有其他解释器,如#!/usr/bin/python,#!/usr/bin/expect
  • 注释信息,#开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行
  • 执行语句,比如echo命令,用于输出" "之间的字符串

2.2、编写脚本代码

[root@localhost ~]# cd /data/
[root@localhost data]# vim ping.sh 

在这里插入图片描述

2.3、执行脚本文件

1 ) ./脚本

[root@localhost data]# cat ping.sh
#!/bin/bash
i=“192.168.32.96”
ping -c 3 $i
[root@localhost data]# chmod +x * 或者chmod 777 ping.sh

[root@localhost data]# ./ ping.sh
-bash: ./: 是一个目录
[root@localhost data]# ./ping.sh
PING 192.168.32.96 (192.168.32.96) 56(84) bytes of data.
64 bytes from 192.168.32.96: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from 192.168.32.96: icmp_seq=2 ttl=64 time=0.032 ms
64 bytes from 192.168.32.96: icmp_seq=3 ttl=64 time=0.031 ms
— 192.168.32.96 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.021/0.028/0.032/0.005 ms

2 ) bash脚本

root@localhost data]# bash ping.sh
PING 192.168.32.96 (192.168.32.96) 56(84) bytes of data.
64 bytes from 192.168.32.96: icmp_seq=1 ttl=64 time=0.032 ms
64 bytes from 192.168.32.96: icmp_seq=2 ttl=64 time=0.032 ms
64 bytes from 192.168.32.96: icmp_seq=3 ttl=64 time=0.032 ms
— 192.168.32.96 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 0.032/0.032/0.032/0.000 ms

3 ) sourse 脚本

[root@localhost data]# source ping.sh
PING 192.168.32.96 (192.168.32.96) 56(84) bytes of data.
64 bytes from 192.168.32.96: icmp_seq=1 ttl=64 time=0.020 ms
64 bytes from 192.168.32.96: icmp_seq=2 ttl=64 time=0.028 ms

2.4、脚本错误

  1. 命令错误

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

  2. 语法错误

    会影响接下来的命令继续

  3. 逻辑错误

    只能自己去筛查

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

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

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

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

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

三.重定向

3.1、重定向

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

重定向的意思就是 ,不通过标准输出到屏幕上,输出到你指定的位置

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

四.Shell脚本变量

4.1、Shell变量的作用

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

4.2、Shell变量的类型

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

命名要求

  • 区分大小写

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

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

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

  • 大驼峰StudentFirstName

  • 小驼峰studentFirstName

  • 下划线: student_name

4.3、整数的运算

expr 变量1 运算符 变量2 
var=$(expr 变量1 运算符 变量2)
var=$((变量1 运算符 变量2))
var=$[变量1 运算符 变量2]
let var=变量1 运算符 变量2
 
i++相当于i=$[$i + 1],i++是先赋值,再运算
i--相当于i=$[$i - 1],++i是先运算再赋值
i+=1相当于i=$[$i + 1]

4.4、环境变量

  • 使用 env 命令可以查看到当前工作环境下的环境变量
  • 变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录,变量PATH表示可执行程序的默认搜索路径
  • 配置文件:/etc/profile(全局生效)、~/.bash_profile(当前用户环境)

在这里插入图片描述

4.5、只读变量

readonly命令用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量

格式:readonly 【选项】【参数】
[root@localhost data]#readonly why=224
[root@localhost data]#why=224 
-bash: why: 只读变量  

4.6、预定义变量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值