Shell编程规范与变量

news/2024/10/5 7:17:16

目录
  • 1.Shell脚本概述
  • 2.Shell编程规范
    • (1)编写脚本代码
    • (2)脚本编写结构
    • (3)Shell脚本的运行
  • 3.重定向与管道
    • (1)交互式硬件设备
    • (2)重定向操作
    • (3)管道操作“|”
  • 4.Shell脚本变量
    • (1)自定义变量
      • (1)定义一个新的变量
      • (2)赋值时使用引号
      • (3)设置变量的作用范围
      • (4)整数变量的运算
    • (2)特殊变量
      • (1)环境变量
      • (2)只读变量
      • (3)位置变量
      • (4)预定义变量

完成自动化运维工作,批量完成重复操作,结合crontab完成周期性任务

1.Shell脚本概述

Shel脚本的概念:将要执行的命令按顺序保存到一个文本文件;给该文件可执行权限;可结合各种Shell控制语句以完成更复杂的操作。
Shell脚本应用场景:重复性操作;交互性任务;批量事务处理;服务运行状态监控;定时任务执行...

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

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


sh:UNIX最初使用的 shell,已经被bash所替换。
bash:基准于GNU的框架下发展出的Shell,是 sh 的扩展。
csh:语法有点类似于c语言的Shell。
tcsh:整合了csh,提供更多的功能。
nologin:奇怪的shell,这个shell可以让用户无法登录主机。

2.Shell编程规范

(1)编写脚本代码

使用vim文本编辑器
每行一条Linux命令,按执行顺序依次编写 vim XXX.sh
赋予可执行权限,使脚本具有可执行属性chmod +x XXX.sh

编程语言类型:
编译型:C C++ JAVA GO 代码文件需要先编译后,程序才能执行
解释型:SHELL PYTHON 代码是边解释边运行

(2)脚本编写结构

(1)申明解释器
#!/bin/bash
#!/bin/python

(2)编写注释信息:要以 # 号开头表示为注释,被注释的语句在脚本运行时是不会被执行的。

(3)编写执行语句:按照顺序编写要执行的命令语句。

(3)Shell脚本的运行

(1)bash 或 sh 指定脚本文件运行,可无执行权限
绝对路径或相对路径指定脚本文件运行,要求有执行权限
以上两种方式都是在子Shell环境中执行脚本

(2)source 或 . 指定脚本文件运行,可无执行权限
会在当前shell环境中执行脚本

3.重定向与管道

(1)交互式硬件设备

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

(2)重定向操作

命令 > 文件 2>&1  效果等效于混合输出
ls -lh > test.txt 2>&1
ls -lh             标准输出       到屏幕  1 →屏幕
ls -lh > test.txt  重定向输出     到 test.txt   1 → test.txt
2>&1               错误输出 重定向到 标准输出   2 → 1

(3)管道操作“|”

将左侧的命令输出结果,作为右侧命令的处理对象

4.Shell脚本变量

变量的作用:用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置、系统环境的变化而变化
变相的类型:
自定义变量:由用户自己定义、修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量

(1)自定义变量

(1)定义一个新的变量

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

查看变量的值
echo $变量名


(2)赋值时使用引号

双引号 "$XXX"   会把$看作为引用XXX变量值的特殊符号
单引号 '$XXX'   会把$看作为一个普通字符,不会引用变量的值
反撇号 `...`    命令替换,提取里面的命令执行后的结果,效果等于$(...)

read -p "提示信息" 变量名 #从键盘输入中获取变量值


(3)设置变量的作用范围

默认情况下自定义的变量只能在当前shell环境中有效

让自定义的变量在所有shell环境中有效的方法:
(1)在 /etc/profile 文件中定义 export 变量名=变量值 导出为全局变量
source /etc/profile 立即生效 或 重新登录系统自动生效

(2)在 /etc/bashrc 文件中定义 变量名=变量值
切换 shell 环境自动生效

(4)整数变量的运算

expr 变量1 运算符 变量2

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

