Linux之Shell编程快速上手

news2025/7/20 20:49:58

Shell编程快速上手

  • 一、Shell编程基础
    • 1.1 Shell脚本程序
    • 1.2 创建Shell脚本
  • 二、Shell的语法
    • 2.1Shell的变量
    • 2.2 设置环境变量
    • 2.3 位置参数变量
    • 2.4预定义变量

一、Shell编程基础

  在linux系统中,shell不仅能够执行命令(启动、挂起、停止甚至编写一些程序),还可以使用shell编程进行任务自动化,进行系统管理任务、系统任务调度等,是一门非常优秀的编程语言!

1.1 Shell脚本程序

  Shell脚本程序是Shell命令语句的集合,保存在文本文档中,可直接使用文本处理器运行和编程(如Vim)。Shell由Shell环境解释执行,Shell脚本在Linux系统中不需要编译、链接、及生成可执行文件,可直接由相应解释器解释执行

1.2 创建Shell脚本

脚本格式要求:

(1)脚本必须以#!/bin/bash 开头,告诉系统应该用何种Shell来执行此脚本。
(2)脚本需要设置可执行权限。

脚本常用执行方式:

(1)输入脚本绝对路径或者相对路径(首先要设置+x权限)。
(2)直接用(sh+脚本)直接执行,不用+x权限。

直接使用文本编辑程序(Vim)
(1)创建一个hello.sh

vim hello.sh
#输入 i 进入文本模式,输入一下内容
#echo 是输出命令

在这里插入图片描述
(2)存盘推出:按Esc键回到正常模式,输入:wq!
(3)无可执行权限用(sh+脚本)

sh hello.sh

(4)设置脚本可执行权限 chmod命令,并用相对地址执行脚本

chmod u+x hello.sh
./hello.sh

在这里插入图片描述注意:shell脚本通普通文件一样,可以没有扩展后缀,但为了方便区分,建议Bash脚本文件以sh结尾,如“shell.sh”。

二、Shell的语法

2.1Shell的变量

Shell变量的介绍:

(1)Shell变量分为系统变量和用户自定义变量。
(2)系统变量:$HOME、$PWD、$HELL等等
(3)显示当前shell中所有变量:set

Shell变量的语法:

定义变量:变量=值,=两边不能有空格。
变量名区分大大写,建议大写。
通过变量名前加$符号访问它的内容。
撤销变量:unset 变量
声明静态变量:readonly变量,静态变量不能unset。

$(command)语法:

运行括号里面的结果,并把命令放回给一个变量
A=$(data),将data的值赋值给A变量。

引号的使用:

(1)一个参数包含一个或多个空白字符需要给参数加上引号。
(2)双引号:“$data”,把data变量替换成它的值
(3)单引号:’$data‘,不会发生替换行为。
效果演示:vim var.sh 创建脚本程序

#!/bin/bash
#定义变量A
A=100
#输出变量的值
echo A=$A
echo A="$A"
echo A='$A' #单引号不发生替换
#撤销变量A
unset A
echo "A=$A"
#$(command)命令,返回结果给变量
D=$(date)
echo 当前时间为:$D

执行结果:sh var.sh
在这里插入图片描述

2.2 设置环境变量

起始也就是全局变量,在一个脚本中定义,其他程序脚本都能使用的这个环境变量。

1.exprot 变量名=变量值 (将shell变量设置为环境变量)
2.source 配置文件 (让修改后的配置文件立即生效,记得运行前现加一句)

2.3 位置参数变量

获取一个命令行的参数信息,可以使用位置参数实现。比如./envvar.sh 10 20 30,这就是一个执行shell的命令行,可以在脚本中获取参数信息。
基本语法:

1.$n:n代表数字,$0代表命令行内容,$1-$9代表第一到第九个参数,十个及十个以上需要用大括号包含,如${10}
2.$*:代表命令行中的所有参数
3.$#:代表命令行中参数的个数。

编写一个shell脚本:vim envvar.sh

#!/bin/bash
echo "当前脚本程序的名字:$0"
echo "当前第二个参数是:$2"
echo "当前传递了$#个参数”
echo "当前传递的参数分别为:$*" 
~                                  

