当前位置: 首页 > news >正文

Linux之Shell编程(1)

文章目录

  • 前言
  • 一、Shell是什么
  • 二、Shell脚本的执行方式
    • 脚本的常用执行方式
  • 三、Shell的变量
    • Shell变量介绍
    • shell变量的定义
  • 四、设置环境变量
    • 基本语法
    • 快速入门
  • 五、位置参数变量
    • 介绍
    • ●基本语法
    • ●位置参数变量
  • 六、预定义变量
    • 基本介绍
    • 基本语法
  • 七、运算符
    • 基本介绍
    • 基本语法


前言

为什么要学习Shell编程
1.Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
2对于JavaE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
3.对于大数据程序员来说,需要编写Shell程序来管理集群。


一、Shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

在这里插入图片描述

二、Shell脚本的执行方式

脚本格式要求
1.脚本以#!/bin/bash开头
2.脚本需要有可执行权限
●编写第一个Shell脚本
需求说明:创建一个Shell脚本,输出hello world!

#!/bin/bash
echo "hello,word"
chmod u+x shcode.sh  添加可执行权限

脚本的常用执行方式

方式1(输入脚本的绝对路径或相对路径)
说明:首先要赋予helloworld.sh脚本的+x权限,再执行脚本
方式2(sh+脚本)
说明:不用赋予脚本+x权限,直接执行即可。

三、Shell的变量

Shell变量介绍

  1. Linux Shell中的变量分为,系统变量和用户自定义变量。
  2. 系统变量:$HOME、$PWD、$SHELL、$USER等等,比如: echo $HOME 等等.
  3. 显示当前shell中所有变量:set

shell变量的定义

基本语法
1.定义变量:变量=值
2撤销变量:unset变量
3.声明静态变量:readonly变量,注意:不能unset
快速入门
#!/ bin/ bash
#案例1:定义变量AA=100
#输出变量需要加上$

echo A=$A
echo "A=$A"

#案例2:撤销变量A

unset A
echo "A=$A"

#案例3:声明静态的变量B=2,不能unset

readonly B=2
echo "B=$B"
unset B 添加这句,会提示出错

定义变量的规则
1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)
2.等号两侧不能有空格
3.变量名称一般习惯为大写,这是一个规范,我们遵守即可
将命令的返回值赋给变量
1.A=date反引号,运行里面的命令,并把结果返回给变量A
2. A=$(date)等价于反引号

四、设置环境变量

基本语法

  1. export 变量名=变量值(功能描述:将shell变量输出为环境变量/全局变量)
  2. source 配置文件(功能描述:让修改后的配置信息立即生效)
  3. echo $变量名(功能描述:查询环境变量的值)

快速入门

1.在/etc/profile文件中定义TOMCAT_HOME环境变量

export TOMCAT_HOME=/opt/tomcat

在这里插入图片描述

2.查看环境变量TOMCAT_HOME的值

source /opt/tomcat
echo $TOMCAT_HOME

3.在另外一个shell程序中使用TOMCAT_HOME

echo "tomcat=$TOMCAT HOME"

注意:在输出TOMCAT_HOME 环境变量前,需要让其生效source /etc/profile

附Shell脚本的多行注释

 :<<! 内容!

在这里插入图片描述

五、位置参数变量

介绍

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如:./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息

●基本语法

List item

$n(功能描述:n为数字,$0代表命令本身,$1- $9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})

$*(功能描述:这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体)

