shell编程规范与变量

shell编程规范与变量

一、shell脚本的应用场景

​ Shell脚本就是将要执行的命令按照顺序保存到一个文本文件,并给该文件可执行权限,方便一次性执行的一个程序文件。主要是方便管理员进行设置或管理,可结合各种shell控制语句以完成更复杂的操作。常用于重复性操作、批量事务处理、自动化运维、服务运行状态监控、定时任务执行等。

二、shell编程规范

1、shell的作用

命令解释器 : 介于系统内核与用户之间,负责解释命令行

2、用户的登录shell
  • 登录后默认使用的shell程序,一般为/bin/bash
  • 不同shell的内部指令,运行环境等会有所区别
  • 通过/etc/shells文件可以了解当前系统所支持的shell脚本种类
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HNx79tzh-1575622224635)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575612424633.png)]
3、编写第一个shell脚本
  • 使用vim文本编辑器

  • 每行一条Linux命令,按执行顺序依次编写

  • 脚本后缀为.sh

    例如,将以下三条命令按顺序用shell脚本编写

    cd /boot/

    pwd

    ls -lh vml*

    [root@localhost ~]# vim 1.sh
    
    #!/bin/bash
    cd /boot/
    pwd
    ls -lh vml*
    

    写好之后按 :wq 保存退出,再执行脚本。在执行脚本之前,需要赋予可执行权限

    • 赋予可执行权限,使脚本具有可执行属性
    chmod  +x  1.sh
    
    4、执行脚本文件(三种方法)

    方法一: sh脚本文件路径
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8AEEmCwS-1575622224636)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575613321785.png)]

​ 方法二 :source脚本文件路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xgA1aNz2-1575622224636)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575613723264.png)]

方法三:脚本文件路径(绝对路径与相对路径),必须有x权限
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X5R8fgfK-1575622224636)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575613930831.png)]

没有权限时,三种方式, sh和source可以执行,./ 不可以执行;有权限时,四个都可以执行。

5、更完善的脚本构成
  • 脚本声明

  • 注释信息

  • 可执行语句

[root@localhost ~]# vim 1.sh

#!/bin/bash
#This is my first Shell-Script.        `脚本的表述信息`
cd /boot
echo "当前的目录位于:"            `输出友好提示信息`
pwd
echo "其中以vml开头的文件包括:"    `输出友好提示信息`
ls -lh vml*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UnItYxIw-1575622224637)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575615499430.png)]

三:管道操作与重定向

1、交互式硬件设备
  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:通过该设备向用户输出数据
  • 标准错误:通过该设备报告执行出错信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M4HwUtLD-1575622224637)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575615602566.png)]

2、重定向操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvTITYOz-1575622224638)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575615665981.png)]

3、管道操作符号 “ | ”

将左侧的命令输出结果,作为右侧命令的处理对象。管道操作通常用来过滤所需要的关键信息。

​ 1)例如:使用grep命令查询使用“/bin/bash/”作为shell的用户名称时,会输出符合条件的整行内容,结合管道操作与awk命令过滤,只输出用户名和登录shell列。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GBXUF9vL-1575622224638)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575616221784.png)]

awk :按列读取数据

sed :按行读取数据

grep 、 egrep : 过滤关键词

$1, $7 :位置变量

​ 2)例如:提取根分区(/)磁盘使用率信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7qlE2bx8-1575622224639)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575616657544.png)]

四:shell变量的作用、类型

1、变量的作用
  • 为灵活管理Linux系统提供特定参数,有两层意思

  • 变量名:使用固定的名称,由系统预设或用户定义

  • 变量值:能够根据用户设置,系统环境的变化而变化

    2、变量的类型
  • 自定义变量:由用户自己定义,修改和使用

  • 环境变量:由系统维护,用于设置工作环境

  • 位置变量:通过命令行给脚本程序传递参数

  • 预定义变量:bash中内置的一类变量,不能直接修改

    3、自定义变量

    ​ 1)定义一个新的变量, 变量名以字母或下划线开头,区分大小写,建议全大写

    变量名=变量值 -----> 将右边的值赋予左边

    ​ 2)查看变量的值: echo $变量名

    例如:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-as9CcDzX-1575622224639)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575617390570.png)]

