【Shell脚本】shell编程规范与变量

news2024/9/20 22:33:15

shell编程规范与变量

  • 一、shell脚本概述
    • 1.1shell概念
    • 1.2Linux有哪些shell
    • 1.3shell脚本的作用
  • 二、编写shell脚本的规范
    • 2.1编写shell脚本的规范
    • 2.2运行shell脚本的两种方法
  • 三、重定向与管道操作
    • 3.1交互式与硬件设备
    • 3.2重定向操作
    • 3.3管道符号 “|”
  • 四、shell变量的作用、类型
    • 4.1自定义变量
      • 4.1.1read -p
      • 4.1.2赋值时使用引号
      • 4.1.3全局变量设置export
      • 4.1.4整数变量的运算
    • 4.2环境变量
      • 4.2.1常见的环境变量
    • 4.3只读变量
    • 4.4位置变量

一、shell脚本概述

1.1shell概念

  • 将要执行的命令按顺序保存到一个文本文件里
  • 给该文件可执行权限
  • 可结合各种shell控制语句以完成更复制的操作
    什么是shell
  • 什么是Shell?就是与内核沟通的界面、应用程序等等。比如你要播放音乐,你的计算机通过你在shell输入的打开音乐的命令,Shell在告诉操作系统的内核用户希望打开音乐,内核在通过cpu调度、内存管理、磁盘输入输出等工作,将硬件调动,这时硬件声卡才会工作,硬件才是实际的工作者
  • She11(壳程序)是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令(命今) 并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

1.2Linux有哪些shell

  • 检查一下/etc/shells这个文件,里面就是Linux所包含的she11。
  • 最常用的就是bash、tcsh、csh、sh、nologin这些shel1。这些shel1都是依据Linux发展者的不同所创造出的不同版本
  • bash: 基准于GNU的框架下发展出的she11。
  • csh: 语法有点类似于c语言的she11。
  • tcsh: 整合了csh,提供更多的功能。
  • sh: 已经被bash所替换。
  • nologin: 奇怪的shell,这个shel1可以让用户无法登录主机
    在这里插入图片描述

1.3shell脚本的作用

  • 自动化运维
  • 批量化重复操作可以编写脚本结合计划任务自动周期运行
  • 减轻管理员的工作量
  • 提高处理文件的速度
  • 必变配置出错
  • Shell是一个面向字符串的编程语言,可以跟python之类的其他语言配合起来,比如某个复杂的功能使用一个python脚本来实现,然后在shell中调用这个脚本实现较复杂的功能:或者反过来,在python脚本中调用外部的Shell脚本来提高自动化的效率,也是可以的。
    面向对象的语言
  • JAVA,PYTHON,C++,C#,GO
    面向过程的语言
  • C,shell
    强类型语言
  • JAVA,C,C++,C#,GO (编译型语言,执行前需要先编译,运行速度快)
    弱类型语言
  • PYTHON,Shell,PHP (不需要编译即可直接执行,常用于作脚本)

二、编写shell脚本的规范

2.1编写shell脚本的规范

  • 脚本申明,解释器若第一行为"!/bin/bash"]表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
  • 注释信息:以"#"开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。
  • 可执行语句:比如echo命令,用于输出" "之间的字符串
    在这里插入图片描述

2.2运行shell脚本的两种方法

方法一:

  • 指定路径的命令,要求文件必须有x权限

在这里插入图片描述

方法二:

  • 指定shel1来解释脚本,不要求文件必须有x 权限
  • 用 bash/sh 程序指定脚本文件运行,不需要执行权限,脚本会在子shell环境中运行
  • 用 source/. 指定脚本文件运行,脚本会在当前shell环境中运行(会影响当前所在目录、变量的值 等因素)

在这里插入图片描述

三、重定向与管道操作

3.1交互式与硬件设备

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

3.2重定向操作

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

重定向输入

  • 只能用于将文件里的内容给与命令执行,SELlinux会影响此命令执行
    在这里插入图片描述
    重定向输出与追加
    在这里插入图片描述
    标准输出错误
    在这里插入图片描述
    混合输出
    在这里插入图片描述

3.3管道符号 “|”

  • 将左侧的命令输出结果,作为右侧命令的处理对象
  • 需要执行对象的命令则需要通过xargs命令传输
    在这里插入图片描述

四、shell变量的作用、类型

变量的作用

  • 用来存放系统和用户需要使用的特定参数
  • 变量名: 试图固定名称,由系统预设或用户定义
  • 变量值:能够共享用户设置,系统环境的变化而变化

变量的类型

  • 自定义变量:由用户自己定义,修改和使用
  • 特殊变量:环境变量,只读变量,位置变量,预定义变量

4.1自定义变量

  • 变量名以字母或下划线开头,区分大小写,检验全大写变量名=变量值
  • 格式 :变量名=变量值
  • 查看变量值
  • 格式: echo $变量名
    在这里插入图片描述

4.1.1read -p

  • 从键盘输出获取赋值给变量
  • 在这里插入图片描述
    在这里插入图片描述

