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

shell脚本(语法)

一、什么是shell脚本

1.1、shell 的两层含义:既是一种应用程序,又是一种程序设计语言

      1.1.1、shell是一种应用程序

        交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能称之为 shell 命令解析器。

        shell 是用户和 Linux 内核之间的接口程序

        用户在提示符下输入的命令都由 shell 先解释然后传给 Linux 核心。它调用了系统核心的大部分功能来执行程序、并以并行的方式协调各个程序的运行。
         Linux 系统中提供了好几种不同的 shell 命令解释器,如 sh、ash、bash 等。一般默认使用 bash 作为默认的解释器。

       1.1.2、shell是一种程序设计语言

         它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支,完成类似于 windows 下批处理操作,简化我们对系统的管理与应用程序的部署称之为 shell 脚本

二、shell和我们使用编译性语言(如c/c++)区别

      (1)我们学过的 c/c++等语言,属于编译性语言(编写完成后需要使用编译器完成编译、汇编、链接等过程变为二进制代码方可执行)

      (2)shell 脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装 shell 命令解释器的环境下执行

示例讲解 :

   当我们写完c代码的时候,需要使用   gcc  ,才可以编译成可执行文件,  再   ./ 运行文件 。shell脚本,写完代码,只需赋一个可执行权限 ,不需要用 gcc   ,就可以  ./  运行文件   或者  不用赋权限, 直接  bash  代码文件    就可运行  可执行文件

shell 脚本主要用于:
          帮助开发人员或系统管理员将复杂而又反复的操作放在一个文件中,通过简单的一步执行操作完成相应任务,从而解放他们的负担.

三、shell的简单流程

以输入 ls  -l    指令为例

第一步:创建xx.sh 文件         (如: vim   test.sh    )

第二步:进入编辑

              定义以开头:#!/bin/bash    (  #!用来声明脚本由什么 shell 解释,否则使用默认 shell)

                                                              (单个"#"号代表注释当前行)

              输入需要的指令           (如;  ls -l)

第三步:添加可执行权限     chmod   +x    test.sh

第四步:    ./test.sh

如下图结果

 

运行的  结果  和    ls  -l指令显示     一致

3.1、扩展

shell的执行方式有三种:

第一种:chmod + x test.sh ./test.sh 增加可执行权限后执行      (也就是上图的执行方法)

第二种:bash test.sh                                 (直接指定使用 bash 解释 test.sh)

第三种:. test.sh(source test.sh)              (  使用当前 shell 读取解释 test.sh)

3.2、区别:

区别1: 第三种与其它的区别

             第一种和第二种,执行时,会在后台启动一个  新的 shell   去执行脚本。

             而第三种,是直接执行本次所创建的shell脚本 ,如上图例子,即自己创建的  test.sh

区别2:第一种和第二种的区别

             第一种:运行时,计算机首先检测#!,使用#!指定的 shell,如果没有使用默认的 shell。

比如上图的例子,我使用的是  #!/bin/bash   即bash解析器

            而第二种:不检测#!,直接使用bash解析器

   四、shell的语法

4.1、变量

定义变量
                 变量名=变量值                   如:num=10   (注意:等号两边不可空格且无需变量类型
引用变量
                  $变量名                                          如:i=$num 把变量 num 的值付给变量 i
显示变量

      使用 echo 命令可以显示单个变量取值     如: echo $num     把num的值显示到终端

清除变量 

                  使用 unset 命令清除变量             如:unset   num   

例子:演示使用

输出结果

 4.2、变量的其它用法

read   string
                          从键盘输入一个字符串付给变量 string
readonly var=100
                         定义一个只读变量,只能在定义时初始化,以后不能改变,不能被清除
export var=300
                        使用 export 说明的变量,会被导出为环境变量,其它 shell 均可使用
 注意:此时必须使用 source 2_var.sh 才可以生效

例子:演示使用

输出结果

 4.3、错误用法

1、变量名只能包含英文字母下划线,不能以数字开头             

     1_num=100                                //  错误
     num_1=200                               //  正确
2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来;双引号内的特殊字符可以保有变量特性但是单引号内的特殊字符则仅为一般字符
     name=aa bb                             //错误,有空格
    name="aa bb"                         //正确,有空格q且有双引号
    echo "$name is me"               //输出:aa bb is me
    echo '$name is me'                //输出:$name is me

5、shell的其它变量用法

5.1、预设变量

 $#传给shell脚本参数的数量
 $*传给shell脚本参数的内容    与 $@ 一样
 $1、$2、$3、...、$9运行脚本时传递给其的参数,用空格隔开
 $?命令执行后返回的状态
"$?"用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示正确任何非0值出错)。
 $0:当前执行的进程名
 $$当前进程的进程号