​ 3)赋值时使用引号

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

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

  • 反撇号:命令替换,提取命令执行后的输出结果
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aJm399OV-1575622224640)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575618082214.png)]

​ 4)从键盘输入的内容为变量赋值

​ read [-p “提示信息” ] 变量名

[root@localhost opt]# vim demo.sh

#!/bin/bash
#This is my first shell-script
read -p "请输入一个整数:" score
        echo "你的成绩为 $score"

[root@localhost opt]# chmod +x demo.sh
[root@localhost opt]# ./demo.sh
请输入一个整数:99
你的成绩为 99

​ 5) 设置变量的作用

​ 格式1:export 变量名…

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

[root@localhost opt]# num=`ps aux | wc -l`
[root@localhost opt]# echo $num
156
[root@localhost opt]# bash	   '设置变量作用范围'
[root@localhost opt]# echo $num
		'显示不出来'
[root@localhost opt]# exit	   '退出变量范围'
exit
[root@localhost opt]# echo $num
156
[root@localhost opt]# export num	 '使用export设置变量'
[root@localhost opt]# bash		 '变量范围'
[root@localhost opt]# echo $num	 	'生效'
156

6)整数变量的运算

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

  • 常用的运算符:

​ 加法运算:+

​ 减法运算:-

​ 乘法运算:*

​ 除法运算:/

​ 求模(取余)运算:%
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F1DuQf84-1575622224640)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1575619956788.png)]

五:特殊的shell变量

1、环境变量
  • 由系统提前创建,用来设置用户的工作环境

  • 配置文件:/etc/profile,~/.bash_profile

  • 常见的环境变量

PWD, PATH, USER, SHELL , HOME

2、位置变量

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

[root@localhost ~]# vim 1.sh

#!/bin/bash
#This is my first Shell-Script.
sum=0
sum=`expr $1 + $2`
echo "总和为$sum"

[root@localhost ~]# ./1.sh  20 30     `定义$1,$ 两个数字`
总和为50
3、预定义变量

​ $# :命令行中位置变量的个数

​ $* :所有位置变量的内容

​ $? :上一条命令执行后返回的状态,当返回状态值为0时表示正常,非0值表示执行异常或出错

​ $0 :当前执行的进程/程序名

[root@localhost opt]# vim 1.sh

#!/bin/bash
TARFILE=beifen-`date +%s`.tgz    '设置变量名称,+%s表示从1970至今经过的秒数,所以文件名不会出现重复的情况,就不会有被覆盖的风险'
tar zcvf $TARFILE $* &> /dev/null	 'tar工具压缩输出到 /dev/null'  (/dev/null 相当于黑洞,放进去的信息找不回) 
echo "已执行$0个脚本"	     '当前执行的进程名'
echo "共完成$#个对象的备份"	    '位置变量的个数'
echo "具体内容包括:$*"	   '所有位置变量的内容'

[root@localhost opt]# ./1.sh /etc/passwd /etc/shadow
已执行./1.sh个脚本
共完成2个对象的备份
具体内容包括:/etc/passwd /etc/shadow

总结:1、shell脚本的内容构成由环境声明、注释文字、执行语句。

​ 2、重定向包括重定向输入、重定向输出、错误重定向。

​ 3、定义或赋值变量时,采用“变量名=变量值” 的格式。赋值操作还可以使用单引号、双引号、反撇号、read 命令等方式。

​ 4、查看或引用变量的值时,采用“$变量名” 的格式。

​ 5、常见的特殊变量包括环境变量、位置变量、预定义变量

sh个脚本
共完成2个对象的备份
具体内容包括:/etc/passwd /etc/shadow


总结:1、shell脚本的内容构成由环境声明、注释文字、执行语句。

​            2、重定向包括重定向输入、重定向输出、错误重定向。

​            3、定义或赋值变量时,采用“变量名=变量值” 的格式。赋值操作还可以使用单引号、双引号、反撇号、read 命令等方式。

​             4、查看或引用变量的值时,采用“$变量名” 的格式。

​             5、常见的特殊变量包括环境变量、位置变量、预定义变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值