LInux shell编程之基础语法

目录

1、shell概述

1.1、查看Linux 提供的 Shell 解析器

1.2、bash 和 sh 的关系

1.3、查看系统(centos)默认使用的解释器

2、脚本的基础使用

2.1、脚本的格式

2.2、脚本的执行方式

方式一:采用 bash / sh + 脚本的相对路径或绝对路径(脚本无需可执行( +x )权限)

2.2.1、bash + 脚本的相对路径

2.2.2、bash + 脚本的绝对路径

方式二:直接输入脚本的绝对路径或相对路径执行脚本(要求脚本必须具有可执行权限+x)

2.2.3、给目标文件 tesh.sh 添加可执行权限

2.2.4、使用相对路径执行脚本

2.2.5、使用绝对路径执行脚本

方式三:在脚本的路径前加上“.”或者 source 执行脚本

2.3、Linux 中的单引号、双引号、反引号

2.3.1、单引号

2.3.2、双引号

2.3.3、反引号

3、变量

3.1、系统预定义变量

3.2、自定义变量

3.2.1、基本语法

3.2.2、变量定义规则

3.3、特殊变量

3.3.1、$n

3.3.2、$#

3.3.3、$* 与 $@

3.3.4、$?

1、shell概述

  • shell 是一个命令解释器,它接收应用程序/控制台命令。然后调用操作系统内核
  • shell 是一个功能强大的编程(脚本)语言,易编写、易调试、灵活性强

1.1、查看Linux 提供的 Shell 解析器

  • 命令:cat /etc/shells

1.2、bash 和 sh 的关系

  • 命令:ls -l /bin/sh

1.3、查看系统(centos)默认使用的解释器

  • 命令:echo $SHELL

2、脚本的基础使用

2.1、脚本的格式

  • shell 脚本一般已 .sh 后缀命名以示区别
  • shell 脚本内容以 #!/bin/bash 或 #!/bin/sh 开头 (指定解释器)

2.2、脚本的执行方式

方式一:采用 bash / sh + 脚本的相对路径或绝对路径(脚本无需可执行( +x )权限)

  • 说明:本质是 bash 解析器帮你执行脚本,所以脚本本身不需要执行 权限
2.2.1、bash + 脚本的相对路径
  • 命令:bash test.sh 或 bash ./test.sh 等价于 sh test.sh 或 sh ./test.sh

2.2.2、bash + 脚本的绝对路径
  • 命令:bash /home/testhadoop/test/scripts/test.sh 或 sh /home/testhadoop/test/scripts/test.sh

方式二:直接输入脚本的绝对路径或相对路径执行脚本(要求脚本必须具有可执行权限+x)

  • 说明:本质是脚本需要自己执行,所以需要执行权限。
2.2.3、给目标文件 tesh.sh 添加可执行权限
  • 命令:chmod +x test.sh 或者 chmod 755 test.sh

2.2.4、使用相对路径执行脚本
  • 命令:./test.sh
  • 注意:使用相对路径执行只能使用 ./test.sh 的方式执行,直接使用 test.sh 不能执行 ,因为test.sh 并没有添加到环境变量PATH里面,所以不能执行。

2.2.5、使用绝对路径执行脚本
  • 命令:/home/testhadoop/test/scripts/test.sh

方式三:在脚本的路径前加上“.”或者 source 执行脚本

  • 命令: . test2.sh 或 source test2.sh

现象:

  • 可以看出使用方式一和方式二执行,执行完成后在当前shell下使用命令:echo $test_var 得到变量test_var的值为空,而使用方式三执行脚本,执行完成后,可在当前的shell下获取到变量test_var的值。

原因:

  • 方式一和方式二,在当前的shell中打开了一个子shell来执行脚本内容,脚本执行结束,子shell关闭,回到父shell中(即当前的shell中)
  • 方式三,执行脚本是直接在当前的shell中执行的,没有开启子shell进程,这也是为什么我们每次在修改完/etc/profile 文件以后,需要使用 source 执行一下文件的原因。

区别:

  • 开子 shell进程 与不开子 shell 进程的区别就在于,环境变量的继承关系,子shell进程可以继承父shell进程的变量,而父shell进程不可见子shell进程的变量。
  • 注意:修改变量值只对当前shell以及其子shell生效,对父shell之上的层级不生效,包括修改全局变量。

2.3、Linux 中的单引号、双引号、反引号

2.3.1、单引号

说明:单引号属于强引用,它会忽略所有被引起来的字符的特殊处理,被引用起来的字符会被原封不动的使用,需要注意的是它不允许引用自身,即单引号内部不允许嵌套单引号。

单引号把其中的内容全部当做字符串处理,忽略内部所有的命令和特殊字符。

示例:

2.3.2、双引号

说明:双引号属于弱引用,它会对一些被引起来的字符进行特殊处理。