整数运算
echo $(expr 整数1 运算符 整数2)   $(expr $变量1 运算符 $变量2)   +  -  \*  /  %
echo $[整数1 运算符 整数2]        $[变量1 运算符 变量2]          +  -  *  /  %   
echo $((整数1 运算符 整数2))      $((变量1 运算符 变量2))        +  -  *  /  %   let a=10+5
let a++    相当于   a=$[a+1]
let a--    相当于   a=$[a-1]
let a+=2   相当于   a=$[a+2]




浮点数运算
echo '4.5+2.1' | bc
awk 'BEGIN{print 4.5+2.1}'

(2)特殊变量

(1)环境变量

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

env #查看当前shell


(2)只读变量

用于变量值不允许被修改的情况
readonly
只读变量不可以被重新赋值
只读变量不可以被删除

(3)位置变量

(4)预定义变量

当天日期 date +"%Y%m%d"  
明天日期  date -d "1 day" +"%Y%m%d"              
昨天日期  date -d "-1 day" +"%Y%m%d"    
当月第一天  date +"%Y%m01"                
下个月第一天  date -d "1 month" +"%Y%m01"  
当月最后一天  date -d "$(date -d "1 month" +"%Y%m01") -1 day" +"%Y%m%d"   



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28778.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

C++面试题(三)

1、程序有哪些section,分别的作用?程序启动的过程?怎么判断数据分配在栈上还是堆上?如上图,从低地址到高地址,一个程序由代码段、数据段、 BSS 段组成。 \1. 数据段:存放程序中已初始化的全局变量和静态变量的一块内存区域。 \2. 代码段:存放程序执行代码的一块内存区域…

珂朵莉树/颜色段均摊

名称简介 珂朵莉树(Chtholly Tree),又名老司机树 ODT(Old Driver Tree)。起源自 CF896C。 注意,这种想法的本质是基于数据随机的「颜色段均摊」,而不是一种数据结构,下文介绍的操作是这种想法的具体实现方法。 前置知识 会用 STL 的 set 就行。 核心思想 把值相同的区间…

1、数仓基础

1、数据仓库的概念 数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。数据仓库本身并不“生产”任何数据,其数据来源于不同外部系统;…

第七章——程序设计语言基础知识

基本概念,编译与解释,文法,有限自动机。正规式,表达式,传值与引用(传值),各种程序语言特点第七章——程序设计语言基础知识 7.1 基本概念 7.1.1 低级语言和高级语言 通常称机器语言和汇编语言为低级语言。机器语言是指用0、1字符串组成的机器指令序列,是最基本的计算机语…

软件设计师:软件工程基础知识

能力模型 CMM(能力成熟度模型)初始级:没明确定义 可重复级:建立基本的项目管理过程和实践 已定义级:文档化、标准化 已管理级:管理层制定了软件过程和产品质量的详细度量标准 优化级:不断持续地改进CMMI(能力成熟度模型集成)基本不考已执行的:可标识的输入转换为可标…

TextMeshPro - 富文本标签

初始文本 粗体<b></b> 斜体<i></i> 颜色<#ff0000></color> 大小<size></size> <size=60%>中</size><size=1.2em>中</size> 下划线<u></u> 删除线<s></s> 上标<sup…

Linux 中 2>1 解释

在Linux系统中: 0 表示标准输入; 1表示标准输出; 2表示标准错误输出; 2>&1 表示将标准错误输出重定向到标准输入; 举一个例子: a、不将标准错误输出 重定向到标准输入中。[root@PC1 gffread-0.12.7.Linux_x86_64]# xxx ## 在终端随机输入一个命…

OpenResty

原文:https://www.cnblogs.com/liekkas01/p/12757576.htmlcosocket 是各种 lua-resty-* 非阻塞库的基础,没 有 cosocket,开发者就无法用 Lua 来快速连接各种外部的网络服务。 在早期的 OpenResty 版本中,如果想要去与 Redis、memcached 这些服务交互的话,需要使用 redis2-…