编程例子:

 运行结果

下一讲,shell的环境变量的使用

相关文章:

shell脚本(语法)

一、什么是shell脚本 1.1、shell 的两层含义:既是一种应用程序,又是一种程序设计语言 1.1.1、shell是一种应用程序 交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能称之为 shell 命令解析器。 shell 是…...

java高频面试题(2023最新)

目录一.java基础1.八大基础类型2.java三大特性3.重载和重写的区别4.pubilc、protected、(dafault)不写、private修饰符的作用范围5.和equals的区别6.hashcode()值相同,equals就一定为true7.short s 1;s s 1;(程序1)和 short s 1&#xff…...

视觉感知(二):车位线检测

1. 简介 本期为大家带来车位线检测相关知识点,以及算法工程落地的全流程演示。车位线检测是自动泊车领域必不可缺的一环,顾名思义就是采用环视鱼眼相机对路面上的车位线进行检测,从而识别出车位进行泊车。 较为常规的做法是使用四颗鱼眼相机环视拼接然后在鸟瞰图上做停车位…...

2023.2.10学习记录Docker容器

Docker 必须跑在Linux内核上 镜像是一个轻量级可执行的独立软件包 新建一个docker容器只需要几秒钟 Docker常用命令 启动类命令 镜像命令 容器命令 docker images docker search --limit 5 redis docker pull redis:6.0.8 docker system df 查看镜像/容器/…...

扩散模型diffusion model用于图像恢复任务详细原理 (去雨,去雾等皆可),附实现代码

文章目录1. 去噪扩散概率模型2. 前向扩散3. 反向采样3. 图像条件扩散模型4. 可以考虑改进的点5. 实现代码1. 去噪扩散概率模型 扩散模型是一类生成模型, 和生成对抗网络GAN 、变分自动编码器VAE和标准化流模型NFM等生成网络不同的是, 扩散模型在前向扩散过程中对图像逐步施加噪…...

pytorch

PyTorch基础 import torch torch.__version__ #return 1.13.1cu116基本使用方法 矩阵 x torch.empty(5, 3)tensor([[1.4586e-19, 1.1578e27, 2.0780e-07],[6.0542e22, 7.8675e34, 4.6894e27],[1.6217e-19, 1.4333e-19, 2.7530e12],[7.5338e28, 8.1173e-10, 4.3861e-43],[2.…...

软件测试—对职业生涯发展的一些感想

目录:导读 职场生涯 1、短期规划 2、长期规划 自身定位 1、你在哪儿? 2、你想要什么? 3、你拥有什么? 4、你需要做什么?什么时候做? 5、淡定啊淡定 最近工作不是很忙,有空都是在看书&a…...

5年经验之谈:月薪3000到30000,测试工程师的变“行”记!

自我介绍下,我是一名转IT测试人,我的专业是化学,去化工厂实习才发现这专业的坑人之处,化学试剂害人不浅,有毒,易燃易爆,实验室经常用丙酮,甲醇,四氯化碳,接触…...

全价值链赋能,数字化助力营销价值全力释放 | 爱分析报告

报告编委 张扬 爱分析联合创始人&首席分析师 文鸿伟 爱分析高级分析师 王鹏 爱分析分析师 外部专家(按姓氏拼音排序) 黄洵 客易达 联合创始人 毛健 云徙科技 副总裁 & COO 特别鸣谢(按拼音排序) 报告摘要 在…...