$ @(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

$#(功能描述:这个变量代表命令行中所有参数的个数)

●位置参数变量

案例:编写一个shell脚本position.sh,在脚本中获取到命令行的各个参数信息。

echo "0=$0 1=$1 2=$2"
echo "所有的参数=$*"
echo "$@"
echo "参数的个数=$#"

在这里插入图片描述

六、预定义变量

基本介绍

就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

基本语法

$$(功能描述:当前进程的进程号(PID) )
$!(功能描述:后台运行的最后一个进程的进程号(PID) )
$ ?(功能描述∶最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
应用实例
在一个shell脚本中简单使用一下预定义变量preVar.sh

#!/bin/bash
echo "当前执行的进程id=$$"
#以后台方式运行一个脚本,获取他的进程号
/root/shcode.sh &
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果是=$?"

在这里插入图片描述

七、运算符

基本介绍

学习如何在shell中进行各种算操作。

基本语法

1.“$((运算式))”或“$[运算式]”或者expr m +n
2.注意expr运算符间要有空格
3. expr m - n
4.expr *.1.% 乘,除,取余
应用实例
案例1:计算(2+3)X4的值

#!/bin/bash
RES=$(((2+3)*4))
echo "res=$RES"

#使用第二种方式,推荐使用

RES2=$[(2+3)*4]
echo " res2=$RES2"
#使用第三种方式expr 
TEMP=` expr 2 +.3`
RES4=`expr $TEMP \* 4`
echo "temp=$TEMP"
echo "res4=$RES4"

#案例2:请求出命令行的两个参数[整数]的和20 50

SUM=$[$1+$2]
echo "sum=$SUM"

相关文章:

Linux之Shell编程(1)

文章目录前言一、Shell是什么二、Shell脚本的执行方式脚本的常用执行方式三、Shell的变量Shell变量介绍shell变量的定义四、设置环境变量基本语法快速入门五、位置参数变量介绍●基本语法●位置参数变量六、预定义变量基本介绍基本语法七、运算符基本介绍基本语法前言 为什么要…...

Java问题诊断工具——JVisualVM

这篇文章源自一次加班改bug的惨痛经历[,,_,,]:3负责的一个项目占用不断增加&#xff0c;差点搞崩服务器(╥﹏╥)……一下子有点懵&#xff0c;不能立刻确定是哪里导致的问题&#xff0c;所以决定好好研究下这个之前一直被我忽视的问题诊断工具&#x1f527;——JVisualVM嘿嘿我…...

Python3实现简单的车牌检测

导语Hi&#xff0c;好久不见~~~两周没写东西了&#xff0c;从简单的开始&#xff0c;慢慢提高文章水准吧&#xff0c;下一个月开始时间就会比较充裕了~~~利用Python实现简单的车牌检测算法~~~让我们愉快地开始吧~~~相关文件网盘下载链接: https://pan.baidu.com/s/1iJmXCheJoWq…...

基于支持向量机SVM多因子测量误差预测,支持向量机MATLAB代码编程实现

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 SVM应用实例&#xff0c;SVM的测量误差预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机&#xff08;support vector machines, SVM&#xff09;是一种二分类模型&#xff0c;它的基本模型是定义在特…...

新农具时代,拼多多的进击与本分

这几年&#xff0c;乡村振兴被频频提及&#xff0c;核心就是经济振兴。但经济振兴&#xff0c;不能只靠政府&#xff0c;更要靠企业&#xff0c;政府引导、企业主导才能真正让农民、农村、农业长期受益。企业中&#xff0c;被寄予厚望的是电商企业。甚至&#xff0c;电商成为了…...

质量工具之故障树分析FTA(2) - FTA的基本概念

关键词&#xff1a;问题解决、故障树、故障树分析、FTA、可靠性、鱼骨图、根本原因分析 前文我们已经详细介绍了FTA的历史。 我们在工作中碰到一个问题&#xff0c;可以利用的问题解决工具有很多&#xff0c;故障树分析FTA就是其中之一。 但是FTA毕竟是相对复杂较难掌握的工具…...

《高质量C/C++编程》读书笔记二

文章目录前言三、命名规则四、表达式和基本语句if语句循环语句五、常量前言 这本书是林锐博士写的关于C/C编程规范的一本书&#xff0c;我打算写下一系列读书笔记&#xff0c;当然我并不打算全盘接收这本书中的内容。   良好的编程习惯&#xff0c;规范的编程风格可以提高代码…...

常用的美颜滤镜sdk算法

本文主要介绍常见的美颜滤镜SDK算法&#xff0c;包括 SRGB、 HSL、 Lab、 JPEG、 TIFF等。本文不会过多介绍算法原理&#xff0c;只是列举一些在实际项目中用到的滤镜效果&#xff0c;如&#xff1a; 1.色彩空间变换 2.颜色范围调节 3.色彩平衡调节 4.灰度级调节 5.色相/饱和度…...

动态SQL必知必会

动态SQL必知必会1、什么是动态SQL2、为什么使用动态SQL3、动态SQL的标签4、if 标签-单标签判断5、choose标签-多条件分支判断6、set 标签-修改语句7、foreach标签7.1 批量查询7.2 批量删除7.3 批量添加8、模糊分页查询1、什么是动态SQL 动态 SQL 是 MyBatis 的强大特性之一。如…...

DML编程控制

id生成策略 模型类: Data TableName("tbl_user") public class User {TableId(type IdType.AUTO)TableId(type IdType.NONE)TableId(type IdType.INPUT)TableId(type IdType.ASSIGN_ID)TableId(type IdType.ASSIGN_UUID)private Long id;private String name;T…...

关于肺结节实时的目标检测

目录 1. 对屏幕固定区域的检测 1.1 代码 1.2 结果展示 2. video 检测 2.1 代码 2.2 展示...

利用 Rainbond 云原生平台简化 Kubernetes 业务问题排查

Kubernetes 已经成为了云原生时代基础设施的事实标准&#xff0c;越来越多的应用系统在 Kubernetes 环境中运行。Kubernetes 已经依靠其强大的自动化运维能力解决了业务系统的大多数运行维护问题&#xff0c;然而还是要有一些状况是需要运维人员去手动处理的。那么和传统运维相…...

C++中的future和promise使用方法

future和promise C11中std::future提供了一种访问异步操作结果的机制。异步操作不能马上就获取操作结果&#xff0c;只能在未来某个时候获取&#xff0c;但可以以同步等待的方式来获取结果&#xff0c;可以通过查询future的状态&#xff08;future_status&#xff09;来获取异…...

Vue项目创建

一.Axios简介 1、Axios是什么&#xff1f; Axios是一个基于promise的HTTP库&#xff0c;类似于jQuery的ajax&#xff0c;用于http请求。可以应用于浏览器端和node.js&#xff0c;既可以用于客户端&#xff0c;也可以用于node.js编写的服务端 安装使用 1.下载axios npm inst…...

2 Vue组件化编程

2.1. 模块与组件、模块化与组件化 模块 理解&#xff1a;向外提供特定功能的 js 程序&#xff0c;一般就是一个 js 文件为什么&#xff1a;js 文件很多很复杂作用&#xff1a;复用、简化 js 的编写&#xff0c;提高 js 运行效率 组件 定义&#xff1a;用来实现局部功能的代码…...

使用GPT-4生成QT代码

一、概述最近ChatGPT火爆起来了&#xff0c;ChatGPT是一种基于GPT的自然语言处理模型&#xff0c;可以用于生成自然语言文本&#xff0c;例如对话、文章等。最近又发现了一个优秀且免费的代码生成工具Cursor.so &#xff0c;Cursor.so集成了 GPT-4 &#xff0c;可以帮助你快速编…...

Golang每日一练(leetDay0013)

目录 37. 解数独 Sudoku Solver &#x1f31f;&#x1f31f;&#x1f31f; 38. 外观数列 Count and Say &#x1f31f;&#x1f31f; 39. 组合总和 Combination Sum &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Py…...

7个Python中的隐藏小技巧分享

Python 是每个程序员都喜欢的语言&#xff0c;因为它易于编码和易于阅读的语法。但是&#xff0c;你知道 python 有一些很酷的技巧可以用来让事情变得更简单吗&#xff1f;在今天的内容中&#xff0c;我将与你分享7 个你可能从未使用过的Python 技巧前言Python 是每个程序员都喜…...

学习系统编程No.8【bash实现】

引言&#xff1a; 北京时间&#xff1a;2023/3/22/6:59&#xff0c;一晃3月都要过去了&#xff0c;时间真快&#xff0c;我都不知道自己这个月是怎么过的呢&#xff1f;怎么就要结束了&#xff0c;难受&#xff0c;恍惚自己还在2022年&#xff0c;刚刚晨跑回来&#xff0c;洗完…...

2023年顶级编程语言趋势

对于开发人员和软件工程师来说&#xff0c;选择更优秀的编程语言使编写可以在任何地方运行的软件变得更加容易&#xff0c;工作效率更高。从 Java 的缓慢衰落到 MATLAB 的惊人流行&#xff0c;对当今最流行的编程语言的分析&#xff0c;可以帮助你了解最新趋势并响应最新趋势。…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...