在这里插入图片描述

2.4预定义变量

shell设计时已经定义好的变量,可以直接在shell脚本中使用
基本语法:

1.$$:当前进程的进程号(PID)
2.$!:后台运行的最后一个进程的进程号
3.$?:最后一次执行的返回状态,如果这个变量的值为0.证明上一个命令正确执行;如果这个变量的值为非0(数值由命令自己决定),则证明上一个命令执行不正确。

执行程序:

#!/bin/bash
echo "当前程序执行的进程号:$$"
echo "最后一个进程的进程号:$!"
echo "执行结果:$?"

运行结果:
在这里插入图片描述

更新中…

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

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

相关文章

工业无线呼叫安灯(Andon)系统上线须知

在很多现代化生产制造企业内,工业无线呼叫安灯(Andon)系统是一个非常重要的管理系统。安灯系统本质上是发现问题及时将问题传递给相关人员,将问题阻止在最初的地方并及时解决问题。安灯系统是一种提高制造质量和生产效率的最有效手…

重建恐龙化石,摄影测量在古生物学中有怎样的意义?

一直以来,恐龙都是很多人喜欢的对象,各种恐龙主题的影视作品也是层出不穷,特别是《侏罗纪公园》系列电影,将恐龙推上了电影明星的位置。各种收藏恐龙巨型化石的博物馆也相当受欢迎。 随着三维重建的普及,建模打印和恐龙…

http请求和响应格式说明,http的get和post请求方式说明,http的请求体body的几种数据格式

HTTP内容说明 请求报文 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成, 请求报文的一般格式 <request-line> <headers> &am…

Firefly RK3399 PC pro开发板资料

一. 基本介绍 产品介绍:Firefly | 让科技更简单,让生活更智能开发板规格书:https://download.t-firefly.com/product/Board/RK3399/Document/Hardware/ROC-RK3399-PC%20Pro/Specification/ROC-RK3399-PC%20Pro%20%E4%BA%A7%E5%93%81%E8%A7%84…

AES实现接口的安全性

文章目录Maven项目结构图引入依赖AESUtilsEnDecryptUtilEncryptPropertiesEncryptAutoConfigurationspring.factories打成jar包,供其他项目 / 人使用打成jar 包导入 jar 包测试application.yamlUser类HelloController 测试代码地址: 链接:htt…

深入理解java虚拟机:类文件结构(1)

文章目录1. 概述2. Class类文件的结构2.1 魔数与Class文件的版本2.2 常量池2.3 访问标志2.4 类索引、父类索引与接口索引集合2.5 字段表集合1. 概述 如果计算机的CPU指令集就只有x86一种,操作系统就只有Windows一种,那也许就不会有Java语言的出现。Java…

云原生:容器与微服务