【自学Docker 】Docker search命令

大纲 Docker search命令 docker search命令教程 docker search 命令用于从 Docker Hub 查找镜像。 docker search命令语法 haicoder(www.haicoder.net)# docker search [OPTIONS] TERMdocker search命令参数 参数描述docker search --filter设置过滤条件。docker search -…...

银行零售如何更贴近客户?是时候升级你的客户旅程平台了

随着数字化战略推进,各大银行持续加大对线上多渠道的建设投入,客户触达也愈发移动化、智能化。与此同时,手机银行飞速发展产生并累积了大量客户行为数据,呈多样化、海量化等特点,将在用户体验、客户经营、手机银行运营…...

零入门kubernetes网络实战-12->基于DNAT技术使得外网可以访问本宿主机上veth-pair链接的内部网络

视频地址(稍后上传) 本篇文章测试如何让veth pair链接的内网网络可以被本局域网的其他宿主机访问到? 1、测试环境介绍 一台centos虚拟机 # 查看操作系统版本 cat /etc/centos-release # 内核版本 uname -a uname -r # 查看网卡信息 ip a s eth02、网络拓扑 3、操…...

conda环境管理命令

conda环境管理命令 1.环境检查 1)查看安装了哪些包 conda list 2)查看当前存在哪些虚拟环境 conda env list conda info -e [rootoracledb anaconda3]# conda info -e # conda environments: # base * /home/anaconda33)检查更新当前conda con…...

ubuntu clion从0开始搭建一个风格转换ONNX推理网络 opencv cuda::dnn::net

系统搭建 系统搭建 OpenCV的安装 cmake sudo apt-get install cmake其他环境以来 sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev 不安装会报这个错误 OpenCV(4.6.0) /hom…...

1.十大排序算法

1.什么是排序算法? 在梳理十大排序算法之前,虽然知道排序算法是将数字或字母按增序排列的算法,但该理解过于片面,那排序算法的权威定义是什么呢。 一个排序算法(英语:Sorting algorithm)是一种…...

算法导论—SAT、NP、NPC、NP-Hard问题

算法导论—SAT、NP、NP-Hard、NPC问题SAT 问题基本定义问题复杂性P、NP、NP-Hard、NP-Complete(NPC)证明NP-Hard关系图NP问题的概念约化的定义NPC问题NP-Hard问题SAT 问题基本定义 SAT 问题 (Boolean satisfiability problem, 布尔可满足性问题,SAT): 给…...

linux入门---基础指令(上)

这里写目录标题前言ls指令pwd指令cd指令touch指令mkdirrmdirrmman指令cp指令mv指令前言 我们平时使用电脑主要是通过鼠标键盘以及操作系统中自带的图形来对电脑执行相应的命令,比如说我想打开D盘中的cctalk这个文件: 我就可以先用鼠标左键单击这个文件…...

大数据Kylin(一):基础概念和Kylin简介

文章目录 基础概念和Kylin简介 一、​​​​​​​OLTP与OLAP 1、​​​​​​​​​​​​​​OLTP 2、​​​​​​​​​​​​​​OLAP 3、​​​​​​​​​​​​​​OLTP与OLAP的关系 二、​​​​​​​​​​​​​​数据分析模型 1、星型模型 2、雪花模型 …...

推进行业生态发展完善,中国信通院第八批RPA评测工作正式启动

随着人工智能、云计算、大数据等新兴数字技术的高速发展,数字劳动力应用实践步伐加快,以数字生产力、数字创造力为基础的数字经济占比逐年上升。近年来,机器人流程自动化(Robotic Process Automation,RPA)成…...

DOM编程-获取下拉列表选中项的value

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>获取下拉列表选中项的value</title> </head> <body> <script type"text/javascript"> …...

你用AI写代码时,是不是总觉得“它懂语法,却搞不定真实工程”?Composer 2的答案在这里