4.1.2赋值时使用引号

  • 双引号:允许通过$符号引用其它变量值
  • 单引号:禁止引用其它变量值,$视为普通字符
  • 反撇号:命令替换,提前命令执行后的输出结果
  • $() :用法与反撇号一致
    在这里插入图片描述

4.1.3全局变量设置export

  • 普通定义的变量,换一个bash环境就无效了,想要变量在全局有效则需要加export

定义全局变量的两种方法
name1=lisi
export name1
export name2=zhangsan

在这里插入图片描述

4.1.4整数变量的运算

expr

  • expr做乘法的时候需要在*前面加反撇号
    在这里插入图片描述
    echo $(()),echo $[ ]
    在这里插入图片描述
    let
  • 使用let定义一个变量,记录一个数值,用echo输出
    加、减、乘、除、余,与上方一致
    在这里插入图片描述
    ++与–
  • i++:将i定义的变量自增1,放在前面是输出i在自增
  • ++i : 先自增,在输出
  • –i,与 i – :与上方差不多加法变减法
  • 要加或者减去其它数则i+=2,i-=2,i*=2

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

4.2环境变量

  • 由系统提前创建,用来设置用户的各种环境
  • 配置文件:/etc/profile、~/.bash_profiel

4.2.1常见的环境变量

  • PWD:当前用户所在目录
  • PATH:系统命令搜索的路径
  • USER:当前登录用户
  • HOME:当前用户登录的家目录
  • SHELL:当前用户登录的SHELL环境
  • LANG :当前系统的语言和字符集编码
  • HISTSIZE:历史命令条目
  • env :可查看当前系统有哪些环境变量
    在这里插入图片描述

4.3只读变量

  • 用于变量值不允许修改的情况
    readonly,设置只读变量,不能被修改或删除

在这里插入图片描述
删除变量unset,不能删除只读变量
在这里插入图片描述

4.4位置变量

  • $1~$9:代表第一个到第九个位置变量,代表脚本后面跟的以空间相间隔的参数
  • ${10}:表示第十个参数,如果不加括号表示$1和0
  • $0:代表脚本本身
  • $#:代表脚本后面跟的以空间间隔的参数变量
  • $?:代表上一条执行的命令是否成功,命令执行成功返回0,非0值均代表执行异常
  • $* :不加双引号,代表结拜后面跟的以空格向间隔的所有参数;加上双引号后,会把脚本后面跟的以空格相隔的所有参数当作一个整体输出
  • $@ :不加双引号时,代表脚本后面跟的以空格相间隔的所有参数;加上双引号后,效果不变,仍然会把每个参数当作一个个体
    $0~$9的含义

$# 与 $?

:
在这里插入图片描述
** $ * 与$ @**
在这里插入图片描述

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

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

相关文章

WSL2和Windows之间通信实现【以Unity为例】

WSL2可以视为一个独立的虚拟机&#xff0c;具有自己独立的IP地址&#xff0c;通过虚拟路由器与Windows连接&#xff0c;因此WSL2不能直接访问到Windows的主机地址&#xff0c;需要动态获取。 &#xff08;1&#xff09;Windows启用防火墙的WSL2的访问 默认情况下Windows的防火…

陆奇-奇绩创坛-chatGPT新范式,新时代,新机会

奇绩创坛-新范式&#xff0c;新时代&#xff0c;新机会 01-新范式 新范式的新拐点 新范式的历史环境 新范式的社会影响 新范式的缔造者&#xff1a;Sam Altman和OpenAI 新范式的动力引擎 新范式的演化路径 02-新时代 新时代的宏观发展格局 新时代的中国机会 新时代的OpenAI生…

个人复盘和总结 2022——2023

个人心路历程&#xff1a; 从2022年开始接触编程到现在已经断断续续的有一年了。回顾这一年&#xff0c;感觉有进步也有做的不足的地方。好的是从一开始的什么都不会&#xff0c;到现在的至少对计算机有点了解&#xff0c;从C语言到c到Linux系统编程再到Linux网络编程&#xf…

圆桌对话|数字孪生圆桌会议精彩回顾:跨越挑战,迎接机遇

4月20日&#xff0c;以“数实融合&#xff0c;韧性生长”为主题的袋鼠云春季生长大会圆满落幕。本次大会开展了精彩的圆桌会议&#xff0c;在圆桌上&#xff0c;易知微邀请了中国特种设备检测研究院主任&正高级工程师邓贵德、北京中创碳投科技有限公司首席科技官唐进、浙江…

51单片机的中断系统

文章目录 51单片机的中断系统一、中断系统简介程序中断中断可以实现的主要功能中断执行过程 二、51单片中断系统使用中断源中断控制中断允许中断判优中断函数定义 三、中断系统使用案例例一:P3.2 引脚上接了一个按键&#xff0c;P0口连接了8个发光二极管&#xff0c; 要求每次按…

ASIC-WORLD Verilog(9)循环语句

写在前面 在自己准备写一些简单的verilog教程之前&#xff0c;参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好&#xff0c;奈何没有中文&#xff0c;在下只好斗胆翻译过来&#xff08;加了自己的理解&#xff09;分享给大家。 这是网站原文&…

java--ThreadLocal详解

