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单片机的优势: 成熟…

前端调用存储过程很慢,但是在数据库执行很快,解决方案

原因:选项可以指示 SQL Server 每次执行存储过程时都复用上一次编译的执行计划 。 有时候存储过程的执行计划会因为参数值的不同而产生变化 , 存储过程的执行计划会被缓存,如果存储过程的执行计划过多且占用了大量内存,可能会导致内存压力增加…

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

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

数据库服务的运行与登录

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

L1-8 刮刮彩票

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

工作中使用花名的意义?

标题:工作中使用花名的意义 引言 在现代职场中,使用花名(或化名)已经成为一种普遍的现象。花名是指在工作场合或社交网络上,个人使用的非正式、非官方的名称,通常是与真实姓名不同的昵称或代号。这种现象…

Apache SeaTunnel社区成功入选开源之夏活动,现开启导师招募!

随着开源文化在全球范围内的蓬勃发展,Apache SeaTunnel社区也在不断探索如何更有效地参与并贡献于这一伟大的事业中。 最近我们收到了一个好消息,Apache SeaTunnel社区已成功入选参加由中国科学院软件研究所“开源软件供应链点亮计划”发起的“开源之夏…

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

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

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

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

@Resource 与 @Autowired区别

Resource 和 Autowired 都是用于依赖注入的注解,但它们有一些区别。 Resource 注解: 来源: Resource 是由 JavaEE 提供的注解,它不属于 Spring 框架的一部分。 装配方式: Resource 默认按照名称进行装配,如…

【智能算法】花朵授粉算法(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照片库是一个非常方便的功能,它允许你在…

深入了解MySQL中的SQL函数

深入了解MySQL中的SQL函数可以极大地提升数据处理的能力和灵活性。这些函数涵盖了从数学计算、字符串操作、日期时间处理到复杂的聚合和窗口函数。在这篇文章中,我们将详细讨论MySQL中的各种SQL函数,包括它们的用途、使用场景和一些高级技巧。 数学函数…

【QT+QGIS跨平台编译】177:【QGIS_App+Qt跨平台编译】之一(一套代码、一套框架,跨平台编译)

文章目录 一、QGIS_App介绍二、QGIS下载三、文件分析四、pro文件一、QGIS_App介绍 QGIS_App是一个基于QGIS的完整的GIS系统库,它不仅可以作为一个独立的GIS应用程序使用,还可以将其各个组件作为二次开发的一部分。QGIS_App具有一个完整的GIS主界面和多个插件(plugins),这些…

spring事件监听

spring事件监听 ApplicationListener监听容器中发布的事件 实现ApplicationListener来完成事件监听 public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { /** * Handle an application event. * param event the event t…

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

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

如何用JavaScript/来更新其他meta标签

下面是一个简单的例子&#xff0c;展示了如何使用JavaScript来更新页面中的其他meta标签。这个例子中&#xff0c;我们将更新description和author两个meta标签。 首先&#xff0c;假设我们有以下HTML代码&#xff1a; <!DOCTYPE html> <html lang"en">…

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

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

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

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