区别:双引号与单引号的区别在于其可以包含特殊字符(单引号直接输出内部字符串,不解析特殊字符;双引号内则会解析特殊字符);如果要忽略特殊字符,就可以利用\来转义,忽略特殊字符,作为普通字符输出。

示例:

2.3.3、反引号

说明:用来包含一个命令字符串,其中的命令会先执行,得到的结果会返回到当前层其他命令再执行;其作用与$(command)类似。

示例:遍历当前文件夹及其一级子文件夹的详细信息

3、变量

变量分类:

根据变量使用范围分为:

  • 全局变量
  • 局部变量

根据定义类型分为:

  • 系统变量
  • 自定义变量

3.1、系统预定义变量

1、常用系统变量

  • PATH、HOME、SHELL、USER
  • 注意:系统变量都是大写,自定义变量大小写不做要求,一般是小写。

2、常用操作

(1)查看系统变量的值

  • 方式:$系统变量名

如:查看系统变量HOME的值

  • echo $HOME

(2) 查看系统环境变量

  • 命令:env

(3) 查看当前shell中所有的变量,包括临时变量、自定义变量

  • 命令:set

3.2、自定义变量

3.2.1、基本语法

  • 定义变量:变量名=变量值;注意:=号前后不能有空格
  • 撤销/删除变量:unset 变量名
  • 声明静态变量:readonly 变量名; 注意:不能使用unset删除
  • 把局部变量变成全局变量:export 变量名

3.2.2、变量定义规则

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头;环境变量建议全部大写
  • 中间不能有空格,可以使用下划线_
  • 不能使用标点符号
  • 不能使用bash里的关键字(可以用help命令查看保留关键字)
  • 等号两侧不能有空格
  • 在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算
  • 变量的值如果有空格,需要使用双引号或单引号括起来

3.3、特殊变量

3.3.1、$n

功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,超过十个以 上的参数,需要用大括号包含,如${10}。

示例:

3.3.2、$#

功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及 加强脚本的健壮性

示例:

3.3.3、$* 与 $@

$* 功能描述:代表命令行中所有的参数,$* 不被双引号“”包含时,把每个参数单独区分,可对每个参数进行遍历;被双引号“”包含时,把所有的参数看成一个整体

$@ 功能描述:代表命令行中所有的参数,$@ 把每个参数单独区分,可对每个参数进行遍历

示例:

3.3.4、$?

功能描述:查看最后一次执行的命令的返回状态。

  • 如果这个变量的值为 0,证明上一 个命令正确执行;
  • 如果这个变量的值为非 0(具体值,由命令自己来决定),则证明 上一个命令执行有误。

示例:

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

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

相关文章

Intel性能分析工具Vtune安装和使用简介

一、介绍 Intel Vtune profiler是用于串行和多线程应用程序的性能分析工具,可以帮助软件开发人员对应用程序的性能问题进行分析,支持包括linux和windows在内的多种操作系统。主要功能包括: 性能分析:可以对应用程序进行深入的性…

单片机入门还能从51开始吗?

选择从51单片机开始入门还是直接学习基于ARM核或RISC核的单片机,取决于学习目标、项目需求以及个人兴趣。每种单片机都有其特定的优势和应用场景,了解它们的特点可以帮助你做出更合适的选择。 首先,我们说一下51单片机的优势: 成熟…

网络安全:绕过 MSF 的一次渗透测试

这次渗透的主站是 一个 Discuz!3.4 的搭建 违法招 piao 网站, 配置有宝塔 WAF 用 Discuz!ML 3.X 的漏洞进行攻击,但是没有成功 发现主站外链会有一个发卡网,引导人们来这充值,是 某某发卡网,而且域名指向也是主站的 ip…

数据库服务的运行与登录

打开数据库服务 数据库服务: SQL Server(MSSQLServer) 运行在服务器端的应用程序, 提供数据的存储 / 处理和事务等在使用DBMS的客户端之前必须首先打开该服务 客户端连接到服务器 关于客户端 / 服务器端的说明 客户端 : 数据库管理系统(DBMS), 应用程序服务器端 : 安装的数据…

L1-8 刮刮彩票

“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示: 每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 33 的“九宫格”形式排布在彩票上。 在游戏开始时能看见一个位置上…

「不羁联盟/XDefiant」4月20号开启服务器测试,游戏预下载安装教程

XDefiant》开启Alpha测试,这是一款免费游玩的快节奏 FPS 竞技游戏,可选择特色阵营,搭配个性化的装备,体验 6v6 对抗或是线性游戏模式。高品质射击竞技端游XDefiant以6v6双边对抗为核心,对局模式分为区域与线性两大类&a…

视频基础学习五——视频编码基础二(编码参数帧、GOP、码率等)

系列文章目录 视频基础学习一——色立体、三原色以及像素 视频基础学习二——图像深度与格式(RGB与YUV) 视频基础学习三——视频帧率、码率与分辨率 视频基础学习四——视频编码基础一(冗余信息) 视频基础学习五——视频编码基础…