目录 1.ThreadLocal的用途两个使用场景 1.1场景1 1.2两个线程分别用自己的SimpleDateFormat 1.3使用线程池创建1000个打印线程分别用自己的SimpleDateFormat 打印可以看到有很多处两个重复的日期 1.4加锁解决线程安全问题 1.5SimpleDateFormat小结 1.5更好的解决方案是使…

第5章:排序与分页

1.排序数据order by 1.1 排序规则 没有使用排序操作&#xff0c;查询返回的数据是按照添加数据顺序显示 ①&#xff1a;使用order by 子句排序&#xff0c;order by 子句在select语句的结尾 asc(ascend):升序 desc(descend):降序 ②&#xff1a;按照salary从高到低的顺序…

【Linux从入门到精通】Linux常用基础指令(上)

本篇文章会对Linux下的常用进行详细解释&#xff0c;并附加实例。通俗易懂&#xff0c;希望会对你有所帮助。由于内容较多&#xff0c;分为上下篇来讲解。 文章目录 一、什么是Linux的指令呢&#xff1f; 二、Linux下的常用指令 2、1 ls 指令 2、1、1 ls -a 2、1、2 ls -l 2、…

python开发构建基于CNN的人脸识别系统

卷积神经网络在图像处理领域中早就是独树一帜的存在&#xff0c;今天正好有时间就想着基于CNN开发构建一个人脸识别系统&#xff0c;首先看下效果图&#xff1a; 数据集来源于LFW数据集&#xff0c;简单看下本文使用的小批量的数据集如下&#xff1a; 一共有12个人的图像数据&a…

详解git(工作必备)

基本概念 Git 是一个开源的分布式版本控制系统&#xff0c;用以有效、高速的处理从很小到非常大的项目版本管理。 Git 的作用与好处是&#xff1a; 可以帮我们保存文件的所有修改记录&#xff0c;并且使用版本号进行区分&#xff0c;让我们随时可以浏览历史版本、对比不同版本…

Mysql列的完整性约束详解(设置表字段的非空约束(NOT NULL, NK))

设置表字段的非空约束&#xff08;NOT NULL, NK&#xff09; 文章目录 系列文章目录一、设置表字段的非空约束&#xff08;NOT NULL, NK&#xff09; 1.简介2.语句格式总结 一、设置表字段的非空约束&#xff08;NOT NULL, NK&#xff09; 1.简介 当数据库表中的某个字段上的…

perf工具报错,升级ubuntu子系统linux内核

文章目录 1&#xff0c;运行perf工具报错1.1&#xff0c;可能的原因有&#xff1a; 2&#xff0c;我选择升级linux内核&#xff0c;和当前perf工具版本保持一致2.1&#xff0c;下载6.2.12内核源码2.2&#xff0c;安装6.2.12内核 1&#xff0c;运行perf工具报错 1.1&#xff0c;…

今天国际医药行业大型物流系统集成建设案例——广州医药智慧物流中心项目

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 近几年&#xff0c;带量采购常态化、制度化、医保支付方式改革、医保谈判药品“双通道”、线上购药医保结算等一系列政策加速药品流通行业变革步伐&#xff0c;由…

数据驱动的皮肤病变分类深度监测

文章目录 Data-Driven Deep Supervision for Skin Lesion Classification摘要本文方法Layer-Wise Effective Receptive Field (LERF)Object Size Approximation Using Activation MappingDeep Supervision Employment 实验结果 Data-Driven Deep Supervision for Skin Lesion C…

基于html+css的图展示33

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

15天学习MySQL计划-SQL优化/视图(进阶篇)-第八天

SQL优化 1.插入数据&#xff08;insert&#xff09; 1.批量插入 insert into 表名 values(值1,值2),(值1,值2),(值1,值2),(值1,值2) 2.手动提交事务 --查看当前提交的状态 select autocommit; --0代表手动提交 1代表自动提交 set autocommit 0; ​ commit #提交事务 3…

【计算机网络 - 第二章】应用层(更新中)

目录 一、应用层协议原理 1、网络应用程序体系结构 &#xff08;1&#xff09;客户/服务器模型&#xff08;C/S&#xff09; &#xff08;2&#xff09;P2P模型&#xff08;Peer-to-Peer&#xff09; 2、进程通信 &#xff08;1&#xff09;客户和服务器进程 &#xff0…

重载是什么?只有返回值类型不同算不算重载?为什么?

重载定义 首先&#xff0c;重载&#xff0c;从简单说&#xff0c;就是函数或者方法有相同的函数名&#xff0c;但是参数列表不相同的情形&#xff0c;这样的同名不同参数的函数或者方法之间&#xff0c;互相称之为重载函数或者重载方法&#xff0c;例子如下&#xff1a; 重载但…

机房一体化监测解决方案

随着5G、工业互联网等最新基建项目的扎实推进&#xff0c;我国数字经济发展也在不断开拓&#xff0c;很多地区也在积极建设新型信息基础设施&#xff0c;围绕规划、网络、用能等方面加大支持力度。在信息网络技术不断发展的背景下&#xff0c;各类网络设备机房广泛分布。但很多…