IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Shell编程规范与变量 -> 正文阅读

[系统运维]Shell编程规范与变量

目录

前言

一、Shell脚本

1、Shell脚本概念

2、Shell脚本应用场景

3、Shell的作用

4、编写脚本代码

4.1??编写脚本

4.2? 赋予执行权限?

4.3? 显示消息

二、重定向与管道操作

1、重定向概念

2、交互式硬件设备

3、重定向的操作

三、变量

1、作用

2、类型

3、查看变量的值

4、赋值时使用引号等

5、read 从键盘中获取变量的值

6、echo 的常见用法

7、局部变量和全局变量

8、整数变量的运算

8.1? 格式

8.2? 常见的运算表达式

四、特殊的Shell变量

1、环境变量

2、只读变量

3、位置变量

4、预定义变量?

总结


前言

随着Linux系统在企业中的应用越来越多,服务器的自动化管理也越来越重要。一些复杂的维护工作中,一个恰到好处的Shell脚本,可以批量处理、自动化的完成一系列维护任务,从而减轻管理员的负担。

一、Shell脚本

是弱编程语言,用户和内存之间的翻译官,把用户输入的指令翻译成计算机识别的二进制语言

1、Shell脚本概念

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

2、Shell脚本应用场景

  • 重复性操作:例如写个for循环,批量性任务
  • 交互性任务 :通过免交互性
  • 批量事务处理
  • 服务运行状态监控:例如监控磁盘空间,内存使用率,服务的状态等
  • 定时任务执行

3、Shell的作用

作用:命令解释器,“翻译官”
●介于系统内核与用户之间,负责解释命令行
用户输入→shell→Linux内核→硬件→反馈用户

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

4、编写脚本代码

4.1??编写脚本

  • 使用vim编辑器
  • 每行linux命令按照从上往下的顺序读取?
vim /root/first_demo.sh               #使用vim编辑器
#! /bin/bash                          #脚本解释器声明
# This is my first Shell-Script.      #注释,在写脚本时要加注释,一般是一半脚本一半注释,注释内容最好使用英文,因为中文模式容易导致代码出现错误
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以vml开头的文件包括: "
ls -lh vml*

4.2? 赋予执行权限?

方法一:脚本文件路径(绝对路径和相对路径),要求文件必须有 x(可执行)权限

chmod +x / root/first_demo.sh
指定绝对路径:  /root/first_demo.sh
指定相对路径:  ./first_demo.sh

方法二:sh脚本文件路径,不要求文件必须有 x (可执行)权限

sh first_demo.sh

方法三:source脚本文件路径,不要求文件必须有 x (可执行)权限

source first_demo.sh  或者 . source first_demo.sh

实例:

4.3? 显示消息

二、重定向与管道操作

1、重定向概念

由于Shell脚本“批量处理”的特殊性,其大部分操作过程位于后台,不需要用户进行干预,因此要学会提取、过滤执行信息变得十分重要,所以我们需要重定向和管道。

将管道符号“|”左侧的命令输出的结果,作为右侧命令的输入(处理对象)?。


ps aux | wc -l                                  #查看进程数
echo "abc123" | passwd --stdin zhangsan                                 #给zhangsan用户设置密码abc123

2、交互式硬件设备

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

3、重定向的操作

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

?实例:重定向输出和输入

标准错误输出

混合输出

三、变量

1、作用

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

2、类型

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

  • 特殊变量:环境变量,只读变量,位置变量,预定义变量

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

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

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

? ? 只读变量:只能声明,但不能修改和删除

3、查看变量的值

echo $变量名

4、赋值时使用引号等

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

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

反撇号:命令替换,提取命令执行后的输出结果,`...`和$(...)作用相同

实例:

?

5、read 从键盘中获取变量的值

方法一:

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

方法二:

#!/bin/bash

echo?-n?"提示信息:"

read?变量名<br>echo?$变量

实例:

6、echo 的常见用法

echo -n #表示不换行输出

echo -e #输出转义字符,将转义后的内容输出到屏幕上

在这里插入图片描述?

7、局部变量和全局变量

默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用

可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用

格式:

格式1: export 变量名
格式2: export 变量名=变量值

实例:

8、整数变量的运算

8.1? 格式

expr 变量1 运算符 变量2 [运算符 变量3]
运算符:+ 加法、-减法、\*乘法、/除法、%取余

8.2? 常见的运算表达式

(result代表自定义变量,可用任意代替)
result=$(expr 变量1 运算符 变量2)
result=$((变量1 运算符 变量2))
result=$[变量1 运算符 变量2]
let result=变量1 运算符 变量2

数字运算:i=$(expr 10\*8) 变量运算:i=$(expr $a \* $b)
数字运算:i=$((10 * 8)) 变量运算:i=$(($a * $b))
数字运算:i=$[10 * 8] 变量运算:i=$[$a * $b]
数字运算:let i=10 * 10 变量运算:let i=$a*$b
 
i++相当于i=$[$i + 1]
i--相当于i=$[$i - 1]
i+=1相当于i=$[$i + 1]

实例:

四、特殊的Shell变量

1、环境变量

由系统提前创建,用来设置用户的工作环境

配置文件: /etc/profile、~/.bash_profile

echo $PATH      #查看当前搜索路径
PATH="$PATH:/root"  #将/root目录添加到搜索路径
export PATH="$PATH:/root"   #输出为全局环境变量

实例:

2、只读变量

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

格式:readonly 【选项】【参数】

name=lili
readonly name        #设置为只读变量
echo $name
name=lulu           #只读变量不可以被重新赋值
unset name         #只读变量不可以被删除,unset命令用于删除变量

实例:

3、位置变量

  • 当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
  • $n: n为数字,$0代表命令本身,$1- $9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为${10}

实例:

4、预定义变量?

$*、$@:表示命令或脚本要处理的参数。

$*:把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4"

$@:把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表"$1" "$2" "$3" "$4"

$0:表示当前执行的脚本或命令的名称。

$#:表示命令或脚本要处理的参数的个数

$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。也常被用于Shell脚本中return退出函数并返回的退出值。


$*、$@不加双引号时表现一致;加双引号时,$*会将所有参数作为一个整体。
vim bianliang.sh
#!/bin/bash
test()  {
        echo "未加引号,二者相同"
        echo $*
        echo $@
        echo "加入引号后对比"
        for N in "$*"
        do
            echo $N
            echo " "
        done
        
        echo "----"
        for N in "$@"
        do
           echo $N
           echo " "				
        done					
}
test 12 34 56 78

实例:$?的使用,可用来判断服务状态是否正常

总结

? Shell的概念与应用场景
? Shell脚本的编写规范与执行方法:
? 重定向与管道的作用与使用方法
? 自定义变量赋值时单引号、双引号、反撇号的使用方法
? 数值变量的常用运算符: +、-、 \ *、 /、 %
? 环境变量、 只读变量、位置变量、预定义变量的用途 ?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:30:56  更:2021-09-06 11:33:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:22:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码