目录 一、虚拟化与容器 1.1 虚拟机 1.2 容器 1.3 Docker 1.4 Docker代码示例 二、微服务 2.1 微服务的概念 2.2 微服务的特点 三、为什么使用微服务 3.1 微服务的优缺点 3.2 云原生的支持服务 云原生技术使组织能够在新式动态环境(如公有云、私有云和混…

攻防世界-pwnCTFM-Off_By_one漏洞与Tcachebin绕过

攻防世界-pwnCTFM-Off_By_one漏洞与Tcachebin绕过 保护机制 healerhealer-virtual-machine:~/Desktop/pwnCTFM/attachments$ checksec pwn [*] /home/healer/Desktop/pwnCTFM/attachments/pwnArch: amd64-64-littleRELRO: Full RELROStack: Canary foundNX: …

线性判别分析(机器学习)

目录 线性判别分析的原理 LDA的降维过程如下 线性判别分析(LDA) 是一种有监督的线性降维算法。 与PCA不同,LDA是为了使降维后的数据点尽可能地容易被区分 线性判别分析的原理 线性判别分析是对于给定的训练集,设法将样本投影到…

基于HTML+CSS+JavaScript+Bootstarp响应式健身网站(web前端期末大作业)

网站题目> 🏀校园篮球网页设计、⚽足球体育运动、🤽体育游泳运动、🏓兵乓球 、🎾网球、等网站的设计与制作。 二、✍️网站描述> 🏷️ 大学生校园运动静态HTML网页设计作品,采用DIV CSS布局制作&am…

数据结构体进阶链表【带头双向循环链表,单向链表的优化,从根部解决了顺序表的缺点】一文带你深入理解链表

前言: 对于链表,上一篇的单链表解决了顺序表的一部分缺陷,但并没有彻底的解决顺序表的问题,比如在进行单链表尾插尾删的时候还是需要进行遍历找尾,并没有达到全部的O(1),并且在头插的时候还要分情况来考虑&…

【ASM】字节码操作 工具类与常用类 AdviceAdapter 介绍 打印方法进入 和 方法退出 的参数

文章目录 1.概述2. AdviceAdapter类2.1 class info2.2 fields2.3 constructors2. 4 methods2.案例2.1 打印方法参数3.总结1.概述 在上一篇文章:【ASM】字节码操作 工具类与常用类 Printer、ASMifier、Textifier 介绍 我们简单的介绍了 Printer、ASMifier、Textifier 三个类的…

idea2021版本创建一个javaweb项目(含额外知识--添加tomcat相关jar包)

前言: 建立一个javaweb项目需要用到JDK、idea、Tomcat 1. JDK是11版本的 2.IDEA是2021版本的 3.Tomcat是8.5版本的 这些下载在我的其他文章里面也有讲到下载和应用,大致都是殊途同归的 一、打开ided,按照以下步骤点击创建一个工程项目…

X11 Xlib截屏代码所遇问题及初步分析

综合了两篇博客中的例程并做一定修改&#xff0c;得到了基于X11 Xlib的截屏代码。 两篇博客链接分别如下&#xff1a; X11 截图与鼠标事件-SkyMei777-ChinaUnix博客 xlib实现截图报错-编程语言-CSDN问答 C代码如下&#xff1a; #include <stdio.h> #include <std…

[附源码]SSM计算机毕业设计自治小区物业设备维护管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

TK选品技巧 | 听说TikTok畅销品都是这样来的

9月16日消息&#xff0c;TikTok Shop发布东南亚99大促战报&#xff0c;此次战报数据包含了马来西亚、新加坡、菲律宾、越南和泰国五国销售数据&#xff0c;战报显示&#xff0c;此次东南亚99大促总GMV增幅达156%&#xff0c;总live GPM增幅达130%&#xff0c;订单量增幅达128%&…

基于springboot的社区疫情管理系统源码

1、项目介绍 基于springboot的社区疫情管理系统拥有三种角色&#xff1a;超级管理员、普通管理员、用户 超级管理员&#xff1a;管理员和用户管理、人员检测信息管理、外来人员报备管理、防疫须知管理、疫情用品类型管理、疫情用品管理、订单管理、评论管理、审核外来人员、新…

【ML-SVM案例学习】案例一:对鸢尾花数据进行SVM分类(附源码)

文章目录前言一、完整源码分步实现1.引入库2.读入数据3.编码数据4.数据分割5.数据SVM分类器构建6.计算模型的准确率/精度7.计算决策函数的结构值以及预测值8.画图总结前言 【ML-SVM案例学习】会有十种SVM案例&#xff0c;供大家用来学习。本章实现SVM鸢尾花数据的分类任务。 一…

PDF能编辑修改吗?教你必备的几种编辑方法

可以把PDF文件编辑修改吗&#xff1f;相信这是很多萌新在刚接触PDF文件时所产生的疑惑&#xff0c;因为在想要改动PDF文件的时候&#xff0c;发现无法直接编辑内容&#xff0c;就会有PDF文件可以编辑吗的疑问了&#xff0c;其实有这种想法非常正常&#xff0c;大家都是经历过的…

【设计模式】单例模式

单例模式属于创建型模式&#xff0c;是最简单的一种设计模式。当一个类在程序中只需要创建唯一全局对象时&#xff08;如网站计数类、日志管理类、线程池类……&#xff09;&#xff0c;就可以使用单例模式。单例模式规定一个类只能创建一个实例&#xff0c;之后不能再创建新的…