Shell——编程规范与变量揭秘

本文详细介绍了Shell脚本的概念、应用场景,重点解析了Shell变量的作用、类型及用法,包括自定义变量、环境变量、位置变量和预定义变量。此外,还涵盖了重定向、管道操作和基本的Shell脚本编写知识。
摘要由CSDN通过智能技术生成

一、Shell脚本的概述

Shell脚本的概念

将要执行的命令按顺序保存到一个文本文件

  • 给该文件可执行权限,便可运行
  • 可结合各种Shell控制语句以完成更复杂的操作
Shell脚本应用场景
  • 重复性操作
  • 批量事务处理
  • 自动化运维
  • 服务运行状态监控
  • 定时任务执行
  • …………

二、Shell的作用

Shell的作用——命令解释器,“翻译官”
  • 介于系统内核与用户之间,负责解释命令行

在这里插入图片描述

用户的登陆Shell
  • 登陆后默认使用的Shell程序,一般为/bin/bash
  • 不同Shell的内部命令、运行环境等会有所区别

在这里插入图片描述

三、编写第一个Shell脚本

编写脚本代码
  • 使用vim文本编辑器
  • 每行一条linux命令,按执行顺序依次编写

;号表示一句话的结束

同时执行两个不相关的命令,如:

[root@localhost ~]#date;who
2019年 11月 25日 星期一 17:16:38 CST
root     :0           2019-11-25 17:09 (:0)
root     pts/0        2019-11-25 17:10 (:0)

创建脚本执行:

[root@localhost ~]# vim demo.sh
#!/bin/bash                            //脚本声明
#demo.sh
cd /boot
pwd
ls -lh vm*
[root@localhost ~]# chmod +x demo.sh           //添加执行权限
[root@localhost ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  公共  视频  文档  音乐
demo.sh          original-ks.cfg       模板  图片  下载  桌面
[root@localhost ~]# ./demo.sh                  //执行脚本
/boot
-rwxr-xr-x. 1 root root 5.7M 11月 22 02:35 vmlinuz-0-rescue-2dce0ebabd4a407ab61cc0795f02925b
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64
执行脚本文件
  • 方法一:脚本文件路径(绝对路径与相对路径) 必须有x权限 //cd命令不会切换路径
[root@localhost ~]# chmod +x demo.sh           //添加执行权限
[root@localhost ~]# ./demo.sh                  //执行脚本文件
/boot
-rwxr-xr-x. 1 root root 5.7M 11月 22 02:35 vmlinuz-0-rescue-2dce0ebabd4a407ab61cc0795f02925b
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64
[root@localhost ~]#                            //仍在家目录中,cd命令不会切换路径
  • 方法二:sh脚本文件路径 // cd命令不会切换路径
[root@localhost ~]# sh demo.sh
/boot
-rwxr-xr-x. 1 root root 5.7M 11月 22 02:35 vmlinuz-0-rescue-2dce0ebabd4a407ab61cc0795f02925b
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64
[root@localhost ~]#                             //仍在家目录中,cd命令不会切换路径
  • 方法三:source脚本文件路径 //cd命令会区切换路径
[root@localhost ~]# source demo.sh
/boot
-rwxr-xr-x. 1 root root 5.7M 11月 22 02:35 vmlinuz-0-rescue-2dce0ebabd4a407ab61cc0795f02925b
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64
[root@localhost boot]#                              //执行脚本后cd命令会切换路径boot

更完善的脚本构成
  • 脚本声明
  • 注释信息
  • 可执行语句
[root@localhost ~]# vim demo.sh 
#!/bin/bash
#demo.sh
#name:^^^^^
cd /boot                         
echo "当前所在位置:"                             //输出友好提示信息,如当前所在位置:
pwd
echo "以vm为开头的文件为:"                         //输出友好提示信息,如以vm为开头的文件为:
ls -lh vm*
[root@localhost ~]# ./demo.sh                   //执行脚本
当前所在位置:                                    
/boot
以vm为开头的文件为:
-rwxr-xr-x. 1 root root 5.7M 11月 22 02:35 vmlinuz-0-rescue-2dce0ebabd4a407ab61cc0795f02925b
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64

四、重定向与管道操作

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

在这里插入图片描述

重定向操作
类型操作符用途
重定向输入<从指定的文件读取数据,而不是从键盘输入
重定向输出>将输出结果保存到指定的文件(覆盖原有内容)
>>将输出结果追加到指定的文件
标准错误输出2>将错误信息保存到指定的文件(覆盖原有内容)
2>>将错误信息追加到指定的文件中
混合输出&>将标准输出、标准错误的内容保存到同一个文件中
管道操作符号“|”
  • 将左侧命令输出的结果,作为右侧命令的处理对象

    cmd1 | cmd2 […|cmdn]
    

awk 按列读取数据

F 指定分割符,不加F 默认按空格或tab制表符进行分割

目前为以“:”分割,输出第1、7个字段

‘{print }’打印出第一部分和第七部分

[root@localhost ~]# grep "bash$" /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash
ml /bin/bash
[root@localhost ~]#

在这里插入图片描述

五、Shell变量的作用、类型

变量的作用
  • 为灵活管理Linux系统提供特定参数,有两层意思
    • 变量名:使用固定的名称,由系统预设或用户定义
    • 变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
  • 自定义变量:由用户自己定义、修改和使用
  • 环境变量:由系统维护,用于设置工作环境
  • 位置变量:通过命令行给脚本程序传递参数
  • 预定义变量:Bash中内置的一类变量,不能直接修改( 0 、 0、 0*、$#)

六、Shell脚本变量揭秘

自定义变量

定义一个新的变量

变量名以字母或下划线开头,区分大小写,建议全大写

查看变量的值

[root@localhost ~]# addr=192.168.17.1     //将192.168.17.1赋予addr
[root@localhost ~]# echo $addr            //查看变量addr的值
192.168.17.1
[root@localhost ~]# 

在这里插入图片描述

赋值时使用引号

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

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

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

    · ·反撇号里面输的是命令,()小括号里面输的也是命令

在这里插入图片描述

在这里插入图片描述

从键盘输入内容为变量赋值

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

在这里插入图片描述在这里插入图片描述

设置变量的作用范围

格式1:export 变量名…

格式2:export 变量名=变量值
  • —两种格式可以混合使用

在这里插入图片描述

整数变量的运算

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

常用运算符

  • 加法运算:+
  • 减法运算:-
  • 乘法运算:*
  • 除法运算:/
  • 求模(取余)运算:%

在这里插入图片描述

环境变量
  • 由系统提前创建,用来设置用户的工作环境
  • 配置文件:/etc/profile(针对系统全局)、~/.bash_profile(针对当前用户)
常见的环境变量
  • PWD、PATH
  • USER、SHELL、HOME

在这里插入图片描述

位置变量
  • 表示为$n,n为1~9之间的数字

在这里插入图片描述

示例:

[root@localhost ~]# vim nu.sh
#!/bin/bash
sum=0
sum=`expr $1 + $2`
echo "总和为:$sum"
[root@localhost ~]# ./nu.sh 24 13
总和为:37
预定义变量
  • $# :命令行中位置变量的个数
  • $* :所有位置变量的内容
  • $? :上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
  • $0 :当前执行的脚本或程序名称

示例:

[root@localhost ~]# vim nu.sh
#!/bin/bash
sum=0
sum=`expr $1 + $2`
echo "是否执行成功:$?"
echo "总和为:$sum"
echo "执行的脚本名称为:$0"
echo "参数个数为:$#"
echo "详细内容为:$*"
[root@localhost ~]# ./nu.sh 24 13
是否执行成功:0
总和为:37
执行的脚本名称为:./nu.sh
参数个数为:2
详细内容为:24 13
[root@localhost ~]#
内容总结:

1、Shell脚本的内容构成:环境声明、注释文字、执行语句

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

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

4、查看或引用变量的值时,采用"$变量名"的格式

5、环境变量、位置变量、预定义变量的作用与用途

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值