码迷,mamicode.com
首页 > 系统相关 > 详细

Shell编程规范与变量

时间:2019-12-06 21:09:01      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:oca   覆盖   roo   com   tar   权限   减法   mic   提示信息   

shell编程规范与变量

一、shell脚本的应用场景

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

二、shell编程规范

1、shell的作用

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

2、用户的登录shell

  • 登录后默认使用的shell程序,一般为/bin/bash
  • 不同shell的内部指令,运行环境等会有所区别
  • 通过/etc/shells文件可以了解当前系统所支持的shell脚本种类

技术图片

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脚本文件路径

技术图片

? 方法二 :source脚本文件路径

技术图片

方法三:脚本文件路径(绝对路径与相对路径),必须有x权限

技术图片

没有权限时,三种方式, 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*

技术图片

三:管道操作与重定向

1、交互式硬件设备

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

技术图片

2、重定向操作

技术图片

3、管道操作符号 “ | ”

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

? 1)例如:使用grep命令查询使用“/bin/bash/”作为shell的用户名称时,会输出符合条件的整行内容,结合管道操作与awk命令过滤,只输出用户名和登录shell列。

技术图片

awk :按列读取数据

sed :按行读取数据

grep 、 egrep : 过滤关键词

$1, $7 :位置变量

? 2)例如:提取根分区(/)磁盘使用率信息

技术图片

四:shell变量的作用、类型

1、变量的作用

  • 为灵活管理Linux系统提供特定参数,有两层意思

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

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

    2、变量的类型

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

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

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

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

    3、自定义变量

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

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

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

    例如:

技术图片

? 3)赋值时使用引号

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

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

  • 反撇号:命令替换,提取命令执行后的输出结果

技术图片

? 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]

  • [ ] 常用的运算符:

? 加法运算:+

? 减法运算:-

? 乘法运算:*

? 除法运算:/

? 求模(取余)运算:%

技术图片

五:特殊的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、常见的特殊变量包括环境变量、位置变量、预定义变量

Shell编程规范与变量

标签:oca   覆盖   roo   com   tar   权限   减法   mic   提示信息   

原文地址:https://blog.51cto.com/14557920/2456725

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!