【智能算法】花朵授粉算法(FPA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2012年,Yang等人受到自然界花朵授粉过程启发,提出了鸭群算法(Flower Pollination Algorithm, FPA)。 2.算法原理 2.1算法思想 FPA基于自然界花朵授…

三步教你怎么把icloud照片恢复至iphone!

“我手机里面照片被优化后,然后不小心把所有被优化的模糊照片从手机中删除了,但是iCloud还有,我应该怎样把iCloud的照片重新放回手机?谢谢。” 在使用iPhone时,iCloud照片库是一个非常方便的功能,它允许你在…

pnpm - Failed to resolve loader: cache-loader. You may need to install it.

起因 工作原因需要研究 vue-grid-layout 的源码,于是下载到本地。因为我习惯使用 pnpm,所以直接用 pnpm i 安装依赖,npm run serve 启动失败。折腾了一番没成功。 看到源码里有 yarn.lock,于是重新用 yarn install 安装依赖&…

使用Unity 接入 Stable-Diffusion-WebUI的 文生图api 并生成图像

使用Unity 接入 Stable-Diffusion-WebUI 文生图生成图像 文章目录 使用Unity 接入 Stable-Diffusion-WebUI 文生图生成图像一、前言二、具体步骤1、启动SD的api设置2、unity 创建生图脚本3、Unity 生图交互配置步骤 1: 创建sdControl步骤2:生成后图片画布步骤3&…

Groovy程序设计-【第一部分Groovy起步】-02-面向Java开发者的Groovy

前言: 知识点记录来源于【Groovy程序设计】一书中,本文仅作知识点记录供日后使用查询,不做教程使用。 groovy支持java语法,并且保留了java的语义,所以我们可以随心所欲的混用两种语言。 1.从Java到Groovy 先看一个…

从「宏大叙事」到「生活叙事」,小红书品牌种草的的“正确姿势”

不同于抖音和微博,在小红书上,品牌营销的基调应该是怎样的?品牌怎样与小红书用户对话?什么样的内容,才能走进小红书用户的心中?本期,小编将带大家洞察品牌在小红书营销的“正确姿势”。从「小美…

Table表格(关于个人介绍与图片)

展开行&#xff1a; <el-table :data"gainData" :border"gainParentBorder" style"width: 100%"><el-table-column type"expand"><template #default"props"><div m"4"><h3>工作经…

百度文心一言:官方开放API开发基础

目录 一、模型介绍 1.1主要预置模型介绍 1.2 计费单价 二、前置条件 2.1 创建应用获取 Access Key 与 Secret Key 2.2 设置Access Key 与 Secret Key 三、基于千帆SDK开发 3.1 Maven引入SDK 3.2 代码实现 3.3 运行代码 一、模型介绍 文心一言&#xff08;英文名&…

Java实现生成中间带图标的二维码

Java实现生成中间带图标的二维码 生成Base64格式的二维码&#xff0c;返回html渲染 package your.package;import com.google.zxing.*; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcod…

DSPE-PEG-TPP 磷脂聚乙二醇-磷酸三苯酯 靶向线粒体纳米颗粒药物递送系统

DSPE-PEG-TPP 磷脂聚乙二醇-磷酸三苯酯 靶向线粒体纳米颗粒药物递送系统 【中文名称】磷脂-聚乙二醇-磷酸三苯酯 【英文名称】DSPE-PEG-TPP 【结 构】 【品 牌】碳水科技&#xff08;Tanshtech&#xff09; 【纯 度】95%以上 【保 存】-20℃ 【规 格】50mg,…

数字工厂系统的开发

数字工厂系统&#xff08;Digital Factory System&#xff0c;DFS&#xff09;是基于数字孪生技术&#xff08;Digital Twin Technology&#xff09;和信息物理融合系统&#xff08;Cyber-Physical System&#xff0c;CPS&#xff09;构建的&#xff0c;用于仿真、分析和优化制…

密码学 | 承诺:基本概念

目录 正文 1 承诺的交互 2 承诺的属性 3 硬币抛掷问题 3.1 朴素版方案 3.2 承诺版方案 &#x1f951;源自&#xff1a;https://en.wikipedia.org/wiki/Commitment_scheme &#x1f951;写在前面&#xff1a;英文的承诺是 commitment scheme&#xff0c;否则很难进行…

网络爬虫入门

爬虫&#xff08;也被称为网络爬虫或网络蜘蛛&#xff09;是一种自动化程序&#xff0c;它可以在互联网上自动抓取数据。爬虫的基本工作原理通常包括以下几个步骤&#xff1a;发送请求&#xff1a;爬虫向目标网站发送HTTP请求&#xff0c;请求网页内容。接收响应&#xff1a;爬…