Shell编程规范及变量

news2024/11/24 11:37:09

这里写目录标题

  • 一、Shell脚本编程概述
    • 1.1 shell脚本的概念
    • 1.2Shell脚本应用场景
    • 1.3 shell的作用
    • 1.4 linux中有哪些shell
  • 二、 shell脚本的使用
    • 2.1shell脚本的构成
    • 2.2 运行脚本
    • 2.3 重定向和管道操作
      • 2.31交互式硬件设备
      • 2.32 重定向操作
      • 2.33 管道符号
  • 三、shell脚本变量
    • 3.1 shell变量的作用
    • 3.2 shell变量的类型
    • 3.3 赋值时使用引号
    • 3.4 从键盘输入内容为变量赋值
    • 3.5 变量作用范围
    • 3.6 整数变量的算术计算
    • 3.7 环境变量
    • 3.8只读变量
    • 3.9 位置变量
    • 3.10 预定义变量

一、Shell脚本编程概述

1.1 shell脚本的概念

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

  • 给该文件可执行权限;

  • 可结合各种Shell控制语句以完成更复杂的操作。

1.2Shell脚本应用场景

  • 重复性操作

  • 交互性任务

  • 批量事务处理

  • 服务运行状态监控

  • 定时任务执行

1.3 shell的作用

shell就是与内核沟通的界面、应用程序等。比如你要播放音乐,你的计算机通过你在shell输入的打开音乐的命令,shell在告诉操作系统的内核用户希望打开音乐,内核在通过cpu调度、内存管理、磁盘输入输出等工作,将硬件调动,这时硬件声卡才会工作,硬件才是实际的工作者。

在这里插入图片描述

Shell(壳程序)是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

1.4 linux中有哪些shell

通过查看etc下面的shells可以发现当前的linux中有哪些shell

在这里插入图片描述

最常用的就是bash、tcsh、csh、sh、nologin这些shell。这些shell都是依据Linux发展者的不同所创造出的不同版本。
bash:基准于GNU的框架下发展出的shell。
csh:语法有点类似于c语言的shell。
tcsh:整合了csh,提供更多的功能。
sh:己经被bash所替换。
nologin:奇怪的shell,这个shell可以让用户无法登录主机。

二、 shell脚本的使用

2.1shell脚本的构成

1.脚本申明(解释器)∶若第一行为"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin /bash为默认解释器。还有其它类型的解释器,比如# ! /usr/bin/python、# !/usr/bin/expect。

⒉.注释信息:以"#"开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行

3.可执行语句:比如echo命令,用于输出" "之间的字符串

相关语言
面向对象: JAVA 、 PYTHON 、 C++ 、 C# 、 GO
面向过程: C 、 shell
强类型语言: JAVA 、C 、 C++ 、 C# 、 GO
弱类型语言: PYTHON、 shell 、 PHP
编译型语言:执行前需要先编译,运行速度快
解释性语言:不需要编译即可直接执行,常用于作脚本

尝试编辑一个脚本

在这里插入图片描述

在这里插入图片描述

2.2 运行脚本

运行shell脚本
1、用绝对/相对路径指定脚本文件运行,需要执行用户拥有执行权限x,脚本会在子shell环境中运行
2、用 bash/sh 程序指定脚本文件运行,不需要执行权限,脚本会在子shell环境中运行
3、用 source/. 指定脚本文件运行,脚本会在当前shell环境中运行(会影响当前所在目录、变量的值等因素)

尝试运行刚刚编辑的脚本
1、先给刚刚编辑的脚本添加执行权限

在这里插入图片描述
2、通过绝对路径来运行这个脚本

在这里插入图片描述

3、用 bash/sh 程序指定脚本文件运行(不需要执行权限)
当我把脚本的执行权限取消之后,用相对路径或者绝对路径都是用不了,于是尝试使用bash/sh来指定脚本的运行

在这里插入图片描述

4、用source来执行脚本(source可以用·来代替)

在这里插入图片描述

2.3 重定向和管道操作

2.31交互式硬件设备

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

类型设备文件默认编号默认设备
标准输入stdin0默认设备为键盘
标准输出stdout1默认设备为屏幕
标准错误输出stderr2默认设备为屏幕

2.32 重定向操作

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.33 管道符号

管道操作符:“|”: 将管道符号“|"左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道

[root@localhost ~]#ps aux |wc -l                                    #查看进程数
267
[root@localhost ~]#echo "123123"|passwd --stdin zhangsan            #给张三设置密码

三、shell脚本变量

3.1 shell变量的作用

  • 用来存放系统和用户需要使用的特定参数(值)

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

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

3.2 shell变量的类型

自定义变量:由用户自己定义、修改和使用;变量名以字母或者下划线开头,而且区分大小写
特殊变量:环境变量,只读变量,位置变量,预定义变量。

在这里插入图片描述

3.3 赋值时使用引号

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

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

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

在这里插入图片描述

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