很多开发者都有过这种体验&#xff1a;把一个真实项目需求甩给AI&#xff0c;它能秒出语法完美的代码片段&#xff0c;可一到大型代码库、遗留系统、多文件联动的时候&#xff0c;就开始原地打转。改了半天核心逻辑没动&#xff0c;引入新问题&#xff0c;或者干脆在长链条任务…...

计算机毕设 java 基于 BS 的驾校在线学习考试系统 SpringBoot 驾校在线学习与考试管理平台 JavaWeb 驾校理论学习与模拟考试系统

计算机毕设 java 基于 BS 的驾校在线学习考试系统 43i2x9&#xff0c;末尾的数字和英文也要加上 &#xff08;配套有源码 程序 mysql 数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联 xi 可分享随着驾考需求的不断增长&#xff0c;传统驾校理…...

你还在给每个图片父元素加类名?CSS :has() 让选择器“逆天改命”

你还在给每个图片父元素加类名&#xff1f;CSS :has() 让选择器“逆天改命” 引言 “组长&#xff0c;这个需求我写不了。” “什么需求&#xff1f;” “产品经理说&#xff0c;所有包含图片的卡片&#xff0c;要在卡片上加一个‘带图标识’的边框。但是这些卡片是动态渲染的&…...

当多线雷达遇上RTK:一个能跑工业现场的SLAM方案

多传感器融合建图及定位的工程化落地方案&#xff0c;多线雷达rtk&#xff1b;室内室外导航都适用。 包含部署文档和代码注释&#xff1b;包含工程落地角度的优化。 不含运动控制。 室外场景用RTK信号稳如老狗&#xff0c;一进厂房立马抓瞎&#xff1b;多线雷达在室内横扫千军…...

OpCore Simplify:终极指南!让黑苹果配置从8小时缩短到45分钟的自动化神器

OpCore Simplify&#xff1a;终极指南&#xff01;让黑苹果配置从8小时缩短到45分钟的自动化神器 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在…...

2025年开源工具jable-download:视频下载工具高效解决方案

2025年开源工具jable-download&#xff1a;视频下载工具高效解决方案 【免费下载链接】jable-download 方便下载jable的小工具 项目地址: https://gitcode.com/gh_mirrors/ja/jable-download 在数字化内容消费日益增长的今天&#xff0c;视频资源的获取与保存成为许多用…...

新手友好:在快马平台用mc、jc相关案例轻松上手前端开发

作为一个刚接触前端开发的新手&#xff0c;我最近在InsCode(快马)平台尝试做了一个特别适合练手的小工具——代码行数统计器。这个项目用最基础的HTML、CSS和JavaScript实现&#xff0c;但包含了前端开发的几个核心概念&#xff0c;特别适合想通过实际案例学习的朋友。 项目功能…...

PFC颗粒流代码模拟岩石预制裂隙与完整岩石单轴压缩对比分析

PFC颗粒流代码 pfc离散元岩石预制裂隙&#xff0c;裂隙岩石与完整岩石单轴压缩代码&#xff0c;可出各种裂隙形式&#xff0c;可分析应力应变曲线图&#xff0c;裂隙发育与数量&#xff0c;能量变化&#xff0c;简易声发射分析等做岩石单轴压缩离散元模拟的&#xff0c;谁没为…...

LabVIEW新手避坑指南:用For循环和数组搞定水仙花数,别再手动算啦!

LabVIEW实战&#xff1a;用For循环与数组高效求解水仙花数的5个关键技巧 水仙花数这个经典的编程练习题&#xff0c;在文本编程语言中可能只需十几行代码&#xff0c;但切换到LabVIEW的图形化编程环境时&#xff0c;不少初学者会陷入连线混乱和逻辑纠结。本文将从实际工程视角…...

文明降级运动:回归纸笔抵抗AI监控

在AI技术席卷软件测试领域的浪潮中&#xff0c;一个看似“倒退”却极具战略意义的趋势正在兴起——文明降级运动。这场运动的核心是主动回归纸笔工具&#xff0c;以抵抗AI监控带来的系统性风险。作为软件测试从业者&#xff0c;我们身处技术前沿&#xff0c;见证了AI在缺陷预测…...