read -p “提示信息” 变量名 从键盘输入获取值赋给变量

vim sec.sh创建一个脚本
在这里插入图片描述

执行脚本

在这里插入图片描述

在这里插入图片描述

3.5 变量作用范围

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

在这里插入图片描述

可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。我在etc/profile文件中添加脚本,并在脚本前加上export后,便可以在所有的环境中使用,而且重启后也不会消失

1、首先在profile文件中添加配置

在这里插入图片描述

2、使用 source 对文件profile重新刷新

在这里插入图片描述

3、查看结果

在这里插入图片描述

3.6 整数变量的算术计算

运算符:+加法 、-减法 、\*乘法 、/除法 、%取余

常见的表达方式

expr 变量1 运算符 变量2 
var=$(expr 变量1 运算符 变量2)
var=$((变量1 运算符 变量2))
var=$[变量1 运算符 变量2]
let var=变量1 运算符 变量2
 
i++相当于i=$[$i + 1],i++是先赋值,再运算
i--相当于i=$[$i - 1],++i是先运算再赋值
i+=1相当于i=$[$i + 1]

在这里插入图片描述

通过这种方式也可以实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.7 环境变量

  • 使用 env 命令可以查看到当前工作环境下的环境变量

  • 变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录,变量PATH表示可执行程序的默认搜索路径

  • 配置文件:/etc/profile(全局生效)、~/.bash_profile(当前用户环境)

1、

在这里插入图片描述

2、

在这里插入图片描述

3、

在这里插入图片描述

3.8只读变量

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

readonly 变量名[=值] 设置只读变量,不能被修改值和删除(unset 变量名)

在这里插入图片描述

3.9 位置变量

当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。

在这里插入图片描述

$n:n为数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}

在这里插入图片描述

在这里插入图片描述

3.10 预定义变量

  • $* 和 $@:都会表示命令或脚本要处理的参数。

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

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

预定义变量表示的意思
$*把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4 "
$@把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表“$1” “$2” “$3” “$4”
$0表示当前执行的脚本或命令的名称
$#表示命令或者脚本要处理的参数的个数
$?表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常,也常被用于shell脚本中return退出函数并返回的退储值

$*和$@都有双引号的区别:
编辑一个脚本查看一下

在这里插入图片描述
执行脚本

在这里插入图片描述

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

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

相关文章

【FPGA-DSP】第九期:音频信号处理

从本文开始将记录一些简单的音频信号处理算法在System Generator中的实现方法。本文将介绍如何搭建音频信号的采集与输出模型。 音频信号属于一维信号,一些基本概念如下: 采样频率:根据奈奎斯特采样定理,采样频率Fs应该不低于声…

Vite vue 使用cdn引入element-plus

vite-plugin-cdn-import:cdn的引入插件 npm i vite-plugin-cdn-import or pnpm i vite-plugin-cdn-import vite.config.js import AutoImport from unplugin-auto-import/viteexport default defineConfig({ plugins: [vue({reactivityTransform: true}),importT…

0401概述-最短路径-加权有向图-数据结构和算法(Java)

文章目录 1 最短路径2 最短路径的性质3 加权有向图的数据结构3.1 加权有向边3.2 加权有向图 4 最短路径4.1 最短路径API4.2 最短路径的数据结构4.3 边的松弛4.4 顶点的松弛 结语 1 最短路径 如图1-1所示,一幅加权有向图和其中的一条最短路径: 定义&…

事务—MySQL

文章目录 1.事务的四大特性1.1原子性1.2一致性1.3隔离性1.4持久性 2.并发访问中存在的一些问题2.1丢失更新2.2脏读2.3不可重复读2.4幻读 3.隔离级别解决一致性的问题3.1未提交读3.2提交读3.3可重复读3.4可串行化 4.不同隔离级别可以解决的问题 1.事务的四大特性 1.1原子性 事…

BBR原版/魔改/plus/锐速/七合一脚本linux加速脚本/硬盘挂载/cc防御/宝塔

BBR原版/魔改/plus/锐速七合一脚本linux加速脚本/硬盘挂载/CC防御/宝塔 新云分享的七合一脚本,包含原版BBR、魔改BBR、bbrplus以及锐速可选。 在vultr上Centos 7, Debian 8/9, Ubuntu 16/18测试通过,不支持ovz。 安装指令:复制下面命令在s…

Openswan安装和简单配置

Openswan安装和简单配置 安装环境: 操作系统:Ubuntu20.0.4TLS 用户权限:root下载Openswan: wget https://github.com/xelerance/Openswan/archive/refs/tags/v3.0.0.zip安装Openswan: 解压Openswan:(PS&#xff1a…

[golang gin框架] 26.Gin 商城项目-前台自定义商品列表模板, 商品详情数据渲染,Markdown语法使用

一.前台自定义商品列表模板 当在首页分类点击进入分类商品列表页面时,可以根据后台分类中的分类模板跳转到对应的模板商品列表页面 1.管理后台商品分类模板设置如下图所示 2.代码展示 (1).商品控制器方法Category()完善 修改controllers/frontend/productController…

大模型竞逐,再造AI新格局

作者 | 辰纹 来源 | 洞见新研社 “面对AI时代,所有产品都值得用大模型重做一次。” 这是阿里巴巴集团董事会主席兼CEO、阿里云智能集团CEO张勇在2023阿里云峰会上对AIGC(生成式AI)进化的判断,在这背后则是由ChatGPT为起始点&…

Shiro学习笔记,一篇就够用了

目录 一、Shiro基础 1.1Shiro定义: 1.2Shiro架构: 1.3快速上手: 二、Spring整合Shiro 2.1导入spring整合shiro的依赖 2.2两个配置类 寻找maven版本号:Maven Repository: org.apache.shiro shiro-core (mvnrepository.com) Shiro官网:Apache Shiro | Simple. Java. Securi…

C. Trailing Loves (or L‘oeufs?)(求某个质因子在n的阶乘中的个数 + 思维)

Problem - C - Codeforces Aki喜欢数字,尤其是那些带有尾随零的数字。例如,数字9200有两个尾随零。Aki认为数字拥有的尾随零越多,它就越漂亮。 然而,Aki认为,一个数字拥有的尾随零的数量并不是固定的,而是…

微搭低代码调用第三方API

目录 1 创建项目2 获取实时天气API3 创建APIs4 小程序中调用总结 应粉丝要求,我们本篇介绍一下微搭中如何调用第三方API。我们的应用开发中比较常见的一类需求是开发一个天气的功能,方便用户访问应用的时候实时的看到今天最新的天气情况。 第三方的天气…

虚拟机安装使用经验

1 VMware 跟 VirtualBox 在网络上可以看到很多对比的资料,比如这篇: VirtualBox 和 VMware的区别 VMware 分商业版跟非商业版,我们这里仅讨论非商业版,也就是 VMware Workstation Player,支持在 Linux、Windows、Mac OS 等系统上…

docker容器:Docker consul的容器服务更新与发现

目录 一、Docker consul 1、什么是服务注册与发现 2、什么是consul 3、consul部署 ①实验目的 ②实验环境及拓扑 ③consul配置 ④registrator后端配置 ⑤测试发现功能是否正常 4、consul-template部署 ①准备template nginx模板文件 ②编译安装nginx ③安装templa…

LVS-keepalived

文章目录 一、keepalived1、KEEPALIVED作用2、KEEPALIVED原理3、KEEPALIVED工作模式4、KEEPLIVED问题及优化 二、实验1.LVSKeepalived 高可用群集 总结 一、keepalived 1、KEEPALIVED作用 保证负载均衡的高可用性,完美解决了LVS所有问题,可以检查后端服…

【随笔】转发/转向(服务器重定向,服务器转发,服务器跳转)和重定向(客户端重定向,客户端转发,客户端跳转)

文章目录 1.转发(转向)和重定向图解2.例子3.区别 1.转发(转向)和重定向图解 图:转发(转向) 图:重定向 2.例子 转发:A找B要钱,B没钱,于是B向C…

OSPF路由协议解释

目录 OSPF路由协议OSPF数据包类型OSPF邻区状态OSPF的邻接关系建立过程 路由名词解释OSPF开源项目 OSPF路由协议 OSPF简介 1、(Open Shortest Path First),开放式最短路径优先,它属于链路状态路由协议,大部分路由将由O…

ChatGPT进化的过程简介

Chat GPT可以做什么? 分点列条的回答问题 写代码或SQL 翻译 语法检查 ChatGPT官方还未公开论文,ChatGPT有一个“孪生兄弟”InstructGPT,InstructGPT有论文,可以根据InstructGPT论文推导ChatGPT的训练过程: ChatGPT的…

React函数组件语法(N)

文章目录 react学习的说明新的官网全力投入现代React与Hooks React简介概述官网特点生态 React脚手架create-react-app官网创建和启动项目项目结构sass支持 Vite创建和启动项目项目结构常见配置 虚拟DOM什么是虚拟DOM虚拟DOM优缺点优点:缺点: 虚拟DOM实现…

MySQL死锁的原因和处理方法

MySQL死锁的原因和处理方法 表的死锁产生原因解决方案 行级锁死锁产生原因1解决方案1产生原因2产生原因3解决方案 表的死锁 产生原因 用户A访问表A(锁住了表A),然后又访问表B;另一个用户B访问表B(锁住了表B),然后企图访问表A;这时用户A由于用户B已经锁住表B,它必须…

LeetCode349. 两个数组的交集

题目链接 LeetCode349. 两个数组的交集 题目描述 题解 题解一(Java) 作者:仲景 因为数据范围和长度都限制在1000,所以直接使用数组即可 因为数据范围和长度都在1000内,所以碰到数字可以直接arr[i] i来表示这个数字…